高可用k8s集群搭建-1.31.1

k8s高可用集群搭建

参考官方文档:Kubernetes 文档支持的版本 | Kubernetes

注:本文章搭建的k8s集群版本为1.31.1,系统版本:CentOS 8 (stream)

一、概述

创建高可用集群有两种方法:

1、使用堆叠(stacked)控制平面节点,其中 etcd 节点与控制平面节点共存

2、使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

1.1 堆叠(Stacked)etcd 拓扑

堆叠(Stacked)HA 集群是一种这样的拓扑, 其中 etcd 分布式数据存储集群堆叠在 kubeadm 管理的控制平面节点上,作为控制平面的一个组件运行。

每个控制平面节点运行 kube-apiserverkube-schedulerkube-controller-manager 实例。 kube-apiserver 使用负载均衡器暴露给工作节点。

每个控制平面节点创建一个本地 etcd 成员(member),这个 etcd 成员只与该节点的 kube-apiserver 通信。 这同样适用于本地 kube-controller-managerkube-scheduler 实例。

这种拓扑将控制平面和 etcd 成员耦合在同一节点上。相对使用外部 etcd 集群, 设置起来更简单,而且更易于副本管理。

然而,堆叠集群存在耦合失败的风险。如果一个节点发生故障,则 etcd 成员和控制平面实例都将丢失, 并且冗余会受到影响。你可以通过添加更多控制平面节点来降低此风险。

因此,你应该为 HA 集群运行至少三个堆叠的控制平面节点。

这是 kubeadm 中的默认拓扑。当使用 kubeadm initkubeadm join --control-plane 时, 在控制平面节点上会自动创建本地 etcd 成员。

1.2 外部 etcd 拓扑

具有外部 etcd 的 HA 集群是一种这样的拓扑, 其中 etcd 分布式数据存储集群在独立于控制平面节点的其他节点上运行。

就像堆叠的 etcd 拓扑一样,外部 etcd 拓扑中的每个控制平面节点都会运行 kube-apiserverkube-schedulerkube-controller-manager 实例。 同样,kube-apiserver 使用负载均衡器暴露给工作节点。但是 etcd 成员在不同的主机上运行, 每个 etcd 主机与每个控制平面节点的 kube-apiserver 通信。

这种拓扑结构解耦了控制平面和 etcd 成员。因此它提供了一种 HA 设置, 其中失去控制平面实例或者 etcd 成员的影响较小,并且不会像堆叠的 HA 拓扑那样影响集群冗余。

但此拓扑需要两倍于堆叠 HA 拓扑的主机数量。 具有此拓扑的 HA 集群至少需要三个用于控制平面节点的主机和三个用于 etcd 节点的主机。

综上,第二种方法适合大规模集群,成本较高,所以我们选择使用Stacked来部署高可用集群,因为 etcd 和控制平面共享相同的节点,节约了硬件资源,适合中小型集群,安装和维护较为简单。

二、节点规划

三个主节点,三个从节点,保证master节点数>=3的奇数

角色 主机名 IP地址 CPU/内存
master k8s-master1 ens33: 10.45.25.100; ens37: 10.13.20.100 2G/2C
master k8s-master2 ens33: 10.45.25.101; ens37: 10.13.20.101 2G/2C
master k8s-master3 ens33: 10.45.25.102; ens37: 10.13.20.102 2G/2C
node k8s-node1 ens33: 10.45.25.103; ens37: 10.13.20.103 2G/2C
node k8s-node2 ens33: 10.45.25.104; ens37: 10.13.20.104 2G/2C
node k8s-node3 ens33: 10.45.25.105; ens37: 10.13.20.105 2G/2C
VIP master.k8s.io 10.45.25.200 /

主节点所需服务:keepalived、haproxy、containerd、kubectl、kubeadm、kubelet。

从节点所需服务:containerd、kubectl、kubeadm、kubelet

三、环境准备

3.1 配置hosts解析

每台主机都需要配置

# 修改主机名,以k8s-master1为例。
hostnamectl set-hostname k8s-master1
​
# 配置hosts解析,只以master1为例。
[root@k8s-master1 ~]# vim /etc/hosts
[root@k8s-master1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.45.25.100 k8s-master1
10.45.25.101 k8s-master2
10.45.25.102 k8s-master3
10.45.25.103 k8s-node1
10.45.25.104 k8s-node2
10.45.25.105 k8s-node3
10.45.25.200 master.k8s.io
[root@k8s-master1 ~]# 

3.2 关闭防火墙和selinux

每台主机都需要配置

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

3.3 关闭交换分区

每台主机都要配置

sudo swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

3.4 master免密登录

配置所有主节点之间的免密登录,只在主节点配置

[root@k8s-master1 ~]# ssh-keygen
[root@k8s-master1 ~]# ssh-copy-id 10.45.25.100
[root@k8s-master1 ~]# ssh-copy-id 10.45.25.101
[root@k8s-master1 ~]# ssh-copy-id 10.45.25.102
​
[root@k8s-master2 ~]# ssh-keygen
[root@k8s-master2 ~]# ssh-copy-id 10.45.25.100
[root@k8s-master2 ~]# ssh-copy-id 10.45.25.101
[root@k8s-master2 ~]# ssh-copy-id 10.45.25.102
​
[root@k8s-master3 ~]# ssh-keygen
[root@k8s-master3 ~]# ssh-copy-id 10.45.25.100
[root@k8s-master3 ~]# ssh-copy-id 10.45.25.101
[root@k8s-master3 ~]# ssh-copy-id 10.45.25.102

3.5 启用ipvs内核模块

所有节点都要启用,kube-proxy默认使用的是iptables,但ipvs性能更好

# 加载模块
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
# 验证
lsmod | grep -e ip_vs -e nf_conntrack
# 配置开机自启脚本
$ chmod +x /etc/rc.local
$ vim /etc/rc.local
$ tail -5 /etc/rc.local
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
$ yum -y install ipvsadm

3.6 安装容器运行时

所有节点都安装

参考官网:CentOS | Docker Docs

前提

# 开启IPv4 数据包转发
$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
$ sysctl --system

使用yum(dnf)安装

#安装前移除docker
$ yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值