如何在AWS上设置Kubernetes Master HA

时间:2015-12-18 10:35:35

标签: amazon-web-services kubernetes high-availability

我想做什么:

我使用Kubernetes网站上提供的文档设置了kubernete集群(http_kubernetes.io/v1.1/docs/getting-started-guides/aws.html)。使用kube-up.sh,我能够将kubernete群集带上1个主人和3个爪子(如下图中的蓝色矩形所示)。据我所知,从文档中我们可以根据需要添加minions,所以从我的观点来看,k8s master实例在高可用性方面是单点故障。

Kubernetes Master HA on AWS

所以我试图用三个主节点设置HA k8s主层,如图所示。为了实现这一点,我遵循kubernetes高可用性集群指南,http_kubernetes.io/v1.1/docs/admin/high-availability.html#establishing-a-redundant-reliable-data-storage-layer 我做了什么:

使用kube-up.sh和provider aws(master1和minion1,minion2和minion3)设置k8s集群 设置两个新的主实例(master2和master3) 然后我开始通过以下提到的链接在master1,master 2和master 3上配置etcd cluster: http_kubernetes.io/v1.1/docs/admin/high-availability.html#establishing-a-redundant-reliable-data-storage-layer     所以简而言之,我已经从kubernetes网站(http_kubernetes.io/v1.1/docs/admin/high-availability/etcd.yaml)复制了etcd.yaml,并在所有三个节点上更新了Node_IP,Node_Name和Discovery Token,如下所示。

  

NODE_NAME NODE_IP DISCOVERY_TOKEN

     

Master1   172.20.3.150 https_discovery.etcd.io/5d84f4e97f6e47b07bf81be243805bed

     

Master2   172.20.3.200 https_discovery.etcd.io/5d84f4e97f6e47b07bf81be243805bed

     

为主设备   172.20.3.250 https_discovery.etcd.io/5d84f4e97f6e47b07bf81be243805bed

在所有三个节点上运行etcdctl成员列表时,我得到了:

$ docker exec <container-id> etcdctl member list
ce2a822cea30bfca: name=default peerURLs=http_localhost:2380,http_localhost:7001 clientURLs=http_127.0.0.1:4001

根据我们需要在/ etc / kubernete / manifest中保存etcd.yaml的文档,此目录已包含etcd.manifest和etcd-event.manifest文件。为了测试我用etcd参数修改了etcd.manifest文件。

进行上述更改后,我强行终止了docker容器,几秒钟后容器就存在了,并且在运行kubectl get节点时遇到了下面提到的错误: 错误:无法从服务器读取版本:获取httplocalhost:8080 / api:拨打tcp 127.0.0.1:8080:连接被拒绝

所以请建议如何在AWS上设置k8s master高可用性设置。

3 个答案:

答案 0 :(得分:1)

要配置HA主服务器,您应该遵循High Availability Kubernetes Cluster文档,特别是确保跨越故障域的复制存储以及复制的apiservers前面的负载均衡器。

答案 1 :(得分:1)

为kubernetes设置HA控制器并非易事,我不能在此提供所有细节,但我将概述对我来说成功的原因。

  1. 使用kube-aws设置单控制器群集:https://coreos.com/kubernetes/docs/latest/kubernetes-on-aws.html。这将创建可用作起点的CloudFormation堆栈模板和云配置模板。
  2. 转到AWS CloudFormation管理控制台,单击“模板”选项卡并复制完整的堆栈配置。或者,使用$ kube-aws up --export生成云形式堆栈文件。
  3. 使用kube-aws生成的userdata cloud-config模板,并将变量替换为实际值。本指南将帮助您确定这些值应该是什么:https://coreos.com/kubernetes/docs/latest/getting-started.html。在我的情况下,我最终得到了四个云配置:
    • 云配置控制器-0
    • 云配置控制器-1
    • 云配置控制器-2
    • 云配置工
  4. 在此处验证您的新云配置:https://coreos.com/validate/
  5. 将您的云配置插入CloudFormation堆栈配置。首先压缩并编码您的云配置:

    $ gzip -k cloud-config-controller-0
    $ cat cloud-config-controller-0.gz | base64 > cloud-config-controller-0.enc
    

    现在将内容复制到您的编码cloud-config到CloudFormation配置中。查找适当InstanceController的UserData键。 (我为其他控制器添加了额外的InstanceController对象。)

  6. 使用新创建的CloudFormation配置在AWS CloudFormation Management Console上更新堆栈。

  7. 您还需要生成TLS分配:https://coreos.com/kubernetes/docs/latest/openssl.html。这些资产必须进行压缩和编码(与上面相同的gzip和base64),然后插入到用户数据云配置中。

    在服务器上调试时,journalctl是你的朋友:

    $ journalctl -u oem-cloudinit  # to debug problems with your cloud-config
    $ journalctl -u etcd2
    $ journalctl -u kubelet
    

    希望有所帮助。

答案 2 :(得分:1)

还有kops项目

从项目自述文件:

  

以Kubernetes方式运营HA Kubernetes

也:

  

我们希望将其视为群集的kubectl

下载the latest release,例如:

cd ~/opt
wget https://github.com/kubernetes/kops/releases/download/v1.4.1/kops-linux-amd64
mv kops-linux-amd64 kops
chmod +x kops
ln -s ~/opt/kops ~/bin/kops

请参阅kops usage,尤其是:

假设您已经有s3://my-kops个存储区和kops.example.com托管区域。

创建配置:

kops create cluster --state=s3://my-kops --cloud=aws \
    --name=kops.example.com \
    --dns-zone=kops.example.com \
    --ssh-public-key=~/.ssh/my_rsa.pub \
    --master-size=t2.medium \
    --master-zones=eu-west-1a,eu-west-1b,eu-west-1c \
    --network-cidr=10.0.0.0/22 \
    --node-count=3 \
    --node-size=t2.micro \
    --zones=eu-west-1a,eu-west-1b,eu-west-1c

编辑配置:

kops edit cluster --state=s3://my-kops

导出terraform脚本:

kops update cluster --state=s3://my-kops --name=kops.example.com --target=terraform

直接应用更改:

kops update cluster --state=s3://my-kops --name=kops.example.com --yes

列表群集:

kops get cluster --state s3://my-kops

删除群集:

kops delete cluster --state s3://my-kops --name=kops.identityservice.co.uk --yes