Ansible部署k8s

目录

[📋 环境说明](#📋 环境说明)

[🚀 第一步:在所有节点上执行系统准备](#🚀 第一步:在所有节点上执行系统准备)

[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应该都是 RunningCompleted 状态。

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"
相关推荐
wzq11_66611 小时前
ansible部署项目——基于tidb数据库安装zabbix_server
ansible·zabbix·tidb
不灭的程序员阿澄12 小时前
在飞牛 NAS 上用 Docker 运行 DeepSeek Harness
运维·docker·容器
林浅不想努力14 小时前
k8s集群部署的方法原理
云原生·容器·kubernetes
輝太くん14 小时前
k8s中的pod管理
云原生·容器·kubernetes
潘正翔15 小时前
k8s高级_调度器Deployment
linux·运维·云原生·容器·kubernetes·jenkins·devops
angushine17 小时前
Docker部署镜像管理
运维·docker·容器
潘正翔17 小时前
jenkins构建cicd流水线
运维·服务器·ci/cd·容器·自动化·jenkins·cicd
Lost of 程序猿18 小时前
Kubernetes 排障实战:从 CrashLoopBackOff 到网络不通
网络·容器·kubernetes
javachen__18 小时前
Docker一键清理 + 全局限制,告别日志报满
java·docker·容器