amazon-web-services - 从Kubernetes HA群集安全删除主服务器

标签 amazon-web-services kubernetes kubectl master kops

我在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中引入,因此mainevents etcd群集自动且定期地备份到S3(与KOPS_STATE_STORE相同的存储桶)。

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

  • 删除集群
  • 中的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
    
    
  • 应用更改
  • $ kops update cluster --yes
    $ kops rolling-update cluster --yes
    
    
  • 删除2个主实例组
  • $ kops delete ig master-xxxxxx-1b
    $ kops delete ig master-xxxxxx-1c
    
    

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

    现在,您的3个主节点中的2个被删除,k8s etcd服务可能会失败,并且kube-api服务将无法访问。在此步骤之后,您的kopskubectl命令不再正常是正常的。
  • 使用单个主节点重新启动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集群。

    关于amazon-web-services - 从Kubernetes HA群集安全删除主服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59876200/

    相关文章:

    kubernetes - 使用 Minikube kubectl 创建部署时的未知图像标志

    MySQL 主/从 - 自动服务器 ID

    configuration - 将环境属性与弹性 beantalk 配置文件中的文件一起使用

    docker - Kubernetes 中 Docker 容器内的互联网连接

    docker - 如何连接到 Kubernetes Pod 网络?

    kubernetes - 一个用于获取 secret 名称和 secret token 的 liner 命令

    amazon-web-services - AWS 上的 Kubernetes : Exposing multiple domain names (ingress vs ELB)

    amazon-web-services - 使用 ECS 和外部 Zookeeper 的 AWS 上的 NiFi 集群

    ssl - 等待从订单状态 "pending"发出证书

    kubernetes - 在 Kubernetes 1.3 Ingress 中使用通配符和非通配符 TLS 证书