当前位置: 首页 > 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 firewalldsudo 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.backupsudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.reposudo yum clean allsudo 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=staticIPADDR=192.168.1.100 # 每个虚拟机对应自己的IPNETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=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-master192.168.1.101 k8s-worker1192.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-releasesudo 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-masterssh-copy-id ansible@k8s-worker1ssh-copy-id ansible@k8s-worker2

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

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

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

五、编写 Ansible Playbook 部署 K8s

(一)创建 Ansible 工作目录

 
mkdir -p ~/ansible-k8scd ~/ansible-k8s

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

创建inventory.ini文件:

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

(三)编写 Playbook(deploy_k8s.yml)

 

---

- name: 初始化所有节点hosts: k8s_clusterbecome: yestasks:- name: 关闭防火墙service:name: firewalldstate: stoppedenabled: no- name: 关闭SELinuxselinux:state: disabled- name: 关闭swapcommand: swapoff -a- name: 永久关闭swapreplace:path: /etc/fstabregexp: '^(/dev/mapper/centos-swap.*)$'replace: '#\1'- name: 配置内核参数sysctl:name: "{{ item.name }}"value: "{{ item.value }}"sysctl_set: yesstate: presentreload: yeswith_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: presentwith_items:- yum-utils- device-mapper-persistent-data- lvm2- wget- name: 安装Dockerhosts: k8s_clusterbecome: yestasks:- name: 添加Docker源get_url:url: https://download.docker.com/linux/centos/docker-ce.repodest: /etc/yum.repos.d/docker-ce.repo- name: 安装Dockeryum:name: docker-cestate: present- name: 启动Dockerservice:name: dockerstate: startedenabled: yes- name: 配置Docker镜像加速器(阿里云)copy:content: |{"registry-mirrors": ["https://<你的阿里云加速器地址>.mirror.aliyuncs.com"]}dest: /etc/docker/daemon.json- name: 重启Dockerservice:name: dockerstate: restarted- name: 安装K8s组件hosts: k8s_clusterbecome: yestasks:- name: 添加K8s源copy:content: |[kubernetes]name=Kubernetesbaseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpgdest: /etc/yum.repos.d/kubernetes.repo- name: 安装kubeadm、kubelet、kubectlyum:name: "{{ item }}"state: presentdisable_gpg_check: yeswith_items:- kubeadm- kubelet- kubectl- name: 启动kubeletservice:name: kubeletstate: startedenabled: yes- name: 初始化Master节点hosts: k8s_masterbecome: yestasks:- name: 初始化Mastercommand: kubeadm init --apiserver-advertise-address=192.168.1.100 --pod-network-cidr=10.244.0.0/16register: kubeadm_init- name: 保存join命令shell: kubeadm token create --print-join-commandregister: join_command- name: 把join命令写入文件copy:content: "{{ join_command.stdout }}"dest: /tmp/join_command.sh- name: 配置kubectlshell: |mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config- name: 部署网络插件(Flannel)hosts: k8s_masterbecome: yestasks:- name: 部署Flannelcommand: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml- name: Worker节点加入集群hosts: k8s_workersbecome: yestasks:- name: 复制join命令到Worker节点fetch:src: /tmp/join_command.shdest: /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.dtcms.com/a/449159.html

相关文章:

  • Ansible(三)—— 使用Ansible自动化部署LNMP环境实战指南
  • 【深度学习新浪潮】有没有可能设计出一种统一架构,可以同时处理图像理解的各种下游任务?
  • 介绍一下什么是RabbitMQ的发送者可靠性?
  • 网站后台管理页面模板北京企业建网站定制价格
  • AI编辑器(二) ---调用模型的fim功能
  • UniApp 自定义导航栏适配指南:微信小程序胶囊遮挡、H5 与 App 全端通用方案
  • 数据结构其一 线性表
  • 2025年--Lc164--H14.最长公共前缀(数组和字符串)--Java版
  • 网站html有了怎么建设网站钉钉小程序开发
  • Linux基本指令(2)
  • 从工具到中枢:2025 年 AI 重构实体经济的实践图景
  • 虚幻基础:攻击 与 受击 之间的联动
  • 如何在不降低画质的前提下缩小图片体积?附实操方案
  • 个人网站注册费用互联网广告价格
  • 【学习笔记02】C++面向对象编程核心技术详解
  • vite与ts的结合
  • arcgis如何将一部分shp地图截取下来并处理成networkx格式
  • .NET Aspire深度解析:重新定义云原生分布式应用开发的“秘密武器“
  • 标准件网站开发手机淘宝网页版
  • 【网络编程】揭秘 HTTPS 数据安全:加密方案与证书体系的协同防护
  • Windows Server 2022 安装教程(从 ISO 文件安装 Server STD CORE 2022 64位系统)​
  • 【STM32】墨水屏驱动开发
  • Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备故障预测与智能运维中的应用
  • 【MySQL】SQL的分类
  • Flutter GridView 使用指南
  • day86——有效的字母异位词(LeetCode-242)
  • 企业的网站建设费用重庆seo什么意思
  • 网站搭建介绍网站建设的原因
  • 怎么建免费网站建设公司网站新闻宣传管理制度
  • Deep Code Research:当 Deep Research 遇上 ABCoder