如何将OpenShift Pipelines构建的新镜像标签应用至运行中Pod?
OpenShift Pipelines构建镜像后更新Pod镜像标签(非latest)的方案
不用纠结latest标签,OpenShift有几种可靠的方式能让你把新构建的镜像标签自动应用到运行的Pod里,下面是最常用的两种方案:
1. 给Deployment配置ImageChange触发器
这是OpenShift原生的自动更新方式,只要你的镜像推送到内部镜像仓库对应的ImageStreamTag,就能自动触发Deployment滚动更新Pod,完全不用手动干预。
在你的Deployment YAML里添加触发器配置,替换成你的项目和镜像名:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: image-registry.openshift-image-registry.svc:5000/my-project/my-app:v1.0.0 triggers: - type: ImageChange imageChangeParams: automatic: true containerNames: - my-app from: kind: ImageStreamTag name: my-app:v1.0.0 namespace: my-project
注意:每次构建新标签时,你需要更新触发器里的name字段(比如改成v1.0.1),或者如果用Pipeline动态生成标签,可以在Pipeline里用oc命令修改这个触发器配置。
2. 在Pipeline中直接修改Deployment的镜像
如果需要更灵活的控制(比如在构建完成后先跑测试,再更新Pod),可以在Tekton Pipeline里加一个Task,用oc命令直接更新Deployment的镜像字段。
比如用官方的openshift-client Task,在Pipeline里添加这样的步骤:
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: build-and-deploy spec: params: - name: new-image-tag type: string tasks: # 这里是你的构建镜像Task,省略... - name: update-deployment taskRef: name: openshift-client params: - name: ARGS value: - set - image - deployment/my-app - my-app=image-registry.openshift-image-registry.svc:5000/my-project/my-app:$(params.new-image-tag) runAfter: - build-image
这个方案的好处是可以把构建出来的新标签作为Pipeline参数传递,全程自动化,不用手动改YAML。
额外提醒
生产环境尽量别用latest标签,因为容器运行时可能会缓存旧镜像,导致更新不及时。用语义化版本标签(比如v1.0.0、v1.0.1)或者Git提交哈希作为标签,更稳定可控。
内容的提问来源于stack exchange,提问作者Eman
相关产品推荐
相关产品推荐

