搭建K8S高可用集群
# 搭建k8s高可用集群
# 前言
前面在国内环境 ubuntu18 安装 k8s这篇文章中,我们搭建了简单的单master的k8s集群,但是在生产环境中,单节点是无法满足高可用的需求的。本篇文章将指导搭建一个3master、3worker的高可用k8s集群。
# 准备工作
7台机器
IP | ROTE | Hostname |
---|---|---|
10.0.0.180 | 负载均衡器 | k8slb |
10.0.0.181 | master | master001 |
10.0.0.182 | master | master002 |
10.0.0.183 | master | master003 |
10.0.0.185 | worker | worker001 |
10.0.0.186 | worker | worker002 |
10.0.0.187 | worker | worker003 |
这里除了k8s的node之外,还需要准备一个负载均衡器,我这里直接单开一台机器来安装负载均衡器,如果你是云上环境,可以直接用云服务商提供的负载均衡能力。
所有机器都安装好docker、设置好hostname。除了负载均衡器所在机器外,其他机器全部安装好kubeadm、kubelet、kubectl 并准备好启动k8s时所需的镜像。如有疑问可以参考国内环境 ubuntu18 安装 k8s。
# 准备负载均衡器
这里的负载均衡器是用来对k8s的 apiserver进行负载均衡的,官方没有限制负载均衡的软件,我这里用的是haproxy。 你可以进一步的搭建出haproxy + keepalive 的高可用负载均衡。
# cat /data/haproxy/haproxy.cfg
global
daemon
nbproc 1
chroot /usr/local/etc/haproxy
defaults
mode tcp
retries 2
option redispatch
maxconn 4096
timeout connect 5000ms
timeout client 30000ms
timeout server 30000ms
log 127.0.0.1 local0 err
listen apiserver
bind 0.0.0.0:6443
mode tcp
server master001 10.0.0.181:6443 check
server master002 10.0.0.182:6443 check
server master003 10.0.0.183:6443 check
# 启动haproxy容器
docker run -d \
--name haproxy \
--restart=always \
-p 6443:6443 \
-v /data/haproxy:/usr/local/etc/haproxy:ro \
haproxy:2.2.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 启动
kubeadm init --control-plane-endpoint 10.0.0.180:6443 --upload-certs
1
初始化完成后终端上会打印出相应的join命令
# 加入成为master
kubeadm join 10.0.0.180:6443 --token xxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxx \
--control-plane --certificate-key xxxxxxx
# 加入成为worker
kubeadm join 10.0.0.180:6443 --token xxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxx
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
可见加入成为master相较加入成为worker 只是多了一个 certificate-key 的参数。
在其他的node上使用root权限执行命令即可加入。
最后的效果:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master001 Ready master 82m v1.19.1
master002 Ready master 78m v1.19.1
master003 Ready master 25m v1.19.1
worker001 Ready <none> 16m v1.19.1
worker002 Ready <none> 16m v1.19.1
worker003 Ready <none> 2m22s v1.19.1
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 补充
如果忘记了join的命令,可以用以下方式重新生成:
# 生成加入成为worker的命令
kubeadm token create --print-join-command --ttl 0
# 生成加入成为master的 certificate-key 值
kubeadm init phase upload-certs --upload-certs
1
2
3
4
5
2
3
4
5
# 参考链接
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/high-availability/
上次更新: 2020/09/13, 14:09:00