背景
我们正在使用k8s 1.7。我们使用deployment.yml来维护/更新k8s集群状态。在deployment.yml中,pod的image被设置为${some_image}:latest
。一旦创建了deployment,当有代码合并到master时,pod的image将更新为${some_image}:${build_num}
。
现在的情况是,假设我们需要修改deployment.yml中的资源限制并重新应用它。那么deployment的image也会更新为${some_image}:latest
。我们想要保持镜像在集群状态中的原样,而不必在deployment.yml中维护实际的标签。我们知道可以在文件中省略replicas,它默认从集群状态中取值。
问题
在1.7版本中,spec.template.spec.containers[0].image是必需的。
- 是否可能应用deployment.yml而不将image更新为
${some_image}:latest
(类似于--ignore-image-change
参数或deployment.yml中的特定字段)?如果可以,如何实现?
此外,我在1.10文档中发现image是可选的。
- 这是真的吗?如果是,从哪个版本开始?
--- 更新 ---
CI在每次合并到主干时构建和部署新的镜像。在部署时,CI运行命令kubectl set image deployment/app container=${some_image}:${build_num}
,其中${build_num}
是pipeline的构建号。
要应用deployment.yml,我们运行kubectl apply -f deployment.yml