利用kubeadm创建高可用集群

发布时间 2023-10-23 20:45:21作者: 百稳开源

前言

本页的高可用是控制平面组件的高可用部署,同时还分为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集群

  1. 使用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
  1. 在其它master服务器上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
	--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c \
	--control-plane --certificate-key 7943d4193e096d7e91d864c9d42a0cd05239b4840242285aa47074f094cff735
  1. 在Node节点上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
	--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c

外部etcd的方式部署K8S集群

  1. 使用kubeadm创建一个etcd集群
https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/
  1. 将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/
  1. 在第一个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
  1. 初始化第一个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
  1. 在其它master服务器上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
	--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c \
	--control-plane --certificate-key 7943d4193e096d7e91d864c9d42a0cd05239b4840242285aa47074f094cff73
  1. 在Node节点上执行join命令
kubeadm join 192.168.259.6:6443 --token k80h24.h278dr5k5yd96ju2 \
	--discovery-token-ca-cert-hash sha256:6e963164a2eb87cbc6402d7666a4bf5e333471318ba0cb9bae728b20ce84234c