准备工作
(所有节点执行)
- 三台ubuntu
- master:192.168.11.100
- node1:192.168.11.11
- node2:192.168.11.22
设置主机名
(各自设置)
- master 节点
1 2
| sudo hostnamectl set-hostname master exec bash
|
- node1 节点
1 2
| sudo hostnamectl set-hostname node1 exec bash
|
- 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
(所有节点)
- 更新 apt 源
- 安装 containerd
1
| sudo apt install -y containerd
|
- 创建配置目录(如果不存在)
1
| sudo mkdir -p /etc/containerd
|
- 生成默认配置文件
1
| sudo containerd config default | sudo tee /etc/containerd/config.toml
|
- 关键:国内镜像 + 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
|
- 重启并开启 containerd 服务
1 2
| sudo systemctl restart containerd sudo systemctl enable containerd
|
- 查看 containerd 状态确认运行中
1
| sudo systemctl status containerd
|
安装 Kubernetes
添加 Kubernetes 源
(所有节点)
1 2 3 4 5 6 7 8 9
| 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
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | \ sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo apt-get update
|
安装 kubelet、kubeadm、kubectl
(kubectl 可只在 master 装)
1 2 3 4 5 6
| sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl sudo systemctl enable --now kubelet
|
初始化 master 节点
(只在 master 执行)
1 2 3 4 5 6
| 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
| curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
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 上)
看到三台机器 STATUS
是 Ready
就说明集群搭建成功。