我一直在尝试使用 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版本不支持这个参数?
答案1
CircleCI
这个问题已经很老了(1 年零 5 个月),并且可能会出现许多变化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
使用标志时,集群需要是一个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
请记住检查集群是否创建为Zonal
或Regional
,否则,您将遇到Error
。