文章目录
0, 前期准备工作
1, 新增master节点
在现有集群基础上添加master节点,保证多master节点共存,则需要增加新的master节点加入集群。
操作步骤:
1,寻找证书路径
切换到现有master节点,并访问证书所在路径。默认情况下路径为/etc/kubernetest/pki,若为自定义修改路径,请查询初始化文件中certificatesDir所配置的路径。或执行指令
[root@master01 ~]# kubectl -n kube-system get cm kubeadm-config -o yaml
apiVersion: v1
data:
ClusterConfiguration: |
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki # 此参数即为证书存储位置
...
2,拷贝证书到新master节点
新master节点需要现有master节点上部分证书才可以加入集群,新节点需要的证书有:
ca.crt
ca.key
sa.key
sa.pub
front-proxy-ca.crt
front-proxy-ca.key
etcd/*
可执行指令
cd /etc/kubernetes/pki
scp ca.* sa.* front-proxy-ca.* master02.server:/etc/kubernetes/pki/
scp etcd/ca.* master02.server:/etc/kubernetes/pki/etcd/
或者图省事,直接打包pki目录也行
tar -zcvf pki.tgz pki/
scp pki.tgz master02.server:/etc/kubernetes/
然后到新master节点上解压tgz文件,删除多余文件即可
3,使节点作为master节点加入集群
在新节点进行join操作之前,需要先确保以建立集群中是否配置了controlPlaneEndpoint参数,若未配置则会在join时发生”doesn’t have a stable controlPlaneEndpoint address“错误,解决方法请查看前期准备工作中的note记录。
在安装后获得集群join语句,在语句基础上增加–control-plane即可:
kubeadm join 10.xxx.xxx.xx:6443 --token 2f5xj2.o238zw5qjo381cb8 \
--discovery-token-ca-cert-hash sha256:5910e9d733939674293e617d6ffbdc98a6677fd4147ce43214c912cbcf4e8935 \
--control-plane
之后直接执行以下语句:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
即可查询集群状态
[root@master02 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01.server Ready master 2d19h v1.17.1
master02.server Ready master 2d17h v1.17.1
node01.server Ready <none> 2d17h v1.17.1
node02.server Ready <none> 2d17h v1.17.1
2,高可用集群建设
虽有多个master节点存在,但并不能保证集群高可用,因etcd、kube-apiserver、kube-proxy等还部署在单独的master节点本地。特别是etcd,若其中任何一个master节点崩溃,集群依然瞬间崩溃。
为保证高可用,最低限度必须保证etcd高可用。
1,etcd高可用
本实验为节省服务器资源,使用另一台机器搭建etcd的docker集群,以此充当外部etcd集群,正常情况下应该是多机器构建etcd集群。
若为多机器部署集群,只需自动略过docker相关操作指令即可
拉取镜像:
因之前在其他master节点运行时自动下载了etcd镜像,当然也可以自行下载etcd镜像,本次使用etcd版本为3.4.3-0,etcdctl版本为3.4.3。
1,拉取镜像:
拉取指令为:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
2,创建新容器网络
创建新容器网络的目的是为了能给etcd容器分配固定ip,保证分配的容器之间能访问
创建网络etcd-net:
docker network create --driver bridge --subnet=30.1.20.0/12 --gateway=30.1.1.1 etcd-net
预定部署etcd容器的ip分别为:
etcd01--->30.1.20.3
etcd02--->30.1.20.4
etcd03--->30.1.20.5
3,创建ca证书
创建文件:ca-config.json
{
"signing": {
"default": {
"expiry": "438000h"
},
"profiles": {
"server": {
"expiry": "438000h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
},
"client": {
"expiry": "438000h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "438000h",
"usages": [