Shell脚本如何配置容器存储策略

wen 实用脚本 1

本文目录导读:

Shell脚本如何配置容器存储策略

  1. Docker 存储策略配置
  2. Podman 存储策略配置
  3. 存储卷管理策略
  4. 分布式存储配置
  5. 自动扩缩容策略
  6. 配置文件示例
  7. 验证配置

在Shell脚本中配置容器存储策略,主要取决于你使用的容器运行时环境,以下是针对不同场景的配置方法:

Docker 存储策略配置

配置存储驱动

#!/bin/bash
# 配置Docker使用overlay2存储驱动
cat > /etc/docker/daemon.json << EOF
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
# 重启Docker服务
systemctl restart docker

配置镜像存储路径

#!/bin/bash
# 修改Docker数据目录
cat > /etc/docker/daemon.json << EOF
{
  "data-root": "/data/docker",
  "storage-driver": "overlay2"
}
EOF
# 迁移现有数据(如需要)
systemctl stop docker
rsync -aP /var/lib/docker/ /data/docker/
systemctl start docker

Podman 存储策略配置

配置存储路径和驱动

#!/bin/bash
# 创建Podman存储配置文件
cat > /etc/containers/storage.conf << EOF
[storage]
driver = "overlay"
runroot = "/run/containers/storage"
graphroot = "/var/lib/containers/storage"
[storage.options]
size = ""
# 设置存储大小限制
remap-uids = ""
remap-gids = ""
EOF
# 或为用户级别配置
mkdir -p ~/.config/containers/
cat > ~/.config/containers/storage.conf << EOF
[storage]
driver = "overlay"
graphroot = "$HOME/.local/share/containers/storage"
EOF

存储卷管理策略

自动清理未使用的存储卷

#!/bin/bash
# Docker卷清理脚本
cleanup_docker_volumes() {
    echo "清理未使用的Docker卷..."
    docker volume prune -f
    # 清理特定时间前的卷
    docker volume ls -qf dangling=true | while read volume; do
        if [ -n "$volume" ]; then
            echo "删除卷: $volume"
            docker volume rm "$volume" 2>/dev/null
        fi
    done
}
# 设置定时清理任务
setup_cleanup_cron() {
    cat > /etc/cron.daily/docker-volume-cleanup << 'EOF'
#!/bin/bash
docker system prune -af --volumes
EOF
    chmod +x /etc/cron.daily/docker-volume-cleanup
}

存储限制策略

#!/bin/bash
# 限制容器存储使用量
limit_container_storage() {
    local container_name=$1
    local max_size=$2  # 如: 10g
    # Docker run时设置存储限制
    docker run -d \
        --storage-opt size=$max_size \
        --name $container_name \
        nginx
    # 或对运行中的容器限制
    docker update \
        --storage-opt size=$max_size \
        $container_name
}
# 设置全局存储配额
setup_quota() {
    # 启用磁盘配额支持
    if ! grep -q "usrquota" /etc/fstab; then
        sed -i 's/defaults/defaults,usrquota/g' /etc/fstab
        mount -o remount /
    fi
    # 初始化配额数据库
    quotacheck -cug /
    quotaon -ug /
}

分布式存储配置

配置NFS存储

#!/bin/bash
# 配置NFS作为Docker存储后端
setup_nfs_storage() {
    local nfs_server="192.168.1.100"
    local nfs_path="/exports/docker"
    local mount_point="/mnt/docker-storage"
    # 安装NFS客户端
    apt-get install -y nfs-common
    # 挂载NFS
    mkdir -p $mount_point
    mount -t nfs $nfs_server:$nfs_path $mount_point
    # 配置Docker使用NFS卷
    docker volume create \
        --driver local \
        --opt type=nfs \
        --opt o=addr=$nfs_server,rw \
        --opt device=:$nfs_path \
        nfs-volume
}

自动扩缩容策略

基于存储使用率的自动清理

#!/bin/bash
# 监控存储使用并自动清理
monitor_and_cleanup() {
    threshold=80  # 使用率超过80%时清理
    storage_path="/var/lib/docker"
    while true; do
        usage=$(df -h $storage_path | awk 'NR==2 {print $5}' | sed 's/%//')
        if [ "$usage" -gt "$threshold" ]; then
            echo "存储使用率达到 ${usage}%,执行清理..."
            # 清理未使用的镜像
            docker image prune -af
            # 清理停止的容器
            docker container prune -f
            # 清理构建缓存
            docker builder prune -af
            # 发送告警
            send_alert "存储空间不足,已执行清理"
        fi
        sleep 3600  # 每小时检查一次
    done
}
# 告警函数
send_alert() {
    local message=$1
    echo "[$(date)] $message" >> /var/log/storage-alert.log
    # 可添加邮件或webhook通知
}

配置文件示例

完整的存储策略配置脚本

#!/bin/bash
set -e
# Docker存储策略配置
configure_docker_storage() {
    echo "配置Docker存储策略..."
    # 备份现有配置
    [ -f /etc/docker/daemon.json ] && cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
    # 写入新配置
    cat > /etc/docker/daemon.json << EOF
{
    "storage-driver": "overlay2",
    "storage-opts": [
        "overlay2.override_kernel_check=true"
    ],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "10m",
        "max-file": "3"
    },
    "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
    "data-root": "/data/docker"
}
EOF
    # 重启Docker
    systemctl daemon-reload
    systemctl restart docker
    echo "Docker存储策略配置完成"
}
# 配置存储清理策略
configure_cleanup_policy() {
    echo "配置存储清理策略..."
    # 创建清理脚本
    cat > /usr/local/bin/docker-cleanup.sh << 'EOF'
#!/bin/bash
# 保留最近7天的镜像
docker image prune -a --filter "until=168h" -f
# 清理未使用的卷
docker volume prune -f
# 清理网络
docker network prune -f
# 清理构建缓存
docker builder prune -f
# 输出清理结果
echo "清理完成: $(date)"
df -h /var/lib/docker
EOF
    chmod +x /usr/local/bin/docker-cleanup.sh
    # 添加定时任务(每天凌晨2点执行)
    echo "0 2 * * * /usr/local/bin/docker-cleanup.sh" | crontab -
    echo "清理策略配置完成"
}
# 执行配置
configure_docker_storage
configure_cleanup_policy
echo "所有存储策略配置完成!"

验证配置

#!/bin/bash
# 验证存储配置
verify_storage_config() {
    echo "验证存储配置..."
    # 检查Docker存储驱动
    docker info | grep "Storage Driver"
    # 检查存储路径
    docker info | grep "Docker Root Dir"
    # 查看卷列表
    docker volume ls
    # 检查存储使用
    df -h | grep docker
}
verify_storage_config

这些脚本提供了容器存储策略的配置方法,你可以根据实际需求选择和组合使用,记得在部署前测试脚本,并根据系统环境调整参数。

抱歉,评论功能暂时关闭!