【问题标题】:Cloud Build - "rollout restart" not recognized (unknown command)Cloud Build - 无法识别“推出重启”(未知命令)
【发布时间】:2019-11-07 10:32:57
【问题描述】:

我有一个小的 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 时它可以工作。

我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试过仅将命令编写为 1 个参数?喜欢args: ["rollout restart deployment/frontend-deployment"]
  • 是的,它也不起作用

标签: kubernetes google-kubernetes-engine google-cloud-build


【解决方案1】:

Kubernetes release noteskubectl rollout restart命令是在v1.15版本中引入的。在您的情况下,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 客户端并返回相同的 unknown command "restart" 错误消息。 master版本为v1.15时,Cloud Build使用v1.15 kubectl客户端,命令运行成功。

所以关于您的情况,我怀疑您的集群“cents-ideas”主版本是 =1.15 的另一个集群进行身份验证。

【讨论】:

  • 集群版本可以更新到1.15吗?
  • 可以手动升级集群是的。您应该查看this doc 以了解升级的工作原理。
  • 对于 GKE - 这取决于您的集群的设置方式。如果您使用的是“发布版本”,您还不能选择 1.15,1.14 是最新的。如果您使用的是“发布频道”,那么 1.15 可以在快速频道下使用 - 还不是常规频道。
  • 在我们的具有“快速”发布通道的 GKE 集群将自身更新到 Kubernetes 1.16 后,kubectl rollout restart 停止工作,声称无法识别“重启”命令。不知道如何解决这个问题。
  • 您找到解决方案了吗?这个命令在 v1.14 中有没有替代方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2011-02-14
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
相关资源
最近更新 更多