您好,我正在尝试通过云构建在我的gke集群上部署。我可以部署。但每次我推送新的images.My集群时,并不是选择新的镜像,而是仅使用旧的镜像部署pod (没有任何改变).When我删除了我的pod并触发了云构建,然后它就选择了新的镜像。我还添加了ImagePullPolicy= Always。下面是我的cloudbuild.yaml文件。
- id: 'build your instance'
name: 'maven:3.6.0-jdk-8-slim'
entrypoint: mvn
args: ['clean','package','-Dmaven.test.skip=true']
- id: "docker build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/PID/test', '.']
name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/PID/TEST']
- id: 'Deploy image to kubernetes'
name: 'gcr.io/cloud-builders/gke-deploy'
args:
- run
- --filename=./run/helloworld/src
- --location=us-central1-c
- --cluster=cluster-2我的pod清单看起来像这样。
apiVersion: v1
kind: Pod
metadata:
name: Test
labels:
app: hello
spec:
containers:
- name: private-reg-containers
image: gcr.io/PID/test
imagePullPolicy: "Always"任何帮助都是非常感谢的。
发布于 2021-02-01 16:14:30
这是预期的行为,您可能会混淆imagePullPolicy: "Always"的用法。这在这个answer中得到了很好的解释
Kubernetes并没有关注镜像的新版本。镜像拉取策略指定如何获取镜像以运行容器。总是意味着它每次启动容器时都会尝试拉出一个新版本。要查看更新,您需要删除Pod (而不是部署)-新创建的Pod将运行新镜像。没有直接的方法可以让Kubernetes使用新镜像自动更新正在运行的容器。这将是连续交付系统的一部分(可能使用带有新sha256sum或图像标签的kubectl set图像-但不是最新的)。
这就是为什么当你重新创建pod时,它们会得到最新的图像。因此,您的问题的答案是显式地告诉K8s获取最新的图像。在我与你分享的例子中,我使用了两个标签,一个是子句latest,它更多地用于以友好的名称共享图像,另一个是使用$BUILD_ID的标签,它用于更新GKE中的图像。在这个例子中,我更新了一个部署的镜像,所以你只需要修改它来更新一个独立的pod,这应该是你的小“家庭作业”。
steps:
#Building Image
- name: 'gcr.io/cloud-builders/docker'
id: build-loona
args:
- build
- --tag=${_LOONA}:$BUILD_ID
- --tag=${_LOONA}:latest
- .
dir: 'loona/'
waitFor: ['-']
#Pushing image (this pushes the image with both tags)
- name: 'gcr.io/cloud-builders/docker'
id: push-loona
args:
- push
- ${_LOONA}
waitFor:
- build-loona
#Deploying to GKE
- name: "gcr.io/cloud-builders/gke-deploy"
id: deploy-gke
args:
- run
- --filename=k8s/
- --location=${_COMPUTE_ZONE}
- --cluster=${_CLUSTER_NAME}
#Update Image
- name: 'gcr.io/cloud-builders/kubectl'
id: update-loona
args:
- set
- image
- deployment/loona-deployment
- loona=${_LOONA}:$BUILD_ID
env:
- 'CLOUDSDK_COMPUTE_ZONE=${_COMPUTE_ZONE}'
- 'CLOUDSDK_CONTAINER_CLUSTER=${_CLUSTER_NAME}'
waitFor:
- deploy-gke
substitutions:
_CLUSTER_NAME: my-cluster
_COMPUTE_ZONE: us-central1
_LOONA: gcr.io/${PROJECT_ID}/loonahttps://stackoverflow.com/questions/65889046
复制相似问题