安装高可用集群(手动分发证书)
一、主机准备
准备三台主机,和一个VIP
master1:192.168.2.104
master2:192.168.2.105
master3:192.168.2.106
vip:192.168.2.110
在每台主机的/etc/hosts
中添加记录
二、安装docker、kubeadm、kubelet、keepalived
略
三、安装Master
3.1 下载镜像
下载镜像到各master节点,参考《安装单Master集群》
3.2 安装Master1
执行以下命令,安装Master,安装成功后会有类似如下输出
然后设置kubectl
与安装Calico,参考《安装单Master集群》。
3.3 分发证书文件
在其他两个Master节点上,创建目录/etc/kubernetes/pki
与/etc/kubernetes/pki/etcd
,然后把Master1上的以下证书文件拷贝到其余Master相同的目录下:
3.4 安装其他master
根据上面的输出,可以执行下面的命令安装其他的master
安装成功后, 查看节点的状态,发现新节点添加成功
四、安装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
???
etc/ca.key与/etc/ca.crt
参考 《启动参数解析》 之 《ETCD相关参数》
Last updated
Was this helpful?