我的部署配置使用谷歌计算引擎磁盘使用持久性卷声明。
我注意到,当我部署更新映像时,集群会尝试引入最新映像,但是当这样做时,它会因容器创建状态而陷入此错误:
服务器错误(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。我真的很喜欢使用滚动更新策略。
答案 0 :(得分:0)
根据Saad-Ali在7月14日的Kubernetes issue评论,您必须使用:MaxSurge=0和MaxUnavailable=1
“在进行滚动更新时:
i)使用"重新创建"策略,确保在创建新pod之前杀死旧pod(存在一个错误#27362,在某些情况下,这些错误很难在很久以前得到修复)
ii)使用" RollingUpdate"策略为MaxSurge=0和MaxUnavailable=1。
如果未为部署指定策略,则默认为RollingUpdate。滚动更新策略有两个参数maxUnavailable和maxSurge;未指定时,它们分别默认为1和1。这意味着在滚动更新期间,它需要保留旧部署中的至少一个pod,并允许创建额外的新pod(超出所请求的副本数)。发生这种情况时,如果新pod挂在另一个节点上,由于旧pod将磁盘作为读写连接,新pod将无法启动。“