Google容器引擎 - 无法初始化联合群集

时间:2017-11-07 17:34:12

标签: google-kubernetes-engine

我尝试在GKE上部署联合群集,但在尝试使用此命令创建错误时遇到错误:

./kubefed init kfed \
>   --host-cluster-context=america \
>   --dns-zone-name=${DNS_ZONE} \
>   --dns-provider="google-clouddns"
error: no configuration has been provided

我按照教程here发现,到目前为止一切都很顺利。不幸的是,我没有看到转换以获得有关错误的更详细信息。有没有人遇到过这个?

以下是我采取的所有步骤:

# Let's export some variables to call below
export PROJECT=final-project
export DNS_ZONE=my.domain.co.

# Let's Create two new clusters
gcloud container clusters create webapp-america --zone us-west1-a --num-nodes=3 --scopes cloud-platform,storage-ro,logging-write,monitoring-write,service-control,service-management,https://www.googleapis.com/auth/ndev.clouddns.readwrite
gcloud container clusters create webapp-europe --zone europe-west1-c --num-nodes=3 --scopes cloud-platform,storage-ro,logging-write,monitoring-write,service-control,service-management,https://www.googleapis.com/auth/ndev.clouddns.readwrite

# Let's extract their creds
gcloud config set container/use_client_certificate True
export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True

# Let's create 2 new contexts for easier reference
kubectl config set-context america --cluster=gke_${PROJECT}_us-west1-a_webapp-america --user=gke_${PROJECT}_us-west1-a_algolia-america
kubectl config set-context europe --cluster=gke_${PROJECT}_europe-west1-c_webapp-europe --user=gke_${PROJECT}_europe-west1-c_algolia-europe

# Let's delete the old context references
kubectl config delete-context gke_${PROJECT}_us-west1-a_webapp-america
kubectl config delete-context gke_${PROJECT}_europe-west1-c_webapp-europe

# Let's initialize the cluster
kubefed init kfed \
  --host-cluster-context=america \
  --dns-zone-name=${DNS_ZONE} \
  --dns-provider="google-clouddns"

更新 - 我决定从一个干净整洁的项目开始,我已经过了这一步。我会继续保持项目,并将继续进行故障排除

1 个答案:

答案 0 :(得分:1)

我不认为这一系列命令实际上是获取访问GKE集群所需的凭据。具体来说,运行:

# Let's extract their creds
gcloud config set container/use_client_certificate True
export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True

告诉gcloud,当它获取GKE集群的凭据时,它必须获取可用于对GKE集群进行身份验证的TLS密钥对。但它实际上并没有取任何东西。

然后当你跑:

# Let's create 2 new contexts for easier reference
kubectl config set-context america --cluster=gke_${PROJECT}_us-west1-a_webapp-america --user=gke_${PROJECT}_us-west1-a_algolia-america
kubectl config set-context europe --cluster=gke_${PROJECT}_europe-west1-c_webapp-europe --user=gke_${PROJECT}_europe-west1-c_algolia-europe

您只是创建没有内容的空上下文。您可以通过查看默认的kubeconfig文件(Linux中的cat $HOME/.kube/config)来确认这一点。

您可以通过运行以下方法解决此问题:

gcloud container clusters get-credentials webapp-america --zone us-west1-a
gcloud container clusters get-credentials webapp-europe --zone europe-west1-c

运行gcloud config set ...命令后,但在运行kubectl config set-context ...命令之前。

同样在半相关说明中,如果您使用gcloud-dns作为DNS提供商,则需要通过Google Cloud DNS编程的真实域名才能使联合服务正常工作。

编辑:第二个gcloud get-credentials命令正在调用gcloud create而不是gcloud get-credentials。现在已经解决了。