跨VPC网络-工具安装

选择官方推荐的版本组合,尽量避免一些已被报告的问题,让搭建工作轻松些。

软件/系统版本发布日期

Ubuntu

22.04 LTS

2022-04-21

Kubernetes

1.24.4-00

2022-08-18

containerd

1.6.6

2022-06-07

runc

1.1.2

2022-05-12

CNI Plugins

1.1.1

2022-02-24

红帽已决定 2024 年终止 CentOS 项目的更新和发布。受此影响,很多企业和开发者转向 Ubuntu/Debian。此处我们选择最新的 Ubuntu 长期稳定版。

k8s v1.24 起放弃了 docker 作为默认的容器运行时,故我们选择最主流的运行时 containerd。

runc 和 CNI Plugins 是 containerd 的核心组件。

1. 服务器列表

我们用下面三台不同 VPC 网络的服务器来演示搭建k8s集群。

内网ip外网iphostname区域

172.19.200.6

43.129.25.161

master

香港

172.22.0.10

43.134.80.11

node1

新加坡

172.26.0.9

43.135.160.117

node2

美国

注意私网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 在各个服务器开启必需端口

协议方向端口范围作用

TCP

入站

6443

Kubernetes API server

TCP

入站

2379-2380

etcd server client API

TCP

入站

10250

Kubelet API

TCP

入站

10259

kube-scheduler

TCP

入站

10257

kube-controller-manager

TCP

入站

30000-32767

NodePort Services

UDP

入站

8472

Flannel vxlan

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 域套接字

containerd

unix:///var/run/containerd/containerd.sock

CRI-O

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

在每台服务器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令

  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等

  • kubectl:用来与集群通信的命令行工具

# 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 集群是单独的机器

Last updated