代码之家  ›  专栏  ›  技术社区  ›  Mugen

更新使用readwriteOnce卷的部署将在装载时失败

  •  0
  • Mugen  · 技术社区  · 7 年前

    我的部署使用了几个卷,所有卷都定义为 ReadWriteOnce .

    将部署应用到干净集群时,POD将成功创建。

    但是,如果我更新我的部署(即更新容器映像),当为我的部署创建一个新的pod时,它在卷装载时总是失败:

    /Mugen$ kubectl get pods
    NAME                            READY     STATUS              RESTARTS   AGE
    my-app-556c8d646b-4s2kg         5/5       Running             1          2d
    my-app-6dbbd99cc4-h442r         0/5       ContainerCreating   0          39m
    
    /Mugen$ kubectl describe pod my-app-6dbbd99cc4-h442r
          Type     Reason                  Age                 From                                             Message
          ----     ------                  ----                ----                                             -------
          Normal   Scheduled               9m                  default-scheduler                                Successfully assigned my-app-6dbbd99cc4-h442r to gke-my-test-default-pool-671c9db5-k71l
          Warning  FailedAttachVolume      9m                  attachdetach-controller                          Multi-Attach error for volume "pvc-b57e8a7f-1ca9-11e9-ae03-42010a8400a8" Volume is already used by pod(s) my-app-556c8d646b-4s2kg
          Normal   SuccessfulMountVolume   9m                  kubelet, gke-my-test-default-pool-671c9db5-k71l  MountVolume.SetUp succeeded for volume "default-token-ksrbf"
          Normal   SuccessfulAttachVolume  9m                  attachdetach-controller                          AttachVolume.Attach succeeded for volume "pvc-2cc1955a-1cb2-11e9-ae03-42010a8400a8"
          Normal   SuccessfulAttachVolume  9m                  attachdetach-controller                          AttachVolume.Attach succeeded for volume "pvc-2c8dae3e-1cb2-11e9-ae03-42010a8400a8"
          Normal   SuccessfulMountVolume   9m                  kubelet, gke-my-test-default-pool-671c9db5-k71l  MountVolume.SetUp succeeded for volume "pvc-2cc1955a-1cb2-11e9-ae03-42010a8400a8"
          Normal   SuccessfulMountVolume   9m                  kubelet, gke-my-test-default-pool-671c9db5-k71l  MountVolume.SetUp succeeded for volume "pvc-2c8dae3e-1cb2-11e9-ae03-42010a8400a8"
          Warning  FailedMount             52s (x4 over 7m)    kubelet, gke-my-test-default-pool-671c9db5-k71l  Unable to mount volumes for pod "my-app-6dbbd99cc4-h442r_default(affe75e0-1edd-11e9-bb45-42010a840094)": timeout expired waiting for volumes to attach or mount for pod "default"/"my-app-6dbbd99cc4-h442r". list of unmounted volumes=[...]. list of unattached volumes=[...]
    

    那么,将更改应用到这种部署的最佳策略是什么?为了使用相同的持久性卷,是否需要一些服务中断?(我不想创建新卷-数据应该维护)

    2 回复  |  直到 7 年前
        1
  •  1
  •   elithrar    7 年前

    由于访问模式的原因,您需要在此处容忍中断。这将在创建新的存储单元之前删除现有的存储单元(卸载卷)。

    部署策略- .spec.strategy.type -_重新创建_将有助于实现以下目标: https://github.com/ContainerSolutions/k8s-deployment-strategies/blob/master/recreate/README.md

        2
  •  0
  •   ozrlz    7 年前

    这似乎是一个错误,因为 ReadWriteOnce 访问模式。记住,当您更新部署时,会创建新的pods,然后杀死旧的pods。所以,也许新的pod尝试挂载一个已经挂载的卷,这就是为什么你会收到这个消息。

    您是否尝试过使用允许多个读写器的卷?您可以在 Kubernetes Volumes documentation .

    推荐文章