CircleCI не может указать регион для развертывания в GKE

Я привязал, чтобы обновить развертывание в кластере GKE с помощью CircleCI. Я смог сделать сборку контейнера и загрузку в GCR работать нормально.

Но я не смог найти способ указать регион GCP при аутентификации с помощью такой команды, как gcloud --quiet container clusterters get-credentials $ K8S_CLUSTER --region = $ MY_REGION для обновления моего развертывания Kubernetes .

#!/bin/bash -eo pipefail
gcloud --quiet config set project $GOOGLE_PROJECT_ID
gcloud --quiet config set compute/region $MY_REGION
gcloud --quiet container clusters get-credentials $K8S_CLUSTER --region $MY_REGION
kubectl set image deployment/$DEPLOYMENT $APP_NAME=gcr.io/$PROJECT_ID/$APP_NAME:v2

Updated property [core/project].
Updated property [compute/region].
ERROR: (gcloud.container.clusters.get-credentials) unrecognized arguments:
  --region
  asia-southeast1
Exited with code 2

Мы знаем, что есть аргумент - region для указания региона.

root@host# gcloud container clusters get-credentials -h
Usage: gcloud container clusters get-credentials NAME [optional flags]
  optional flags may be  --help | --internal-ip | --region | --zone

For detailed information on this command and its flags, run:
  gcloud container clusters get-credentials --help
root@host#

Почему версия gcloud от CircleCI не поддерживает этот параметр?

Я даже попробовал Orbs gcr и gke , и произошла та же ошибка.

2
задан 16 September 2019 в 11:35
1 ответ

Вопрос довольно старый (1 год, 5 месяцев), и может появиться много изменений в CircleCI и GKE.

На основании вывода об ошибке:

ERROR: (gcloud.container.clusters.get-credentials) unrecognized arguments:
  --region
  asia-southeast1

Похоже, GKE не удалось выполнить эту команду.

Тесты

В тесте я создал правильные переменные среды, такие как: $GOOGLE_PROJECT_ID, $MY_REGION, $K8S_CLUSTER и hello- world тестовое развертывание.

$ gcloud --quiet config set project $GOOGLE_PROJECT_ID
Updated property [core/project].
$ gcloud --quiet config set compute/region $MY_REGION
Updated property [compute/region].

Следующим шагом было использование информации get-credentials.

Распространенной ошибкой является то, что пользователи думают, что --region и --zone имеют одно и то же значение, что не соответствует действительности. Более подробную информацию можно найти в Документации Идентификация региона или зоны

Хотя использовался флаг --region, кластер должен быть региональным, а не зональным.

Вывод в то время как кластер (кластер-1) Зональный:

$ gcloud --quiet container clusters get-credentials $K8S_CLUSTER --region $MY_REGION
Fetching cluster endpoint and auth data.
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=404, message=Not found: projects/project/locations/asia-southeast1/clusters/cluster-1.
Could not find [cluster-1] in [asia-southeast1].
Did you mean [cluster-1] in [asia-southeast1-a]?

Обратите внимание, что это самая новая версия. Более старые версии могут иметь другое содержание предупреждений/ошибок.

Но если вы будете использовать Региональный кластер (кластер-2)

$ gcloud --quiet container clusters get-credentials $K8S_CLUSTER --region $MY_REGION
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-2.

Редактирование развертывания:

$ kubectl set image deployment/hello-world hello-app=gcr.io/google-samples/hello-app:2.0
deployment.apps/hello-world image updated

Заключение

При указании --region или --zone не забудьте проверить, был ли кластер создан как Зональный или Региональный, иначе вы столкнетесь с Ошибкой.

0
ответ дан 15 February 2021 в 10:34

Теги

Похожие вопросы