我在AWS EC2实例上部署了带有 kops 的开发K8S集群,最初将其部署为具有3个主节点和3个节点的HA体系结构。
现在为了节省成本,我想关闭3个主机中的2个,只保留1个运行中
我尝试了kubectl drain
,但效果不佳,只是终止节点导致集群连接不稳定。
有没有安全的方法来删除主人?
最佳答案
这个问题已经在Github question - HA to single master migration上讨论过了。
已经为您准备了solution。
由于etcd-manager在kops 1.12中引入,因此main
和events
etcd群集自动且定期地备份到S3(与KOPS_STATE_STORE
相同的存储桶)。
因此,如果您的k8s集群版本高于1.12,则可能需要执行以下步骤:
$ kops edit cluster
在
etcdCluster
部分中,删除etcdMembers
项,以便仅为instanceGroup
和main
保留一个events
。例如 etcdClusters:
- etcdMembers:
- instanceGroup: master-ap-southeast-1a
name: a
name: main
- etcdMembers:
- instanceGroup: master-ap-southeast-1a
name: a
name: events
$ kops update cluster --yes
$ kops rolling-update cluster --yes
$ kops delete ig master-xxxxxx-1b
$ kops delete ig master-xxxxxx-1c
此操作无法撤消,它将立即删除2个主节点。
现在,您的3个主节点中的2个被删除,k8s etcd服务可能会失败,并且kube-api服务将无法访问。在此步骤之后,您的
kops
和kubectl
命令不再正常是正常的。这是棘手的部分。 ssh进入剩余的主节点,然后
$ sudo systemctl stop protokube
$ sudo systemctl stop kubelet
下载
etcd-manager-ctl
工具。如果使用其他etcd-manager
版本,请相应调整下载链接$ wget https://github.com/kopeio/etcd-manager/releases/download/3.0.20190930/etcd-manager-ctl-linux-amd64
$ mv etcd-manager-ctl-linux-amd64 etcd-manager-ctl
$ chmod +x etcd-manager-ctl
$ mv etcd-manager-ctl /usr/local/bin/
从S3恢复备份。见official docs
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/main list-backups
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/main restore-backup 2019-10-16T09:42:37Z-000001
# do the same for events
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/events list-backups
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/events restore-backup 2019-10-16T09:42:37Z-000001
这不会立即开始还原;您需要重新启动etcd:杀死相关容器并启动kubelet
$ sudo systemctl start kubelet
$ sudo systemctl start protokube
等待还原完成,然后
kubectl get nodes
和kops validate cluster
应该正常工作。否则,您可以终止AWS控制台中其余主节点的EC2实例,Auto Scaling Groups将创建一个新的主节点,并还原etcd集群。
关于amazon-web-services - 从Kubernetes HA群集安全删除主服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59876200/