kubernetes - kubefed init 说“正在等待联邦控制平面启动”,但它永远不会出现
问题描述
我已经使用 kops 命令创建了集群。对于每个集群,我必须创建一个托管区域并将命名空间添加到 DNS 提供商。为了创建托管区域,我使用以下命令在 aws(example.com) 的托管区域中创建了一个子域:
ID=$(uuidgen) && aws route53 create-hosted-zone --name subdomain1.example.com --caller-reference $ID | jq .DelegationSet.NameServers
我通过执行上述命令获得的名称服务器包含在新创建的文件 subdomain1.json 中,内容如下。
{
"Comment": "Create a subdomain NS record in the parent domain",
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "subdomain1.example.com",
"Type": "NS",
"TTL": 300,
"ResourceRecords": [
{
"Value": "ns-1.awsdns-1.co.uk"
},
{
"Value": "ns-2.awsdns-2.org"
},
{
"Value": "ns-3.awsdns-3.com"
},
{
"Value": "ns-4.awsdns-4.net"
}
]
}
}
]
}
要获取父区域 ID,我使用了以下命令:
aws route53 list-hosted-zones | jq '.HostedZones[] | select(.Name=="example.com.") | .Id'
要将子域 NS 记录应用于父托管区域 -
aws route53 change-resource-record-sets --hosted-zone-id <parent-zone-id> --change-batch file://subdomain1.json
然后我使用 kops 命令创建了一个集群-
kops create cluster --name=subdomain1.example.com --master-count=1 --master-zones ap-southeast-1a --node-count=1 --zones=ap-southeast-1a --authorization=rbac --state=s3://example.com --kubernetes-version=1.11.0 --yes
我能够创建一个集群、验证它并获取它的节点。通过使用相同的过程,我又创建了一个集群(subdomain2.example.com)。
我已经使用这些命令为两个集群设置了别名-
kubectl config set-context subdomain1 --cluster=subdomain1.example.com --user=subdomain1.example.com
kubectl config set-context subdomain2 --cluster=subdomain2.example.com --user=subdomain2.example.com
为了在这两个集群之间建立联合,我使用了这些命令 - kubectl config use-context subdomain1
kubectl create clusterrolebinding admin-to-cluster-admin-binding --clusterrole=cluster-admin --user=admin
kubefed init interstellar --host-cluster-context=subdomain1 --dns-provider=aws-route53 --dns-zone-name=example.com
但对我来说,它显示为“等待联邦控制平面出现......”,但它没有出现。可能是什么错误?
我按照以下教程创建了 2 个集群。
https://gist.github.com/arun-gupta/02f534c7720c8e9c9a875681b430441a
解决方案
用于联合 api 服务器和控制器管理器二进制文件的默认映像存在问题。默认情况下,kubefed init 命令会考虑下面提到的图像-“gcr.io/k8s-jkns-e2e-gce-federation/fcp-amd64:v0.0.0-master_$Format:%h$”。
但是这个镜像是旧的并且不可用,联邦控制平面试图拉取镜像但是失败了。这是我得到的错误。
要纠正它,请构建您自己的 fcp 映像并将其推送到某个存储库并在 kubefed init 命令中使用此映像。以下是要执行的指令(从这个路径“$GOPATH/src/k8s.io/kubernetes/federation”运行所有这些命令)-
创建 fcp 映像并将其推送到存储库 -
docker load -i _output/release-images/amd64/fcp-amd64.tar
docker tag gcr.io/google_containers/fcp-amd64:v1.9.0-alpha.2.60_430416309f9e58-dirty REGISTRY/REPO/IMAGENAME[:TAG]
docker push REGISTRY/REPO/IMAGENAME[:TAG]
现在使用以下命令创建一个联合控制平面 -
_output/dockerized/bin/linux/amd64/kubefed init myfed --host-cluster-context=HOST_CLUSTER_CONTEXT --image=REGISTRY/REPO/IMAGENAME[:TAG] --dns-provider="PROVIDER" --dns-zone-name="YOUR_ZONE" --dns-provider-config=/path/to/provider.conf
推荐阅读
- linux - 使用 -SIGINT 关闭在破折号脚本中启动的 dd 进程
- r - dplyr `case_when()` 遇到 NA 问题
- c - 由于释放内存导致的 Valgrind 错误?
- react-native - React Native Modal CallBack - 将道具传递给父级
- sql-server - 从 VBA 运行 SQL Server 存储过程
- karate - 如何将以下soapUI请求放入空手道?
- html - 如何在 React 中逐步构建 HTML?
- css - 在 Divi Builder 的视频滑块中悬停时显示视频标题
- ruby - 如何降级 jekyll 以使用 github 页面?
- c++ - 如果它是空的并且我不能尊重它,如何设置指向它的指针?