CircleCI 无法指定在 GKE 中部署到的区域

CircleCI 无法指定在 GKE 中部署到的区域

我一直在尝试使用 CircleCI 更新 GKE 集群中的部署。我能够顺利完成容器构建和上传到 GCR。

gcloud --quiet container clusters get-credentials $K8S_CLUSTER --region=$MY_REGION但是,在使用命令进行身份验证(例如更新我的 Kubernetes 部署)时,我找不到指定 GCP 区域的方法。

#!/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#

为什么CircleCI的gcloud版本不支持这个参数?

我甚至尝试过 Orbs气相色谱,同样的错误发生。

答案1

CircleCI这个问题已经很老了(1 年零 5 个月),并且可能会出现许多变化GKE

根据错误输出:

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

看起来GKE无法执行该命令。

测试

在测试中我创建了适当的环境变量,如:、、$GOOGLE_PROJECT_ID和测试部署。$MY_REGION$K8S_CLUSTERhello-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使用标志时,集群需要是一个Regional集群而不是Zonal

簇(簇-1)的输出为Zonal

$ 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]?

请记住这是最新版本。旧版本可能有不同的警告/错误内容。

但是如果你使用Regional集群(cluster-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请记住检查集群是否创建为ZonalRegional,否则,您将遇到Error

相关内容