利用kubeadm创建高可用集群
前言
本页的高可用是控制平面组件的高可用部署,同时还分为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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)