前言
本页的高可用是控制平面组件的高可用部署,同时还分为2种情况:堆叠etcd和外部etcd。使用kubeadm部署多master节点很方便,大体是3个步骤:使用init参数初始化好第一个master节点,然后其余的master节点使用join命令加入到master集群中,形成一个高可用的master集群。
准备工作
准备多台服务器,并且所有机器都安装了kubeadm、kubelet、containerd、kubectl。在本文档中,是部署3台服务器作为master,其余服务器作为Node节点。
在两台服务器上部署Nginx+keepalived
nginx的主要作用是做为Apiserver的请求分发器,即分发到3台Apiserver中的某一台,但是两台nginx服务器是运行在热备状态,还不是负载均衡。
堆叠etcd的方式部署K8S集群
- 使用kubeadm init初始化集群,只不过多了一个--control-plane-endpoint参数
kubeadm init --control-plane-endpoint "192.168.259.6:6443" --upload-certs \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
- 在其它master服务器上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c \
--control-plane --certificate-key 7943d4193e096d7e91d864c9d42a0cd05239b4840242285aa47074f094cff735
- 在Node节点上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c
外部etcd的方式部署K8S集群
- 使用kubeadm创建一个etcd集群
https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/
- 将etcd的证书文件复制到第一个master机器上
export CONTROL_PLANE="lemon@192.168.259.6"
scp /etc/kubernetes/pki/etcd/ca.crt "${CONTROL_PLANE}":/k8s/tls/
scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${CONTROL_PLANE}":/k8s/tls/
scp /etc/kubernetes/pki/apiserver-etcd-client.key "${CONTROL_PLANE}":/k8s/tls/
- 在第一个master机器上新建一个kubeadm-config.yaml文件
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "192.168.259.6:6443" # change this (see below)
etcd:
external:
endpoints:
- https://ETCD_0_IP:2379 # 适当地更改 ETCD_0_IP
- https://ETCD_1_IP:2379 # 适当地更改 ETCD_1_IP
- https://ETCD_2_IP:2379 # 适当地更改 ETCD_2_IP
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt
keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
- 初始化第一个master机器
kubeadm init \
--apiserver-advertise-address=0.0.0.0 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--config kubeadm-config.yaml --upload-certs
- 在其它master服务器上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c \
--control-plane --certificate-key 7943d4193e096d7e91d864c9d42a0cd05239b4840242285aa47074f094cff73
- 在Node节点上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c