准备工作

(所有节点执行)

  • 三台ubuntu
    • master:192.168.11.100
    • node1:192.168.11.11
    • node2:192.168.11.22

设置主机名

(各自设置)

  1. master 节点
1
2
sudo hostnamectl set-hostname master
exec bash
  1. node1 节点
1
2
sudo hostnamectl set-hostname node1
exec bash
  1. node2 节点
1
2
sudo hostnamectl set-hostname node2
exec bash

添加 hosts 解析

(所有节点执行)

1
2
3
4
5
sudo tee -a /etc/hosts <<EOF
192.168.11.100 master
192.168.11.11 node1
192.168.11.22 node2
EOF

禁用 swap

(所有节点)

1
2
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

配置内核参数

(所有节点)

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo tee /etc/modules-load.d/k8s.conf <<EOF
br_netfilter
EOF

sudo modprobe br_netfilter

sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sudo sysctl --system

安装 containerd

(所有节点)

  1. 更新 apt 源
1
sudo apt update
  1. 安装 containerd
1
sudo apt install -y containerd
  1. 创建配置目录(如果不存在)
1
sudo mkdir -p /etc/containerd
  1. 生成默认配置文件
1
sudo containerd config default | sudo tee /etc/containerd/config.toml
  1. 关键:国内镜像 + systemd cgroup
1
2
3
sudo sed -i 's|sandbox_image = "registry.k8s.io/pause:.*"|sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"|g' /etc/containerd/config.toml

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
  1. 重启并开启 containerd 服务
1
2
sudo systemctl restart containerd
sudo systemctl enable containerd
  1. 查看 containerd 状态确认运行中
1
sudo systemctl status containerd

安装 Kubernetes

添加 Kubernetes 源

(所有节点)

1
2
3
4
5
6
7
8
9
# 1. 添加 Kubernetes 国内 apt 源(阿里云)
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 2. 添加 GPG 公钥
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 3. 更新源
sudo apt-get update

安装 kubelet、kubeadm、kubectl

(kubectl 可只在 master 装)

1
2
3
4
5
6
# 1. 安装
sudo apt-get install -y kubelet kubeadm kubectl

# 2. 锁定版本,避免系统升级时自动升级
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable --now kubelet

初始化 master 节点

(只在 master 执行)

1
2
3
4
5
6
# 初始化 master 节点
sudo kubeadm init \
--apiserver-advertise-address=192.168.11.100 \
--control-plane-endpoint=master \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

如果安装中断,有残留文件,先执行:

1
2
3
sudo kubeadm reset -f
sudo systemctl restart containerd
sudo rm -rf ~/.kube /etc/kubernetes/pki /etc/kubernetes/manifests

初始化成功后,执行提示中的命令以配置 kubectl:

1
2
3
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装网络插件

(只在 master 执行)
以 calico 为例:

1
2
3
4
5
6
7
8
# 下载yaml
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

# 替换为 DaoCloud 镜像
sed -i 's|docker.io/calico/|docker.m.daocloud.io/calico/|g' calico.yaml

# 部署
kubectl apply -f calico.yaml

加入节点

(在 node1 和 node2 执行)
初始化 master 成功后会输出一个 kubeadm join 命令,形如:

1
kubeadm join 192.168.11.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

在 node1 和 node2 上运行这个命令即可加入集群。

如果没保存,可以在 master 上用下面命令重新获取:

1
kubeadm token create --print-join-command

验证集群状态

(master 上)

1
kubectl get nodes

看到三台机器 STATUSReady 就说明集群搭建成功。