从Kubernetes HA群集安全删除主服务器

问题描述 投票:1回答:1

我在AWS EC2实例上以kops部署了一个开发K8S集群,我最初将其部署为具有3个主节点和3个节点的HA体系结构。

现在为了节省成本,我想关闭3个主机中的2个,仅保留1个运行中

我尝试使用kubectl drain,但是它无效,只是终止节点导致群集连接不稳定。

是否有安全的方法来删除母版?

amazon-web-services kubernetes kubectl master kops
1个回答
0
投票

此问题已经在Github question - HA to single master migration上进行了讨论。

已经为您准备好solution

由于在kops 1.12中引入了etcd-manager,并且mainevents etcd群集自动且定期地备份到S3(与KOPS_STATE_STORE相同的存储桶)。

因此,如果您的k8s集群版本高于1.12,则可能需要执行以下步骤:

  1. 删除集群中的etcd区域
$ kops edit cluster

etcdCluster部分中,删除etcdMembers项目,以便仅保留instanceGroupmain的一个events。例如

  etcdClusters:
  - etcdMembers:
    - instanceGroup: master-ap-southeast-1a
      name: a
    name: main
  - etcdMembers:
    - instanceGroup: master-ap-southeast-1a
      name: a
    name: events

  1. 应用更改
$ kops update cluster --yes
$ kops rolling-update cluster --yes

  1. 删除2个主实例组
$ kops delete ig master-xxxxxx-1b
$ kops delete ig master-xxxxxx-1c

此操作无法撤消,它将立即删除2个主节点。

现在您的3个主节点中的2个被删除,k8s etcd服务可能会失败,并且kube-api服务将无法访问。在此步骤之后,kopskubectl命令不再起作用是正常的。

  1. 使用单个主节点重新启动ectd群集这是棘手的部分。 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 nodeskops validate cluster应该正常工作。否则,您可以终止AWS控制台中其余主节点的EC2实例,Auto Scaling Groups将创建一个新的主节点,并还原etcd群集。

© www.soinside.com 2019 - 2024. All rights reserved.