[k8s系列篇之1] 快速准备基础系统环境
背景
经常用类似vultr之类的云厂商的vps虚拟服务器, 对其中提供的一键创建多个应用节点的能力十分依赖, 非常的方便并且纯粹. 因此自己平时部署服务搭建环境也会倾向于"一键"创建"纯净"的环境.
应用层面, docker以及docker-compose一定程度上实现了类似的"一键"且"纯净"的效果, 只需要简单的写几行配置, 便可以想部署几个部署几个, 配合portainer的图形化容器管理能力, 和NginxProxyManager提供的容器内代理图形化管理能力, 便可以基本管理应用服务的全生命周期.
然而, 当部署研究的对象, 是容器化技术本身, 或者需要频繁在新的容器化环境中部署应用服务做测试的时候, 只是快速部署容器就不够用了, 需要能够快速部署虚拟机.
可选方案
于是就去研究了一下类似的技术, 有如下一些方案:
- 虚拟机模板化, 从而可以快速复制新的容器. 比如
- VMware的ova
- ProxmoxVE的template
- 或者直接qemu的命令复制粘贴
- 新系统的快速配置技术, 用来进行新机器的批量管理与配置. 比如
- ansible, 一款运维工具, 主要用来进行大量工程的批量配置, 模块很多, 很强大
- cloud-init, 目前大量云厂商主推的一种初始配置方案, 主要用来配初始用户, ip, mac, hostname等基础信息, 方便启动后可以连接管理;
- ignition, fedora的coreos主推的一项预配置技术, 比cloud-init运行时间更早, 因此能够额外配置如磁盘分区, 系统服务等很多功能, 但配置较复杂, 目前支持的发行版较少.
最后综合确定选用 pve 搭配 cloud-init 的方案. 用pve是因为底层是linux, 可以直接远程直接用, 管理方便; 用cloud-init是因为配置正好够用, pve正好默认支持, 无需做额外的转换等操作; 其他额外的配置再通过ansible进行补充管理即可.
预先要求
- 有一个Proxmox VE的虚拟化环境. 最好是有一个独立的电脑整个安装的pve, 这样性能既好一些, 也不用去处理烦人的网络架构问题;
- 内存和磁盘需求, 看个人需求评估, pve和系统本身吃的不多, 小几百兆内存;
- 下载 centos 或 ubuntu 的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来实现.
# 创建虚拟机
## 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
批量停止并删除虚拟机
Member discussion