kubernetes - Kops 和 Terraform k8s 集群重新创建
问题描述
我通过以下方式使用 kops 和 terraform 在 AWS 上部署 k8s 集群:
- 将 kops 状态推送到 S3 存储桶
kops toolbox template --template my_template.yaml --values values.yaml | kops replace --force -f -
- 创建 TF 清单:
kops update cluster performance.my_domain.com --target=terraform --out=.
- 部署集群
terraform apply
集群已按预期创建并运行。由于这是我的测试集群,我想从 AWS 中删除它并在每次需要时重新创建它,但是我需要它使用相同的证书,因此我不需要在 Jenkins 等外部工具中更新我的凭据。
但是当我这样做时:
- 地形破坏
- 地形应用
集群无法正常启动 - 我可以看到 kube-apiserver 无法在主节点上启动,因为它无法连接到 etcd 服务(端口 4001)。etcd 的日志显示如下所示。是选举问题吗?如何解决这个问题?
I0127 12:25:31.518158 2477 controller.go:173] starting controller iteration
I0127 12:25:31.518203 2477 controller.go:198] we are not leader
I0127 12:25:39.933312 2477 volumes.go:86] AWS API Request: ec2/DescribeVolumes
I0127 12:25:40.029403 2477 volumes.go:86] AWS API Request: ec2/DescribeInstances
I0127 12:25:40.085829 2477 hosts.go:84] hosts update: primary=map[], fallbacks=map[etcd-a-0.internal.performance.my_domain.com:[10.41.101.173 10.41.101.173] etcd-a-1.internal.performance.my_domain.com:[10.41.101.114 10.41.101.114] etcd-b-2.internal.performance.my_domain.com:[10.41.102.7 10.41.102.7]], final=map[10.41.101.114:[etcd-a-1.internal.performance.my_domain.com etcd-a-1.internal.performance.my_domain.com] 10.41.101.173:[etcd-a-0.internal.performance.my_domain.com etcd-a-0.internal.performance.my_domain.com] 10.41.102.7:[etcd-b-2.internal.performance.my_domain.com etcd-b-2.internal.performance.my_domain.com]]
I0127 12:25:40.085918 2477 hosts.go:181] skipping update of unchanged /etc/hosts
I0127 12:25:41.519402 2477 controller.go:173] starting controller iteration
I0127 12:25:41.519448 2477 controller.go:198] we are not leader
I0127 12:25:51.520663 2477 controller.go:173] starting controller iteration
I0127 12:25:51.520840 2477 controller.go:198] we are not leader
I0127 12:26:01.522046 2477 controller.go:173] starting controller iteration
I0127 12:26:01.522091 2477 controller.go:198] we are not leader
解决方案
推荐阅读
- macos - 如何在 MacOS 和/或 UWP 的 Xamarin.Forms 按钮上实现悬停事件?
- python - IntelliJ/PyCharm 只为同一文件中的定义提供智能感知建议
- javascript - 网页上不同 div/span 的不同选择颜色
- javascript - 我不能使用 Node.JS 调用在另一个函数中创建的函数
- reactjs - 如何等待来自嵌套请求的 React 评估值?
- asp.net-core - 只有在 AspNetUsers 上的“EmailConfirmed”字段为真(NETCORE 3.1)时,具有有效凭据的用户才能登录
- django - Django Rest Framework 中的自定义字段验证
- python - tolist的numpy数组非常慢
- php - CakePHP 4 JSON 列值查找或设置别名
- react-native - 在 React Native 应用程序中使用的 SignalR npm 包