首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在每次部署时拉取kubernetes上的镜像

如何在每次部署时拉取kubernetes上的镜像
EN

Stack Overflow用户
提问于 2021-01-26 00:54:08
回答 1查看 220关注 0票数 0

您好,我正在尝试通过云构建在我的gke集群上部署。我可以部署。但每次我推送新的images.My集群时,并不是选择新的镜像,而是仅使用旧的镜像部署pod (没有任何改变).When我删除了我的pod并触发了云构建,然后它就选择了新的镜像。我还添加了ImagePullPolicy= Always。下面是我的cloudbuild.yaml文件。

代码语言:javascript
复制
  - 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清单看起来像这样。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: Test
  labels:
     app: hello
spec:
  containers:
   - name: private-reg-containers
     image: gcr.io/PID/test
     imagePullPolicy: "Always"

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2021-02-01 16:14:30

这是预期的行为,您可能会混淆imagePullPolicy: "Always"的用法。这在这个answer中得到了很好的解释

Kubernetes并没有关注镜像的新版本。镜像拉取策略指定如何获取镜像以运行容器。总是意味着它每次启动容器时都会尝试拉出一个新版本。要查看更新,您需要删除Pod (而不是部署)-新创建的Pod将运行新镜像。没有直接的方法可以让Kubernetes使用新镜像自动更新正在运行的容器。这将是连续交付系统的一部分(可能使用带有新sha256sum或图像标签的kubectl set图像-但不是最新的)。

这就是为什么当你重新创建pod时,它们会得到最新的图像。因此,您的问题的答案是显式地告诉K8s获取最新的图像。在我与你分享的例子中,我使用了两个标签,一个是子句latest,它更多地用于以友好的名称共享图像,另一个是使用$BUILD_ID的标签,它用于更新GKE中的图像。在这个例子中,我更新了一个部署的镜像,所以你只需要修改它来更新一个独立的pod,这应该是你的小“家庭作业”。

代码语言:javascript
复制
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}/loona
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65889046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档