Cloud Build - «перезапуск развертывания» не распознан (неизвестная команда) - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть небольшой cloudbuild.yaml файл, в котором я создаю образ Docker, помещаю его в Реестр контейнеров Google (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 Ответ

1 голос
/ 10 ноября 2019

Принимая во внимание примечания к выпуску Kubernetes , команда kubectl 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". Когда основная версия v1.15, Cloud Build использует клиент kubectl v1.15, и команда выполняется успешно.

Так что в вашем случае, я подозреваю, что основная версия кластера "cents-ideas" - <1.15, чтообъясните ошибку, которую вы получаете. Что касается того, почему это работает, когда вы запускаете команду вручную (я понимаю локально), я подозреваю, что ваш kubectl может быть аутентифицирован в другом кластере с мастер-версией> = 1.15.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...