实用指南:Ansible实战:VMware下K8s自动化部署指南

news/2025/10/22 11:48:57/文章来源:https://www.cnblogs.com/yxysuanfa/p/19157602

从 0 开始:用 Ansible 自动化部署 K8s 集群(VMware 环境 + MobaXterm)

如果你想在 VMware 虚拟机里,从 0 开始用 Ansible 自动化部署 K8s 集群,还打算用 MobaXterm 来操作 SSH,那这篇博客就是为你量身定做的!接下来,咱们一步步把这个过程搞清楚。

一、前期准备:搭建 VMware 虚拟机环境

(一)安装 VMware Workstation

首先,你得去 VMware 官网下载并安装 VMware Workstation(根据自己的操作系统选对应的版本,Windows 或者 Linux 都可以)。安装过程很简单,按照提示一步一步来就行。

(二)创建虚拟机模板

  1. 打开 VMware Workstation,点击 “创建新的虚拟机”,选择 “自定义(高级)”,然后点击 “下一步”。
  1. 硬件兼容性选默认的就行,继续 “下一步”。
  1. 选择 “稍后安装操作系统”,点击 “下一步”。
  1. 客户机操作系统选 “Linux”,版本选 “CentOS 7 64 位”(因为 K8s 在 CentOS 7 上部署比较稳定),点击 “下一步”。
  1. 给虚拟机起个名字,比如 “k8s-template”,再选个存放虚拟机文件的位置,点击 “下一步”。
  1. 处理器配置方面,至少给 2 个 CPU 核心,这样后续运行 K8s 会更流畅,点击 “下一步”。
  1. 内存至少给 2GB,点击 “下一步”。
  1. 网络类型选 “桥接网络”,这样虚拟机可以和宿主机在同一网段,方便后续 SSH 连接,点击 “下一步”。
  1. I/O 控制器、磁盘类型都选默认的,点击 “下一步”。
  1. 选择 “创建新虚拟磁盘”,点击 “下一步”。
  1. 磁盘大小给 20GB 以上,勾选 “将虚拟磁盘拆分为多个文件”,点击 “下一步”。
  1. 磁盘文件名保持默认,点击 “完成”。

(三)安装 CentOS 7 系统

  1. 选中刚创建的 “k8s-template” 虚拟机,点击 “编辑虚拟机设置”,在 “CD/DVD (IDE)” 里选择 CentOS 7 的 ISO 镜像文件,然后点击 “确定”。
  1. 启动虚拟机,进入 CentOS 7 的安装界面。选择 “Install CentOS 7”。
  1. 语言选择 “English” 或者 “中文(简体)”,点击 “Continue”。
  1. 在安装信息摘要里,点击 “Installation Destination”,选择刚才创建的虚拟磁盘,点击 “Done”。
  1. 点击 “Network & Host Name”,打开网络开关,设置主机名为 “k8s-template”,然后点击 “Done”。
  1. 点击 “Begin Installation” 开始安装。
  1. 安装过程中,设置 root 密码(比如 “123456”,生产环境要设复杂密码),也可以创建一个普通用户(比如 “ansible”,密码也设为 “123456”),并把这个用户加入 “sudoers” 组(后续用 Ansible 的时候需要 sudo 权限)。
  1. 安装完成后,点击 “Reboot” 重启虚拟机。

(四)配置模板虚拟机

  1. 重启后,登录系统(可以用 root 或者刚创建的普通用户)。
  1. 关闭防火墙:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
  1. 关闭 SELinux:

编辑/etc/selinux/config文件,把SELINUX=enforcing改成SELINUX=disabled,然后重启虚拟机。

  1. 配置 yum 源(可选,默认的源可能下载速度慢):

可以替换成阿里云的 yum 源,执行以下命令:

sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache
  1. 安装必要的工具:
sudo yum install -y net-tools vim wget
  1. 配置 SSH(确保可以用 MobaXterm 远程连接):

检查/etc/ssh/sshd_config文件,确保PermitRootLogin yes(如果需要 root 登录)或者PasswordAuthentication yes(允许密码认证),然后重启 sshd 服务:

sudo systemctl restart sshd
  1. 拍摄快照:

在 VMware Workstation 里,选中 “k8s-template” 虚拟机,点击 “虚拟机”->“快照”->“拍摄快照”,起个名字比如 “template-base”,这样后续创建其他虚拟机时可以基于这个快照克隆,节省时间。

(五)克隆虚拟机

  1. 选中 “k8s-template” 虚拟机,点击 “虚拟机”->“管理”->“克隆”。
  1. 选择 “现有快照”,选刚才拍的 “template-base”,点击 “下一步”。
  1. 选择 “创建完整克隆”,点击 “下一步”。
  1. 给克隆的虚拟机起名字,比如 “k8s-master”(Master 节点),选好存放位置,点击 “完成”。
  1. 用同样的方法再克隆两个虚拟机,分别命名为 “k8s-worker1” 和 “k8s-worker2”(Worker 节点)。

(六)配置各虚拟机网络

  1. 分别启动 “k8s-master”、“k8s-worker1”、“k8s-worker2” 虚拟机。
  1. 登录每个虚拟机,设置静态 IP(这样 MobaXterm 连接更稳定)。比如:
BOOTPROTO=static
IPADDR=192.168.1.100 # 每个虚拟机对应自己的IP
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114

然后重启网络服务:

sudo systemctl restart network
    • k8s-master:192.168.1.100
    • k8s-worker1:192.168.1.101
    • k8s-worker2:192.168.1.102

编辑/etc/sysconfig/network-scripts/ifcfg-ens33(不同虚拟机网卡名可能不同,用ifconfig查看),添加或修改以下内容:

  1. 设置主机名:
    • 在 k8s-master 上:
sudo hostnamectl set-hostname k8s-master
    • 在 k8s-worker1 上:
sudo hostnamectl set-hostname k8s-worker1
    • 在 k8s-worker2 上:
sudo hostnamectl set-hostname k8s-worker2
  1. 配置主机名解析(每个虚拟机都要做):

编辑/etc/hosts文件,添加:

192.168.1.100 k8s-master
192.168.1.101 k8s-worker1
192.168.1.102 k8s-worker2

二、MobaXterm 连接虚拟机

  1. 打开 MobaXterm,点击 “Session”->“SSH”。
  1. 在 “Remote host” 里输入 k8s-master 的 IP(192.168.1.100),“Specify username” 里输入登录用户名(比如 “ansible”),然后点击 “OK”。
  1. 输入用户密码(“123456”),就可以成功连接到 k8s-master 虚拟机了。
  1. 用同样的方法连接 k8s-worker1 和 k8s-worker2。

三、在控制节点安装 Ansible(这里选 k8s-master 作为控制节点)

  1. 连接到 k8s-master 虚拟机(用 MobaXterm)。
  1. 安装 Ansible:
sudo yum install -y epel-release
sudo yum install -y ansible
  1. 验证 Ansible 安装成功:
ansible --version

能看到 Ansible 的版本信息就说明安装成功了。

四、配置 Ansible 免密登录(控制节点到各被管理节点)

  1. 在 k8s-master 上,生成 SSH 密钥对:
ssh-keygen -t rsa

一路按回车,默认生成在~/.ssh/目录下。

  1. 把公钥复制到各被管理节点(k8s-master 自己、k8s-worker1、k8s-worker2):
ssh-copy-id ansible@k8s-master
ssh-copy-id ansible@k8s-worker1
ssh-copy-id ansible@k8s-worker2

每次复制都要输入对应节点的用户密码。

  1. 测试免密登录:
ssh ansible@k8s-worker1

不用输密码就能登录就说明配置成功了,然后exit退出。

五、编写 Ansible Playbook 部署 K8s

(一)创建 Ansible 工作目录

mkdir -p ~/ansible-k8s
cd ~/ansible-k8s

(二)创建主机清单(inventory)

创建inventory.ini文件:

[k8s_master]
k8s-master ansible_ssh_user=ansible
[k8s_workers]
k8s-worker1 ansible_ssh_user=ansible
k8s-worker2 ansible_ssh_user=ansible
[k8s_cluster:children]
k8s_master
k8s_workers

(三)编写 Playbook(deploy_k8s.yml)

---

- name: 初始化所有节点
hosts: k8s_cluster
become: yes
tasks:
- name: 关闭防火墙
service:
name: firewalld
state: stopped
enabled: no
- name: 关闭SELinux
selinux:
state: disabled
- name: 关闭swap
command: swapoff -a
- name: 永久关闭swap
replace:
path: /etc/fstab
regexp: '^(/dev/mapper/centos-swap.*)$'
replace: '#\1'
- name: 配置内核参数
sysctl:
name: "{{ item.name }}"
value: "{{ item.value }}"
sysctl_set: yes
state: present
reload: yes
with_items:
- { name: net.bridge.bridge-nf-call-iptables, value: 1 }
- { name: net.bridge.bridge-nf-call-ip6tables, value: 1 }
- { name: net.ipv4.ip_forward, value: 1 }
- name: 安装必要软件
yum:
name: "{{ item }}"
state: present
with_items:
- yum-utils
- device-mapper-persistent-data
- lvm2
- wget
- name: 安装Docker
hosts: k8s_cluster
become: yes
tasks:
- name: 添加Docker源
get_url:
url: https://download.docker.com/linux/centos/docker-ce.repo
dest: /etc/yum.repos.d/docker-ce.repo
- name: 安装Docker
yum:
name: docker-ce
state: present
- name: 启动Docker
service:
name: docker
state: started
enabled: yes
- name: 配置Docker镜像加速器(阿里云)
copy:
content: |
{
"registry-mirrors": ["https://<你的阿里云加速器地址>.mirror.aliyuncs.com"]
}
dest: /etc/docker/daemon.json
- name: 重启Docker
service:
name: docker
state: restarted
- name: 安装K8s组件
hosts: k8s_cluster
become: yes
tasks:
- name: 添加K8s源
copy:
content: |
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
dest: /etc/yum.repos.d/kubernetes.repo
- name: 安装kubeadm、kubelet、kubectl
yum:
name: "{{ item }}"
state: present
disable_gpg_check: yes
with_items:
- kubeadm
- kubelet
- kubectl
- name: 启动kubelet
service:
name: kubelet
state: started
enabled: yes
- name: 初始化Master节点
hosts: k8s_master
become: yes
tasks:
- name: 初始化Master
command: kubeadm init --apiserver-advertise-address=192.168.1.100 --pod-network-cidr=10.244.0.0/16
register: kubeadm_init
- name: 保存join命令
shell: kubeadm token create --print-join-command
register: join_command
- name: 把join命令写入文件
copy:
content: "{{ join_command.stdout }}"
dest: /tmp/join_command.sh
- name: 配置kubectl
shell: |
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- name: 部署网络插件(Flannel)
hosts: k8s_master
become: yes
tasks:
- name: 部署Flannel
command: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- name: Worker节点加入集群
hosts: k8s_workers
become: yes
tasks:
- name: 复制join命令到Worker节点
fetch:
src: /tmp/join_command.sh
dest: /tmp/
flat: yes
- name: 执行join命令
shell: sh /tmp/join_command.sh

(四)执行 Playbook

ansible-playbook -i inventory.ini deploy_k8s.yml

然后就等着 Ansible 自动执行所有任务,部署 K8s 集群啦。

六、验证 K8s 集群

  1. 在 k8s-master 节点上,执行:
kubectl get nodes

能看到 master 和两个 worker 节点,状态都是 “Ready” 就说明部署成功了。

  1. 再执行:
kubectl get pods --all-namespaces

能看到 kube-system 命名空间下的相关 Pod 都在运行,就说明 K8s 集群正常工作了。

这样,从 0 开始在 VMware 虚拟机里用 Ansible 自动化部署 K8s 集群的整个过程就完成啦,MobaXterm 在其中也很好地发挥了 SSH 连接和操作的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

作业三(结对编程)-小学四则运算题目生成与判卷(Python + 可视化)

结对作业:小学四则运算题目生成与判卷(Python + 可视化)姓名/学号:翁广驰(3123004409)、关健佳(3121004072) Github项目地址:https://github.com/Gucvii/homeworkPSP2.1 表格(实现前的预估)(1分)PSP 阶段 预…

2025年10月景区钢丝绳护栏厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

随着旅游业的蓬勃发展和景区安全标准的持续提升,景区钢丝绳护栏作为关键的安全防护设施,其市场需求呈现稳定增长态势。行业统计数据显示,2024年中国景区防护设施市场规模已突破75亿元,其中钢丝绳护栏凭借其优良的安…

技术 | 在单台电脑上管理多个 GitHub 账户并解决推送问题(测试中)

### 在单台电脑上管理多个 GitHub 账户并解决推送问题>在日常开发中,我们经常需要在同一台电脑上使用多个 GitHub 账户(例如个人账号和工作账号),但默认配置下容易出现推送权限错误或提交记录关联到错误账户的问…

CF2159E

CF2159E 求的是一个: \([x^k]\frac{(ax^2+bx+c)^n}{1-x}\) 可以分块: 对于所有 \(i\leq B\) 的 \((ax^2+bx+c)^i\) 预处理出。 再处理出所有的 \(i=kB\) 的 \(\frac{(ax^2+bx+c)^{i}}{1-x}\), 也就是 \((ax^2+bx+c)…

WebGL/Canvas 内存泄露分析

WebGL/Canvas 内存泄露分析在构建高性能、长周期运行的 WebGL/Canvas 应用(如 3D 编辑器、数据可视化平台)时,内存管理是一个至关重要且极具挑战性的课题。在构建高性能、长周期运行的 WebGL/Canvas 应用(如 3D 编…

2025年10月半封闭滑轨丝杆模组厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

在工业自动化领域,半封闭滑轨丝杆模组作为精密传动系统的核心部件,其定位精度与运行稳定性直接影响设备整体性能。随着智能制造的深入推进,市场对高精度、高刚性模组产品的需求持续增长。本文基于行业技术参数、产品…

Stable Diffusion启动提示端口错误处理

Windows启动Stable Diffusion报错错误原因,本机IP地址设置错误 修改配置文件为本机地址 文件为 sd-webui-aki-v4.1\.launcher\preference.json修改以下地址为本机地址再次启动即可

k8s部署的milvus提升性能需要扩容的角色节点

increase the number of proxy nodes to accept more requests from the client-side increase the number of query nodes to hold more data in memory to compute increase the number of data nodes to process in…

小程序-定义头部导航

默认定义头部导航,打开小程序自适应移动设备。<page-meta page-style="height:100%"><navigation-bar title="主页" /><view>123</view></page-meta>如需转载原创…

2025年10月简易丝杆模组定制厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

在工业自动化快速发展的背景下,简易丝杆模组作为精密传动领域的核心部件,其定制化能力与产品质量直接影响设备性能。当前市场需求呈现出对高精度、模块化、快速交付的显著特征,专业定制厂家凭借其技术积累与服务优势…

Golang的 cron 库

目录🔍 Cron 表达式💡 核心特性与用法预定义模式与间隔基本使用步骤时区设置高级选项简单示例⚠️ 版本注意与总结Golang 的 cron 库用于处理定时任务,其中 github.com/robfig/cron/v3 是一个广泛使用的、功能丰富…

poll 函数原理与 TCP 服务器构建详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Android 应用多模块开发时,子模块只有 release buildType 时编译报错怎么办?

非常好的问题 👏,而且你这个需求其实是 最常见、最合理 的做法。 你完全正确 —— 如果你的模块(library modules)只需要 release(正式版)构建,而 app 有多个 buildType(比如 dev, prod 等),你 不需要 在每…

ipad协议对个人微信机器人进行二次开发

ipad协议对个人微信机器人进行二次开发、个微协议,微信号二次开发/ipad协议 优势 我们是一家专业服务企业数字化微信管理服务的技术团队,服务于需求SCRM、机器人、营销系统、社群小助手等具有研发能力的企业,同时我们…

西安交通大学国家级医学公关交叉平台实验室建设实拍图

在西安交通大学创新港,医学板块科研平台建设正以“加速度” 推进。 实验室现场,通风管道改造已完工,崭新的地面和实验台通风柜等实验室家具布局井然有序。

2025年10月智能门窗代理厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

随着智能家居市场的快速发展,智能门窗行业迎来了快速增长期。据行业统计数据显示,2024年中国智能门窗市场规模预计突破800亿元,年复合增长率保持在18%以上。消费者对智能门窗的需求已从基础功能向智能化、安全性、节…

深入解析:【ROS2学习笔记】话题通信篇:话题通信再探

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Android插件化框架

https://chat.deepseek.com/share/w6duumv7aglpslahak Android插件化框架Shadow深度解析 1. 什么是Android插件化? 1.1 基本概念 Android插件化是一种技术,允许一个已安装的APP(称为宿主)动态加载并运行另一个完整…

完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)

完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…