跨VPC网络-工具安装
选择官方推荐的版本组合,尽量避免一些已被报告的问题,让搭建工作轻松些。
红帽已决定 2024 年终止 CentOS 项目的更新和发布。受此影响,很多企业和开发者转向 Ubuntu/Debian。此处我们选择最新的 Ubuntu 长期稳定版。
k8s v1.24 起放弃了 docker 作为默认的容器运行时,故我们选择最主流的运行时 containerd。
runc 和 CNI Plugins 是 containerd 的核心组件。
1. 服务器列表
我们用下面三台不同 VPC 网络的服务器来演示搭建k8s集群。
注意私网IP,不要使用同一个网段,防止冲突
2. kubeadm 集群工具安装(版本号1.24)
2.1 节点之中不能有重复的主机名、MAC 地址或 product_uuid。
# 查询MAC地址,
sudo cat /sys/class/net/eth0/address
sudo cat /sys/class/dmi/id/product_uuid
2.2 允许 iptables 检查桥接流量
# 确保br_netfilter和overlay模块被加载
lsmod | grep 'br_netfilter\|overlay'
# 如果没加载,显式加载这两个模块
sudo modprobe br_netfilter; sudo modprobe overlay
# 让 Linux 节点上的 iptables 能够正确地查看桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
overlay
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
2.3 在各个服务器开启必需端口
2.4 然后用 netcat 工具检查端口是否启用(以 6443 为例)
# 服务器端(假设服务器ip 172.19.200.6)开启nc监听6443端口
nc -lnv 6443
# 客户端测试服务器端的6443端口是否可访问
nc -vz -w 2 172.19.200.6 6443
修改 hosts 文件
cat << EOF >> /etc/hosts
172.19.200.6 master
43.129.25.161 master
172.22.0.10 node1
43.134.80.11 node1
172.26.0.9 node2
43.135.160.117 node2
EOF
2.5 禁用交换分区
swap这一项全部为 0B,就是禁用状态, 服务器开通时候默认是禁用状态
root@VM-200-6-ubuntu:~# free -m
total used free shared buff/cache available
Mem: 3400 213 2676 2 510 2960
Swap: 0 0 0
2.6 安装容器
k8s 支持以下三种容器运行时
unix:///var/run/containerd/containerd.sock
unix:///var/run/crio/crio.sock
Docker Engine (使用 cri-dockerd)
unix:///var/run/cri-dockerd.sock
此处安装 containerd,推荐官方二进制文件下载安装的方式
# 下载安装包
cd /usr/local/src
wget https://github.com/containerd/containerd/releases/download/v1.6.6/containerd-1.6.6-linux-amd64.tar.gz
tar xzvf containerd-1.6.6-linux-amd64.tar.gz -C /usr/local
mkdir -p /usr/local/lib/systemd/system/
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/local/lib/systemd/system/containerd.service
systemctl daemon-reload
systemctl enable --now containerd
2.7 安装 runc
wget https://github.com/opencontainers/runc/releases/download/v1.1.2/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc
2.8 安装 CNI 插件
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
mkdir -p /opt/cni/bin
tar xzvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin
2.9 安装 kubeadm、kubelet 和 kubectl
在每台服务器上安装以下的软件包:
kubelet:在集群中的每个节点上用来启动 Pod 和容器等
# 1. 添加源,并添加 Kubernetes apt 仓库
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 2. 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo apt-get install -y kubelet=1.24.4-00 kubeadm=1.24.4-00 kubectl=1.24.4-00
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl status kubelet # kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。
2.10 配置 cgroup 驱动程序
# 二进制包安装方式(本文的方式)没有生成配置文件,需要手动生成
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改 config.toml,启用 Systemd Cgroup。
sed -i "s/ SystemdCgroup = false/ SystemdCgroup = true/g" /etc/containerd/config.toml
# 然后重启 containerd。
sudo systemctl restart containerd
sudo systemctl status containerd
在部署环节- k8s集群初始化将配置 kubelet cgroup 驱动,所以此处无需配置。
至此,k8s 的集群工具安装完成,
准备进入下一节:部署 ETCD
存储, 最好 etcd 集群是单独的机器