上一篇文章整体讲了这个集群环境系列的主要目标。
那么从本篇开始,就逐一进行集群环境的搭建。
一、环境准备
上一篇文章我们提到了,我们会将k8s集群搭建在具备32G内存的Xeon E3 1240L v3上。
我们在系统上安装虚拟机。
在本集群中,总共采用3个控制节点+4个工作节点,即总共需要搭建7个虚拟机。
其中
- 控制节点配置:2核+2G内存+200G盘,名称为k8smaster01,k8smaster02,k8smaster03
- 工作节点配置:4核+4G内存+2000G盘,名称为k8snode01,k8snode02,k8snode03,k8snode04
网络部分
- 采用bridge方式将节点放在同一个网段内:underlay: 192.168.3.0/24 pod:172.21.0.0/16 service:172.22.0.0/16
- 每台机器仅有一张网卡连接到bridge。由于bridge不能直接访问,每个节点不能直接控制、同时也不能访问外网。因此搭建两台额外的机器,一台为虚拟路由器,采用pfsense,另一台为跳板机,采用bastillion,用于登录到各个节点。如下的教程中不会涉及这两台机器的搭建,但原理为各分配两张网卡给这两台机器,一个用于外网,一个用于bridge交换机。
- 这里同时配置一下pfsense上的dns服务,将集群的节点名称加到静态dns中
- 域:cluster
- k8smaster01.cluster:192.168.3.11
- k8smaster02.cluster:192.168.3.12
- k8smaster03.cluster:192.168.3.13
- k8snode01.cluster:192.168.3.21
- k8snode02.cluster:192.168.3.22
- k8snode03.cluster:192.168.3.23
- k8snode04.cluster:192.168.3.24
- mws-cluster001.cluster:192.168.3.11
- 最后一个为集群名称
二、系统安装配置
对于操作系统方面,这里选择最新出的debian 12版本进行安装。
从debian官网下载netinst的镜像文件,配置到已经创建好的虚拟机中,进行开机安装,同时配置好机器的ip地址、机器名字。注意,安装的时候并未配置任何网络信息,一方面是后面会单独配置,另一方面进行最小化安装,避免安装不需要的软件包。
这里简单说一下步骤
第一步,刚进入系统,安装必要的软件:apt install ssh-server resolvconf
第二步,启用root登陆ssh。编辑打开nano /etc/ssh/sshd-config。修改PermitRootLogin为yes。
第三步,修改网卡配置。首先查看网卡ip addr。可以看到这里的网卡为ens3。然后打开nano /etc/network/interface进行添加。这里的ip地址等信息根据不同的机器进行对应的修改。
auto ens3
iface ens3 inet static
address 192.168.3.11
netmask 255.255.255.0
gateway 192.168.3.1
dns-nameservers 192.168.3.1
dns-search cluster
第四步,修改/etc/apt/sources.list,注释掉cdrom,同时增加apt源,如:
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
接下来就是其他设置
- 关闭防火墙:iptables -nL。默认无规则,无需执行。
- 关闭selinux:默认没有安装,无需执行。
- NTP时间同步配置:默认已经安装了systemd-timesyncd,无需特殊配置
ipset/ipvs安装与加载。ipvs用于网络流量转发和负载均衡等,是iptables的替代。
apt update
apt install -y ipset ipvsadm
如果没有加载nf_conntrack或者ip_vs内核模块,则可以增加内核模块加载
cat <<EOF >/etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
安装完成之后关闭swap
关闭swap
swapoff -a
nano /etc/fstab
注释掉swap
加载内核模块以及内核参数
cat <<EOF >/etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFcat <<EOF >/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
#vm.swappiness=0
EOF
三、安装containerd
1.设置containerd的apt repo
apt update
apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
2.安装containerd
apt-get update
apt install containerd.io
3.配置containerd所使用的cgroup驱动(注意:此项必须,否则无法正常工作)
containerd config default > /etc/containerd/config.toml
查找/etc/containerd/config.toml中
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]这一项下面的
SystemdCgroup选项,将其改为true
4.修改containerd的镜像源。修改存储路径。//TODO
5.重启containerd,生效配置
systemctl restart containerd
四、安装k8s相关工具
安装k8s相关工具需要能够访问google等的源。由于网络问题,需要先做一些配置,绕过网络问题:
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/kubernetes.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet=1.27.3* kubeadm=1.27.3* kubectl=1.27.3*
五、总结
到此为止,初始化k8s集群前的准备工作就已经完成了。
接下来,就是初始化k8s的相关流程。