附加到部署的持久卷声明会在部署映像更新时引发错误

时间:2017-11-14 11:31:10

标签: kubernetes google-kubernetes-engine

我的部署配置使用谷歌计算引擎磁盘使用持久性卷声明。

我注意到,当我部署更新映像时,集群会尝试引入最新映像,但是当这样做时,它会因容器创建状态而陷入此错误:

  

服务器错误(BadRequest):pod中的容器“tita-api”   “tita-api-7569bd99d7-z44dg”正在等待开始:ContainerCreating。   进一步检查我看到磁盘资源被另一个节点使用。    对于卷“app-pv”,AttachVolume.Attach失败:googleapi:错误400:磁盘资源'projects / tita-canary / zones / us-central1-a / disks / app-disk'已被'projects / tita'使用-canary /区域/ US-central1-A /实例/ GKE-蒂塔分段 - 缺省 - 池2cae0006-sxgk'

我正在使用1.8 kubernetes,目前我所做的是改变我的部署策略以重新创建这个工作,但需要一些时间来更新pod。我真的很喜欢使用滚动更新策略。

1 个答案:

答案 0 :(得分:0)

根据Saad-Ali在7月14日的Kubernetes issue评论,您必须使用:MaxSurge=0MaxUnavailable=1

“在进行滚动更新时:

i)使用"重新创建"策略,确保在创建新pod之前杀死旧pod(存在一个错误#27362,在某些情况下,这些错误很难在很久以前得到修复)

ii)使用" RollingUpdate"策略为MaxSurge=0MaxUnavailable=1

如果未为部署指定策略,则默认为RollingUpdate。滚动更新策略有两个参数maxUnavailable和maxSurge;未指定时,它们分别默认为1和1。这意味着在滚动更新期间,它需要保留旧部署中的至少一个pod,并允许创建额外的新pod(超出所请求的副本数)。发生这种情况时,如果新pod挂在另一个节点上,由于旧pod将磁盘作为读写连接,新pod将无法启动。“