当前位置: 首页 > news >正文

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

从 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.jsqmd.com/news/19333/

相关文章:

  • 作业三(结对编程)-小学四则运算题目生成与判卷(Python + 可视化)
  • 2025年10月景区钢丝绳护栏厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 技术 | 在单台电脑上管理多个 GitHub 账户并解决推送问题(测试中)
  • CF2159E
  • WebGL/Canvas 内存泄露分析
  • 2025年10月半封闭滑轨丝杆模组厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • Stable Diffusion启动提示端口错误处理
  • 阿里云API网关日志问题
  • k8s部署的milvus提升性能需要扩容的角色节点
  • 小程序-定义头部导航
  • 2025年10月简易丝杆模组定制厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • Golang的 cron 库
  • poll 函数原理与 TCP 服务器构建详解
  • Android 应用多模块开发时,子模块只有 release buildType 时编译报错怎么办?
  • ipad协议对个人微信机器人进行二次开发
  • 西安交通大学国家级医学公关交叉平台实验室建设实拍图
  • 2025年10月智能门窗代理厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 深入解析:【ROS2学习笔记】话题通信篇:话题通信再探
  • 完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)
  • 【IEEE出版、中国科学院宁波材料所主办】第五届机械自动化与电子信息工程国际学术会议(MAEIE 2025)
  • 氛围灯动态屏保取色方案二
  • 完整教程:Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明
  • 老弟第一次学 Redis,被坑惨了!小白可懂的保姆级 Redis 教程
  • 中小企业如何低成本部署电话呼叫软件网页版?一步步教你做
  • 别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
  • PCB库文档处理工具
  • 完整教程:如何更改 SQLserver 数据库存储的位置 想从C盘换到D盘
  • 实用指南:Linux 如何创建和计数套接字
  • (web cad drawing)Web CAD SDK Integration Method
  • 记一次 .NET 某药品缺陷高速检测系统 卡慢分析