跨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
外网ip
hostname
区域

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