6 min read

[k8s系列篇之1] 快速准备基础系统环境

背景

经常用类似vultr之类的云厂商的vps虚拟服务器, 对其中提供的一键创建多个应用节点的能力十分依赖, 非常的方便并且纯粹. 因此自己平时部署服务搭建环境也会倾向于"一键"创建"纯净"的环境.

应用层面, docker以及docker-compose一定程度上实现了类似的"一键"且"纯净"的效果, 只需要简单的写几行配置, 便可以想部署几个部署几个, 配合portainer的图形化容器管理能力, 和NginxProxyManager提供的容器内代理图形化管理能力, 便可以基本管理应用服务的全生命周期.

然而, 当部署研究的对象, 是容器化技术本身, 或者需要频繁在新的容器化环境中部署应用服务做测试的时候, 只是快速部署容器就不够用了, 需要能够快速部署虚拟机.

可选方案

于是就去研究了一下类似的技术, 有如下一些方案:

  • 虚拟机模板化, 从而可以快速复制新的容器. 比如
  1. VMware的ova
  2. ProxmoxVE的template
  3. 或者直接qemu的命令复制粘贴
  • 新系统的快速配置技术, 用来进行新机器的批量管理与配置. 比如
  1. ansible, 一款运维工具, 主要用来进行大量工程的批量配置, 模块很多, 很强大
  2. cloud-init, 目前大量云厂商主推的一种初始配置方案, 主要用来配初始用户, ip, mac, hostname等基础信息, 方便启动后可以连接管理;
  3. ignition, fedora的coreos主推的一项预配置技术, 比cloud-init运行时间更早, 因此能够额外配置如磁盘分区, 系统服务等很多功能, 但配置较复杂, 目前支持的发行版较少.

最后综合确定选用 pve 搭配 cloud-init 的方案. 用pve是因为底层是linux, 可以直接远程直接用, 管理方便; 用cloud-init是因为配置正好够用, pve正好默认支持, 无需做额外的转换等操作; 其他额外的配置再通过ansible进行补充管理即可.

预先要求

  1. 有一个Proxmox VE的虚拟化环境. 最好是有一个独立的电脑整个安装的pve, 这样性能既好一些, 也不用去处理烦人的网络架构问题;
  2. 内存和磁盘需求, 看个人需求评估, pve和系统本身吃的不多, 小几百兆内存;
  3. 下载 centosubuntu 的cloud镜像,  非cloud版本不支持cloud-init配置的;

具体步骤

创建初始虚拟机

配置项

  • CD/DVD留空
  • Disks都删除
  • CPU适当调大
  • 内存适当调大, 并关闭ballooning Device(只是测试没必要占满内存)
  • network可选关闭防火墙

截图

cli导入镜像

到pve的节点的shell中, 执行

qm importdisk 330 /vault/pve/ISO/template/iso/CentOS-7-x86_64-GenericCloud-2111.qcow2 lvmPve

然后到硬件管理界面上, 双击新出现的unused0磁盘, 添加

添加完之后可以选中这个磁盘, 再给他增大些, 比如加个24G, 从而达到32G

配置cloud-init

删除CD/DVD设备

添加CloudInit设备

添加完后切换到Cloud-Init配置页, 进行配置

转换为模板

配置完后, 就可以转换为模板保存, 下次直接克隆使用了

复制出新虚拟机, 配置cloud-init后启动

复制后, 如果有必要, 可以修改下cloudinit里的信息, 例如ip, 避免冲突

我用的dhcp, 在openwrt侧配置dhcp策略, 根据mac地址指定ip, 避免了手动指定. 然后再配合 自动修改MAC地址 的脚本, 一键不再是梦;

更进一步的自动化

目前的方案实现, 还需要手动在pve的界面上点点选选, 还是要操作很久. 但其实pve借助的是qemu实现的虚拟化, 可以直接用 qm 命令来管理虚拟机, 不管是创建还是转换为模板还是克隆还是启停都可以用qm来实现.

qm命令手册

# 创建虚拟机
## coreos, memory, net0不解释, ballon是指是否独占内存. ostype的l26指的是linux 2.6, 指定scsi控制器的兼容性好一些 其他可选参数可查看手册添加.
qm create 350 --name Ttest --cores 2 --memory 4096 --balloon 0 --ostype l26 --scsihw virtio-scsi-pci --net0 model=virtio,macaddr=10:01:00:03:03:50,bridge=vmbr0

# 添加镜像磁盘并扩容
qm importdisk 350 /vault/pve/ISO/template/iso/CentOS-7-x86_64-GenericCloud-2111.qcow2 lvmPve
qm set 350 --scsi0 lvmPve:vm-350-disk-0
qm resize 350 scsi0 20G

# 设置Cloud-Init
qm set 350 --ide2 lvmPve:cloudinit
qm set 350 --boot c --bootdisk scsi0
qm set 350 --ciuser root --cipassword toor --sshkeys ~/.ssh/id_rsa.pub --ipconfig0 ip=dhcp,ip6=dhcp

# 转换为模板
qm template 350

命令批量管理虚拟机

qm list 查看虚拟机状态

for id in {351..353} ; do qm clone 350 $id --name k8s-$id; /yss/MACdealer.sh $id; qm start $id; done 批量克隆并修改mac并启动虚拟机

for id in {351..353} ; do qm stop $id; qm destroy $id ; done 批量停止并删除虚拟机