Я привязал, чтобы обновить развертывание в кластере 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 , и произошла та же ошибка.
Вопрос довольно старый (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
не забудьте проверить, был ли кластер создан как Зональный
или Региональный
, иначе вы столкнетесь с Ошибкой
.