You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存Kubernetes Pod当前状态?实现重启后软件持久化

Pod重启后状态持久化解决方案

一、把运行中的Pod容器转成Docker镜像(可解决问题)

如果之前的方案没成功,大概率是操作流程不对,按下面的步骤来:

    1. 定位Pod对应的容器:
      先查Pod所在的节点:
    kubectl get pods -o wide
    
    SSH登录到该节点,找到容器ID:
    docker ps | grep <你的Pod名称>
    
    1. 提交容器为新镜像:
    docker commit <容器ID> 你的镜像仓库地址/自定义镜像名:标签
    
    1. 推送镜像到仓库:
      先登录镜像仓库,再推送:
    docker login 你的镜像仓库地址
    docker push 你的镜像仓库地址/自定义镜像名:标签
    
    1. 更新Pod配置使用新镜像:
      修改你的Deployment或StatefulSet的YAML文件,把spec.containers[0].image换成刚推送的镜像地址,然后执行:
    kubectl apply -f 你的部署文件.yaml
    

二、更推荐的持久化方案(避免重复制作镜像)

直接做镜像虽然能用,但后续维护麻烦,更推荐这两种方式:

  • 用Volume挂载工具安装目录:
    如果你的工具都装在固定目录(比如/usr/local/bin、/opt),把这些目录挂载到PVC里,安装的内容就不会丢:

    1. 创建PVC:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: tools-storage
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi  # 根据实际需求调整
    
    1. 修改Pod配置挂载PVC:
    spec:
      containers:
      - name: 你的容器名
        image: 原镜像地址:标签
        volumeMounts:
        - name: tools-volume
          mountPath: /usr/local/bin  # 替换成你安装工具的目录
      volumes:
      - name: tools-volume
        persistentVolumeClaim:
          claimName: tools-storage
    
  • 用Init Container自动安装工具:
    写个初始化容器,每次Pod启动前自动安装所需工具,不用手动操作:

    apiVersion: v1
    kind: Pod
    metadata:
      name: 你的Pod名
    spec:
      initContainers:
      - name: install-tools
        image: 原镜像地址:标签
        command: ["bash", "-c"]
        args:
        - apt update && apt install -y git curl wget && pip install requests  # 换成你的实际安装命令
        volumeMounts:
        - name: tools-volume
          mountPath: /usr/local/bin
      containers:
      - name: main-container
        image: 原镜像地址:标签
        volumeMounts:
        - name: tools-volume
          mountPath: /usr/local/bin
      volumes:
      - name: tools-volume
        emptyDir: {}  # 要持久化的话换成PVC
    

三、之前方案失败的排查要点

如果之前尝试导出镜像没成功,可能是你的集群用的是containerd而不是Docker,这时用crictl操作:

    1. 获取容器ID:
    crictl ps | grep <你的Pod名称>
    
    1. 提交容器为镜像:
    crictl commit <容器ID> 自定义镜像名:标签
    
    1. 导出镜像并导入Docker:
    crictl save 自定义镜像名:标签 -o image.tar
    docker load -i image.tar
    

内容的提问来源于stack exchange,提问作者Anil Kumar H P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:40:42