💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## **一、主机准备** 准备三台主机,和一个VIP * master1:192.168.2.104 * master2:192.168.2.105 * master3:192.168.2.106 * vip:192.168.2.110 在每台主机的`/etc/hosts`中添加记录 ``` 192.168.2.110 apiserver.dcos.com ``` ## **二、安装docker、kubeadm、kubelet、keepalived** 略 ## **三、安装Master** ### **3.1 下载镜像** 下载镜像到各master节点,参考《安装单Master集群》 ### **3.2 安装Master1** 执行以下命令,安装Master,安装成功后会有类似如下输出 ``` $ kubeadm init --control-plane-endpoint apiserver.dcos.com:6443 --pod-network-cidr 172.26.0.0/16 --kubernetes-version 1.17.0​...You can now join any number of control-plane nodes by copying certificate authoritiesand service account keys on each node and then running the following as root:​ kubeadm join apiserver.dcos.com:6443 --token hcqgtn.l3915wh83gxktkl0 \ --discovery-token-ca-cert-hash sha256:0acd092192699c3743ba1af4e6f24aa9bffcde265f3f60cee172a9fea0889376 \ --control-plane ​Then you can join any number of worker nodes by running the following on each as root:​kubeadm join apiserver.dcos.com:6443 --token hcqgtn.l3915wh83gxktkl0 \ --discovery-token-ca-cert-hash sha256:0acd092192699c3743ba1af4e6f24aa9bffcde265f3f60cee172a9fea0889376 ``` 然后设置`kubectl`与安装Calico,参考《安装单Master集群》。 ### **3.3 分发证书文件** 在其他两个Master节点上,创建目录`/etc/kubernetes/pki`与`/etc/kubernetes/pki/etcd`,然后把Master1上的以下证书文件拷贝到其余Master相同的目录下: ``` /etc/kubernetes/pki/ca.key/etc/kubernetes/pki/ca.crt/etc/kubernetes/pki/sa.key/etc/kubernetes/pki/sa.pub/etc/kubernetes/pki/front-proxy-ca.key/etc/kubernetes/pki/front-proxy-ca.crt/etc/kubernetes/pki/etcd/ca.key/etc/kubernetes/pki/etcd/ca.crt ``` ### **3.4 安装其他master** 根据上面的输出,可以执行下面的命令安装其他的master ``` $ kubeadm join apiserver.dcos.com:6443 --token hcqgtn.l3915wh83gxktkl0 --discovery-token-ca-cert-hash sha256:0acd092192699c3743ba1af4e6f24aa9bffcde265f3f60cee172a9fea0889376 --control-plane ``` 安装成功后, 查看节点的状态,发现新节点添加成功 ``` kubectl get nodeNAME STATUS ROLES AGE VERSIONpeng04 Ready master 17h v1.17.0peng05 Ready master 35s v1.17.0 ``` ## **四、安装Node** 略 ## **附录** 在该文中,每个Master节点的上面八个文件必须一致 ### **ca.key与ca.crt** ca.key与ca.crt是指`/etc/kubernetes/pki/ca.key`与`/etc/kubernetes/pki/ca.crt`。 ca.crt出现在apiserver的启动参数中`--client-ca-file=/etc/kubernetes/pki/ca.crt`,它的作用就是apiserver用来认证客户端证书,原理具体见《认证》。 首先,为什么每个master节点的ca.key与ca.crt为什么需要一致? 因为,我们要的效果是,当有多个Master时,客户端携带一个客户证书访问其中任何一个都是可以的。而如果三个Master上的ca.key与ca.crt不一致,那么客户端的证书应该由哪个CA签署呢?所以,三个节点的必须一致。 第二,apiserver的启动参数没有用到ca.key,为什么还要从第一台master同步到其他master呢? 因为,每个Master上都会生成一个`/etc/kubernetes/admin.conf`文件,里面的内容其实就是一个客户证书,由ca.key和ca.crt签署的,所以还需要ca.key。 ### **sa.key与sa.pub** sa.key出现在kube-controller-manager的启动参数`--service-account-private-key-file=/etc/kubernetes/pki/sa.key`,sa.pub出现在kube-apiserver的启动参数`--service-account-key-file=/etc/kubernetes/pki/sa.pub`,这两个参数的原理见《ServiceAccount》 与上面的原因类似。 其实,启动参数的内容,由于没有存储在etcd中,所以每个节点都必须要指定,且一致。 ### **front-proxy-ca.key与front-proxy-ca.crt** ??? ### **etcd/ca.key与/etc/ca.crt** 参考 《启动参数解析》 之 《ETCD相关参数》