有没有办法为Cloud Run Service设置“ imagePullPolicy”?

时间:2019-07-07 04:39:26

标签: google-cloud-run

在Google容器注册表上更新了我的图像后,我希望能够自动更新我的Google Cloud Run服务。

我需要基于同一图像(具有:latest的标记)更新多个Cloud Run服务,所以我希望它可以正常工作。

  # build & push the container image
- name: "gcr.io/kaniko-project/executor:latest"
  args: ["--cache=true", "--cache-ttl=48h", "--destination=gcr.io/project/titan:latest"]

当前,我的泰坦映像已更新,但是没有新的修订版本部署到Cloud Run。

2 个答案:

答案 0 :(得分:2)

当您将新图像推送到标签引用时,Google Cloud Run不会自动部署修订。没有的原因很多。

在部署Cloud Run修订版时,它将计算映像参考的sha256哈希。

因此,当您使用:latest标签指定容器映像时,Cloud Run将使用其sha256参考来部署和扩展该服务的修订版。当您更新:latest标记以指向新图像时,Cloud Run仍将使用先前的图像。否则将是危险和湿滑的斜坡。

如果您需要基于新的映像推送将新修订版自动部署到Cloud Run,我建议两种解决方案:

  1. 在您的Google Cloud Build流程中执行“ gcloud beta run deploy”命令。 (简单)https://cloud.google.com/run/docs/continuous-deployment
  2. 编写GCF /运行服务,每次通过PubSub订阅Google Cloud Build(或GCR)通知推送新图像时,就会将您的应用部署到Cloud Run。 (难得多)

答案 1 :(得分:-1)

默认的拉取策略是IfNotPresent,它会导致Kubelet跳过拉取已存在的图像。如果您想始终强制拉动,则可以执行以下操作之一:

  • 将容器的imagePullPolicy设置为“始终”。
  • 省略imagePullPolicy并使用:latest作为要使用的图像的标签。
  • 省略imagePullPolicy和要使用的图像标签。
  • 启用AlwaysPullImages准入控制器。

请注意,您应该避免使用:latest标记,有关更多信息,请参见Best Practices for Configuration

例如,创建一个YAML文件dummy.yaml

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: whatever
      image: index.docker.io/DOCKER_USER/PRIVATE_REPO_NAME:latest
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]
  imagePullSecrets:
    - name: myregistrykey

然后运行:

kubectl create -f dummy.yaml