二、高可用集群部署
1. CA证书(任意节点)
1.1 安装cfssl
cfssl是非常好用的CA工具,我们用它来生成证书和秘钥文件 安装过程比较简单,如下:
# 下载 $ mkdir -p ~/bin $ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O ~/bin/cfssl $ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O ~/bin/cfssljson # 修改为可执行权限 $ chmod +x ~/bin/cfssl ~/bin/cfssljson # 设置PATH $ vi ~/.bash_profile $ source ~/.bash_profile # 验证 $ cfssl version
1.2 生成根证书
根证书是集群所有节点共享的,只需要创建一个 CA 证书,后续创建的所有证书都由它签名。
# 生成证书和私钥 $ cd target/pki $ cfssl gencert -initca ca-csr.json | cfssljson -bare ca # 生成完成后会有以下文件(我们最终想要的就是ca-key.pem和ca.pem,一个秘钥,一个证书) $ ls ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem # 创建目录 $ ssh <user>@<node-ip> "mkdir -p /etc/kubernetes/pki/" # 分发到每个主节点 $ scp ca*.pem <user>@<node-ip>:/etc/kubernetes/pki/
2. 部署etcd集群(master节点)
2.1 下载etcd
如果你是从网盘下载的二进制可以跳过这一步(网盘中已经包含了etcd,不需要另外下载)。 没有从网盘下载bin文件的话需要自己下载etcd
$ wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz
2.2 生成证书和私钥
# 生成证书、私钥 $ cd target/pki/etcd $ cfssl gencert -ca=../ca.pem \ -ca-key=../ca-key.pem \ -config=../ca-config.json \ -profile=kubernetes etcd-csr.json | cfssljson -bare etcd # 分发到每个etcd节点 $ scp etcd*.pem <user>@<node-ip>:/etc/kubernetes/pki/
2.3 创建service文件
# scp配置文件到每个master节点 $ scp target/<node-ip>/services/etcd.service <node-ip>:/etc/systemd/system/ # 创建数据和工作目录 $ ssh <user>@<node-ip> "mkdir -p /var/lib/etcd"
2.4 启动服务
etcd 进程首次启动时会等待其它节点的 etcd 加入集群,命令 systemctl start etcd 会卡住一段时间,为正常现象。
#启动服务 $ systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd #查看状态 $ service etcd status #查看启动日志 $ journalctl -f -u etcd
3. 部署api-server(master节点)
3.1 生成证书和私钥
# 生成证书、私钥 $ cd target/pki/apiserver $ cfssl gencert -ca=../ca.pem \ -ca-key=../ca-key.pem \ -config=../ca-config.json \ -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes # 分发到每个master节点 $ scp kubernetes*.pem <user>@<node-ip>:/etc/kubernetes/pki/
3.2 创建service文件
# scp配置文件到每个master节点 $ scp target/<node-ip>/services/kube-apiserver.service <user>@<node-ip>:/etc/systemd/system/ # 创建日志目录 $ ssh <user>@<node-ip> "mkdir -p /var/log/kubernetes"
3.3 启动服务
#启动服务 $ systemctl daemon-reload && systemctl enable kube-apiserver && systemctl restart kube-apiserver #查看运行状态 $ service kube-apiserver status #查看日志 $ journal