目录
[📋 环境说明](#📋 环境说明)
[🚀 第一步:在所有节点上执行系统准备](#🚀 第一步:在所有节点上执行系统准备)
[1.1 设置主机名(每台机器执行)](#1.1 设置主机名(每台机器执行))
[1.2 配置/etc/hosts(三台机器都执行)](#1.2 配置/etc/hosts(三台机器都执行))
[1.3 关闭防火墙(三台机器都执行)](#1.3 关闭防火墙(三台机器都执行))
[1.4 关闭交换分区(三台机器都执行)](#1.4 关闭交换分区(三台机器都执行))
[1.5 安装必要工具(三台机器都执行)](#1.5 安装必要工具(三台机器都执行))
[🔑 第二步:在Master上配置SSH免密登录](#🔑 第二步:在Master上配置SSH免密登录)
[2.1 生成SSH密钥](#2.1 生成SSH密钥)
[2.2 将公钥复制到所有节点(包括自己)](#2.2 将公钥复制到所有节点(包括自己))
[2.3 验证免密登录](#2.3 验证免密登录)
[📦 第三步:在Master上安装Ansible](#📦 第三步:在Master上安装Ansible)
[3.1 安装Ansible(推荐使用pip安装)](#3.1 安装Ansible(推荐使用pip安装))
[3.2 验证Ansible安装](#3.2 验证Ansible安装)
[📥 第四步:下载Kubespray](#📥 第四步:下载Kubespray)
[📝 第五步:配置Kubespray清单文件](#📝 第五步:配置Kubespray清单文件)
[5.1 复制示例清单](#5.1 复制示例清单)
[5.2 生成并编辑主机清单](#5.2 生成并编辑主机清单)
[5.3 查看并调整生成的清单文件](#5.3 查看并调整生成的清单文件)
[5.4 (可选)修改关键配置变量](#5.4 (可选)修改关键配置变量)
[🚀 第六步:执行Kubespray部署](#🚀 第六步:执行Kubespray部署)
[✅ 第七步:验证集群安装结果](#✅ 第七步:验证集群安装结果)
[7.1 检查节点状态](#7.1 检查节点状态)
[7.2 检查Pod状态](#7.2 检查Pod状态)
[7.3 查看集群信息](#7.3 查看集群信息)
[7.4 运行一个测试Pod验证功能](#7.4 运行一个测试Pod验证功能)
[🧹 第八步:清理测试Pod](#🧹 第八步:清理测试Pod)
📋 环境说明
| 角色 | IP地址 | 配置 |
|---|---|---|
| Ansible控制节点(可以是你的笔记本或其中一台机器) | 192.168.10.110 | - |
| Master | 192.168.10.110 | 2核4G |
| Node01 | 192.168.10.111 | 1核4G |
| Node02 | 192.168.10.112 | 1核4G |
🚀 第一步:在所有节点上执行系统准备
你需要分别登录到三台机器,执行以下命令(或通过Ansible批量执行):
1.1 设置主机名(每台机器执行)
# 在 192.168.10.110 上执行
hostnamectl set-hostname master
# 在 192.168.10.111 上执行
hostnamectl set-hostname node01
# 在 192.168.10.112 上执行
hostnamectl set-hostname node02
1.2 配置/etc/hosts(三台机器都执行)
cat >> /etc/hosts << EOF
192.168.10.110 master
192.168.10.111 node01
192.168.10.112 node02
EOF

1.3 关闭防火墙(三台机器都执行)
# Ubuntu系统
systemctl stop ufw && systemctl disable ufw
# CentOS/RHEL系统
systemctl stop firewalld && systemctl disable firewalld

1.4 关闭交换分区(三台机器都执行)
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab

1.5 安装必要工具(三台机器都执行)
# Ubuntu/Debian
apt update && apt install -y python3 python3-pip python3-venv sshpass
# CentOS/RHEL
yum install -y python3 python3-pip python3-virtualenv sshpass

🔑 第二步:在Master上配置SSH免密登录
这些命令只在 Master (192.168.10.110) 上执行
2.1 生成SSH密钥
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

2.2 将公钥复制到所有节点(包括自己)
ssh-copy-id root@192.168.10.110
ssh-copy-id root@192.168.10.111
ssh-copy-id root@192.168.10.112



2.3 验证免密登录
ssh root@192.168.10.110 "hostname"
ssh root@192.168.10.111 "hostname"
ssh root@192.168.10.112 "hostname"

📦 第三步:在Master上安装Ansible
这些命令只在 Master (192.168.10.110) 上执行
3.1 安装Ansible(推荐使用pip安装)
# 安装Python虚拟环境
python3 -m venv ~/ansible-venv
source ~/ansible-venv/bin/activate
# 升级pip并安装ansible
pip install --upgrade pip
pip install ansible -i https://pypi.tuna.tsinghua.edu.cn/simple
ansible --version


3.2 验证Ansible安装
ansible --version

📥 第四步:下载Kubespray
这些命令只在 Master (192.168.10.110) 上执行
# 确保在虚拟环境中
source ~/ansible-venv/bin/activate
# 下载Kubespray(选择一个版本,这里用最新稳定版)
cd ~
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
# 查看版本标签,选择一个稳定版本(可选)
git tag -l | grep -E "^v2\." | tail -5
# 切换到最新稳定版本(例如 v2.26.0,请用实际最新版)
git checkout v2.26.0


📝 第五步:配置Kubespray清单文件
这些命令只在 Master (192.168.10.110) 上执行
5.1 复制示例清单
cp -rfp inventory/sample inventory/mycluster
5.2 生成并编辑主机清单
# 安装ruamel.yaml模块
pip install ruamel.yaml -i https://pypi.tuna.tsinghua.edu.cn/simple
# 声明要使用的IP列表
export IPS="192.168.10.110,192.168.10.111,192.168.10.112"
# 使用脚本生成主机清单文件
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS}
5.3 查看并调整生成的清单文件
cat inventory/mycluster/hosts.yaml

5.4 (可选)修改关键配置变量
# 编辑集群配置
vim inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
主要可能需要修改的内容(一般情况下默认就够用):
# 设置Pod网段
kube_pods_subnet: 10.233.64.0/18
# 设置Service网段
kube_service_addresses: 10.233.0.0/18
# 容器运行时(默认containerd)
container_manager: containerd


🚀 第六步:执行Kubespray部署
这些命令只在 Master (192.168.10.110) 上执行
# 确保在虚拟环境中
source ~/ansible-venv/bin/activate
cd ~/kubespray
# 安装kubespray所需的Python依赖
pip install -r requirements.txt
# 执行部署Playbook(这个过程大约需要10-20分钟)
ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml -b -v

参数说明:
-
-i:指定清单文件 -
-b:使用become(sudo)权限执行 -
-v:显示详细输出(想看更详细信息可以用-vvv)
✅ 第七步:验证集群安装结果
这些命令只在 Master (192.168.10.110) 上执行
7.1 检查节点状态
kubectl get nodes
期望输出:
NAME STATUS ROLES AGE VERSION
master Ready control-plane 10m v1.28.x
node01 Ready <none> 10m v1.28.x
node02 Ready <none> 10m v1.28.x

7.2 检查Pod状态
kubectl get pods --all-namespaces

所有Pod应该都是 Running 或 Completed 状态。
7.3 查看集群信息
kubectl cluster-info

7.4 运行一个测试Pod验证功能
kubectl run test-nginx --image=nginx:alpine --restart=Never --port=80
kubectl wait --for=condition=Ready pod/test-nginx --timeout=60s
kubectl port-forward test-nginx 8080:80 &
curl http://localhost:8080

如果能看到nginx欢迎页面,说明集群完全正常运行。
🧹 第八步:清理测试Pod
kubectl delete pod test-nginx
pkill -f "port-forward"