Cloud Build - "rollout restart" 无法识别(未知命令)

Cloud Build - "rollout restart" not recognized (unknown command)

我有一个小 cloudbuild.yaml 文件,我在其中构建了一个 Docker 映像,将其推送到 Google container registry (GCR),然后将更改应用到我的 Kubernetes 集群。它看起来像这样:

steps:

  - name: 'gcr.io/cloud-builders/docker'
    entrypoint: 'bash'
    args: [
    '-c',
    'docker pull gcr.io/$PROJECT_ID/frontend:latest || exit 0'
    ]

  - name: "gcr.io/cloud-builders/docker"
    args:
      [
        "build",
        "-f",
        "./services/frontend/prod.Dockerfile",
        "-t",
        "gcr.io/$PROJECT_ID/frontend:$REVISION_ID",
        "-t",
        "gcr.io/$PROJECT_ID/frontend:latest",
        ".",
      ]

  - name: "gcr.io/cloud-builders/docker"
    args: ["push", "gcr.io/$PROJECT_ID/frontend"]

  - name: "gcr.io/cloud-builders/kubectl"
    args: ["apply", "-f", "kubernetes/gcp/frontend.yaml"]
    env:
      - "CLOUDSDK_COMPUTE_ZONE=europe-west3-a"
      - "CLOUDSDK_CONTAINER_CLUSTER=cents-ideas"

  - name: "gcr.io/cloud-builders/kubectl"
    args: ["rollout", "restart", "deployment/frontend-deployment"]
    env:
      - "CLOUDSDK_COMPUTE_ZONE=europe-west3-a"
      - "CLOUDSDK_CONTAINER_CLUSTER=cents-ideas"

构建运行很顺利,直到最后一步。 args: ["rollout", "restart", "deployment/frontend-deployment"]。它具有以下日志输出:

Already have image (with digest): gcr.io/cloud-builders/kubectl
Running: gcloud container clusters get-credentials --project="cents-ideas" --zone="europe-west3-a" "cents-ideas"
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cents-ideas.
Running: kubectl rollout restart deployment/frontend-deployment
error: unknown command "restart deployment/frontend-deployment"
See 'kubectl rollout -h' for help and examples.

据称,restart是一个未知命令。但是当我手动 运行 kubectl rollout restart deployment/frontend-deployment 时它有效。

我该如何解决这个问题?

查看Kubernetes release notes,v1.15版本引入了kubectl rollout restart命令。在您的情况下,Cloud Build 似乎使用的是尚未实施此命令的旧版本。

经过一些测试,Cloud Build 似乎使用了 kubectl 客户端版本,具体取决于集群的服务器版本。例如,当 运行 构建以下版本时:

steps:
  - name: "gcr.io/cloud-builders/kubectl"
    args: ["version"]
    env:
      - "CLOUDSDK_COMPUTE_ZONE=<cluster_zone>"
      - "CLOUDSDK_CONTAINER_CLUSTER=<cluster_name>"

如果集群的主版本是 v1.14,Cloud Build 使用 v1.14 kubectl 客户端和 returns 相同的 unknown command "restart" 错误消息。当 master 版本为 v1.15 时,Cloud Build 使用 v1.15 kubectl 客户端和命令 运行s 成功。

关于你的情况,我怀疑你的集群 "cents-ideas" 主版本是 <1.15,这可以解释你遇到的错误。根据为什么当您手动 运行 命令时它起作用(我在本地理解),我怀疑您的 kubectl 可能已通过主版本 >=1.15.

的另一个集群的身份验证