这里写自定义目录标题
1、硬件及系统(2台,一主一从)
OS:Alibaba Cloud Linux 3.2104 LTS 64位
CPU & 内存:2 核(vCPU)8 GiB
ESSD Entry 云盘:40 GiB
搭建过程:
主内网地址:192.168.0.87
从内网地址:192.168.0.86
bash
sudo hostnamectl set-hostname <your-hostname> # 例如 k8s-master, k8s-node-01
# 修改后重新连接SSH使终端提示符生效
第一阶段:系统准备与基础配置 (所有节点执行)
关闭 Swap 和防火墙
```bash
# 临时关闭 swap
sudo swapoff -a
# 永久关闭:编辑 /etc/fstab,注释掉包含 swap 的行
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 关闭防火墙(仅用于测试环境)
sudo systemctl stop firewalld && sudo systemctl disable firewalld
# 关闭 SELinux(临时)
sudo setenforce 0
# 永久关闭:修改 /etc/selinux/config 中 SELINUX=disabled
sudo modprobe overlay && sudo modprobe br_netfilter
sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
配置 hosts 文件 (/etc/hosts)
IP 地址换成自己实际的,内容必须一致:
192.168.0.87 master01
192.168.0.86 slave01
验证:ping master01 和 ping slave01 应解析到正确的内网IP。
配置完成之后 可以在从节点ping master01,是通的
主节点 Ping slave01 也是互通的
安装容器运行时 (containerd)
关键陷阱:CentOS 默认源无此包。
解决方案:添加阿里云 Docker 仓库安装。
```bash
# 添加阿里云仓库
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 containerd.io
sudo yum install -y containerd.io
# 生成配置并启用systemd cgroup驱动(必须)
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 启动并设置开机自启
sudo systemctl enable --now containerd
第二阶段:在主节点初始化控制平面
此阶段将 master01 初始化为集群的控制平面。
配置 containerd
核心步骤:修改配置文件 /etc/containerd/config.toml。
bash
# 生成默认配置
sudo containerd config default | sudo tee /etc/containerd/config.toml
# 启用 systemd cgroup 驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 修改 pause 镜像源为阿里云
sudo sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml
# 重启使配置生效
sudo systemctl restart containerd
关键陷阱:pause 镜像拉取失败会导致后续所有Pod无法创建。
初始化 Kubernetes 集群
使用 kubeadm 初始化,并指定阿里云镜像仓库。
bash
sudo kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.34.0 \
--pod-network-cidr=10.244.0.0/16 \
--control-plane-endpoint=master01
关键陷阱:如果失败,需用 sudo kubeadm reset -f 重置,并清理 /etc/kubernetes/ 和 /var/lib/etcd 等目录。
配置
执行 kubeadm init 成功输出末尾提示的命令。
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
验证:kubectl get nodes 应看到 master01 状态为 NotReady (因网络插件未装)。
第三阶段:部署网络插件并加入从节点
此阶段让集群具备网络能力,并将 slave01 纳管。
安装 Pod 网络插件 (Flannel)
仅在主节点执行一次,集群会自动在所有节点部署。
bash
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
等待 kubectl get pods -n kube-system 中 kube-flannel-ds-* Pod 全部 Running。
配置从节点的 containerd
关键陷阱:必须与主节点配置保持一致,否则无法拉取镜像。
关键步骤:登录 slave01,重复执行 [第二阶段第1步] 的全部操作,特别是 sandbox_image 和 SystemdCgroup。
额外步骤(必须):配置镜像加速器。
bash
# 在 /etc/containerd/config.toml 的 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 下添加
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://<你的阿里云加速器地址>"]
重启 containerd。
从节点加入集群
在主节点获取加入命令:kubeadm token create --print-join-command
在从节点执行上一步获取到的 kubeadm join ... 命令。
关键陷阱:如从节点有旧数据,需先执行 sudo kubeadm reset -f 和 sudo rm -rf /etc/kubernetes/ 清理。
第四阶段:验证集群与部署测试服务
此阶段确认集群完全健康,并验证其功能。
验证集群状态
在主节点执行:
bash
# 查看节点,应均为 Ready
kubectl get nodes
# 查看所有系统Pod,应全部 Running,且分布在不同节点
kubectl get pods -n kube-system -o wide
部署测试服务并外网访问
创建测试 Deployment 和 Service。
bash
kubectl create deployment nginx-test --image=nginx:alpine
kubectl expose deployment nginx-test --name=nginx-service --type=NodePort --port=80
获取访问端口和地址。
bash
kubectl get service nginx-service
# 输出中 PORT(S) 列如 80:32567/TCP,则端口为 32567
外网访问:在浏览器访问 http://<主节点公网IP>:。
关键陷阱:必须确保云服务器安全组放行了该 NodePort 端口。