实用指南: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

编辑/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 连接和操作的作用。

posted @ 2025-10-22 11:45  yxysuanfa  阅读(19)  评论(0)    收藏  举报