Kubernetes 通过CloudBuilder更新图像标记以提交SHA的最佳方法是什么?
我有一个deployment.yaml,其中包含3个containers+LB服务的部署,还有cloudbuild.yaml,其中包含每次在Bitbucket git repo上有新的提交到某个分支时构建容器映像的步骤 所有这些都可以正常工作,除了在部署中使用:latest标记时,每当有新的映像版本时,我的解聚程序都不会更新,为了改变这一点,我知道我的部署映像应该使用除:latest之外的唯一性,例如git commit SHA 问题: 我不确定如何在GCB CI过程中执行图像声明更新以包含新的提交SHAKubernetes 通过CloudBuilder更新图像标记以提交SHA的最佳方法是什么?,kubernetes,google-cloud-platform,google-kubernetes-engine,google-container-registry,google-container-builder,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Google Container Registry,Google Container Builder,我有一个deployment.yaml,其中包含3个containers+LB服务的部署,还有cloudbuild.yaml,其中包含每次在Bitbucket git repo上有新的提交到某个分支时构建容器映像的步骤 所有这些都可以正常工作,除了在部署中使用:latest标记时,每当有新的映像版本时,我的解聚程序都不会更新,为了改变这一点,我知道我的部署映像应该使用除:latest之外的唯一性,例如git commit SHA 问题: 我不确定如何在GCB CI过程中执行图像声明更新以包含新的
YAML的:我相信Kubernetes不会提取它已经拥有的图像,因为它使用相同的标签:latest 我认为您的系统将受益于使用新标签: -id:更新部署 名称:gcr.io/cloud-builders/kubectl 参数:['set','image','deployment/app','nginx=eu.gcr.io/$PROJECT\u ID/nginx:$SHORT\u SHA'] 环境: -CLOUDSDK\u COMPUTE\u ZONE=europe-west1-b -CLOUDSDK_容器_集群=CLUSTER-1 您还必须为其他容器设置图像
另一种技术是使用新标记更新部署文件,并应用整个文件。我相信Kubernetes不会提取已经存在的映像,因为它使用相同的标记:latest 我认为您的系统将受益于使用新标签: -id:更新部署 名称:gcr.io/cloud-builders/kubectl 参数:['set','image','deployment/app','nginx=eu.gcr.io/$PROJECT\u ID/nginx:$SHORT\u SHA'] 环境: -CLOUDSDK\u COMPUTE\u ZONE=europe-west1-b -CLOUDSDK_容器_集群=CLUSTER-1 您还必须为其他容器设置图像
另一种技术是使用新标记更新部署文件,并应用整个文件。找到了一种解决方案,在部署精细中使用图像标记或URI变量,并在构建期间用sed替换它们 解聚剂 cloudbuild.yaml
通过在deployment fine中使用图像标记或URI变量,并在构建期间用sed替换它们,找到了一个解决方案 解聚剂 cloudbuild.yaml
是的,类似这样的,但我更愿意应用一个包含所有pod映像的文件deployment.yaml,而不是像您建议的那样逐个更新映像。我正在研究sed构建步骤,将deployment.yaml映像变量名更改为GCP动态生成的变量名。您应该能够按照Philippe的建议使用新标记更新部署文件,并应用整个文件。是的,类似这样的情况,但我更愿意应用一个包含所有pod映像的文件deployment.yaml,而不是像您建议的那样逐个更新映像。我正在研究sed构建步骤,将deployment.yaml映像变量名更改为GCP动态生成的变量名。您应该能够按照Philippe的建议使用新标记更新部署文件,并应用整个文件。
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: dev
name: app
labels:
app: app
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
initContainers:
- name: init
image: INIT_IMAGE_NAME
imagePullPolicy: Always
command: ['sh', '-c', 'cp -r /app /srv; chown -R 82:82 /srv/app']
volumeMounts:
- name: code
mountPath: /srv
containers:
- name: nginx
image: NGINX_IMAGE_NAME
imagePullPolicy: Always
ports:
- containerPort: 80
volumeMounts:
- name: code
mountPath: /srv
- name: php-socket
mountPath: /var/run
livenessProbe:
httpGet:
path: /health.html
port: 80
httpHeaders:
- name: X-Healthcheck
value: Checked
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 15
readinessProbe:
httpGet:
path: /health.html
port: 80
httpHeaders:
- name: X-Healthcheck
value: Checked
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 15
- name: php
image: PHP_IMAGE_NAME
imagePullPolicy: Always
volumeMounts:
- name: code
mountPath: /srv
- name: php-socket
mountPath: /var/run
livenessProbe:
httpGet:
path: /health.html
port: 80
httpHeaders:
- name: X-Healthcheck
value: Checked
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 15
readinessProbe:
httpGet:
path: /health.html
port: 80
httpHeaders:
- name: X-Healthcheck
value: Checked
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 15
volumes:
- name: code
emptyDir: {}
- name: php-socket
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
namespace: dev
name: app-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: app
steps:
# Build Images
- id: Building Init Image
name: gcr.io/cloud-builders/docker
args: ['build','-t', 'eu.gcr.io/$PROJECT_ID/init:$SHORT_SHA', '-f', 'init.dockerfile', '.']
- id: Building Nginx Image
name: gcr.io/cloud-builders/docker
args: ['build','-t', 'eu.gcr.io/$PROJECT_ID/nginx:$SHORT_SHA', '-f', 'nginx.dockerfile', '.']
waitFor: ['-']
- id: Building PHP-FPM Image
name: gcr.io/cloud-builders/docker
args: ['build','-t', 'eu.gcr.io/$PROJECT_ID/php:$SHORT_SHA', '-f', 'php.dockerfile', '.']
waitFor: ['-']
# Push Images
- id: Pushing Init Image
name: gcr.io/cloud-builders/docker
args: ['push','eu.gcr.io/$PROJECT_ID/init:$SHORT_SHA']
- id: Pushing Nginx Image
name: gcr.io/cloud-builders/docker
args: ['push','eu.gcr.io/$PROJECT_ID/nginx:$SHORT_SHA']
- id: Pushing PHP-FPM Image
name: gcr.io/cloud-builders/docker
args: ['push','eu.gcr.io/$PROJECT_ID/php:$SHORT_SHA']
# Update Image Tags
- id: 'Setting Init Image Tag'
name: ubuntu
args: ['bash','-c','sed -i "s,INIT_IMAGE_NAME,eu.gcr.io/$PROJECT_ID/init:$SHORT_SHA," deployment.yaml']
- id: 'Setting Nginx Image Tag'
name: ubuntu
args: ['bash','-c','sed -i "s,NGINX_IMAGE_NAME,eu.gcr.io/$PROJECT_ID/nginx:$SHORT_SHA," deployment.yaml']
- id: 'Setting PHP Image Tag'
name: ubuntu
args: ['bash','-c','sed -i "s,PHP_IMAGE_NAME,eu.gcr.io/$PROJECT_ID/php:$SHORT_SHA," deployment.yaml']
# Update Deployment
- id: Updating Deployment
name: gcr.io/cloud-builders/kubectl
args: ['apply','-f','deployment.yaml']
env:
- CLOUDSDK_COMPUTE_ZONE=europe-west2-b
- CLOUDSDK_CONTAINER_CLUSTER=clusterx
# Images
images:
- eu.gcr.io/$PROJECT_ID/init:$SHORT_SHA
- eu.gcr.io/$PROJECT_ID/nginx:$SHORT_SHA
- eu.gcr.io/$PROJECT_ID/php:$SHORT_SHA
# Tags
tags:
- master
- dev
- init