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"
相关推荐
KIDULT°5 小时前
Docker 从 0 入门|吃透容器生态、架构与 Dockerfile 实战
docker·容器·架构
杜子不疼.5 小时前
Ansible 批量部署 Node Exporter:从单机安装流程到远程主机统一执行
ai·ansible
putItInYourHand6 小时前
Docker Compose 部署 Mosquitto MQTT Broker 完整实战指南
运维·docker·容器
生活爱好者!15 小时前
哇!影视新玩法!docker部署NEOWATCH NAS
运维·docker·容器
cpolar技术支持18 小时前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障
Lsetea20 小时前
Kubernetes 1.37 Pod证书怎么签发:Signer与mTLS信任链排查
云原生·kubernetes·ssl证书·tls·mtls
新时代牛马21 小时前
docker run 起不来?从dockerd、containerd 到runc 一条线讲透
运维·docker·容器
努力努力再努力wz1 天前
【Docker 入门系列】:从 Namespace、CGroup 到 LXC:理解容器运行时、rootfs 与 LXC 实战
运维·docker·容器
JavaPub-rodert1 天前
Docker 多阶段构建:为什么生产环境镜像可以小 90%
运维·docker·容器
PC2005-cloud1 天前
Qdrant 连接失败排查:localhost 解析到 __1,而 Docker 只绑了 IPv4
运维·docker·容器