上一篇文章介绍了一个轻量级的 Kubernetes 发行版本 - k3s 。
这篇文章,我们将通过使用以下几个 IaC(Infrastructure as Code)工具,在本地环境(例如你的 Linux 工作台)自动化部署一个可用的 K3S 集群
- Packer - HashiCorp 开源的一个系统镜像构建工具。
- Terraform - HashiCorp 开源的基础设施及代码自动化管理工具。
- Ansible - RedHat赞助的一个开源社区项目,IT自动化配置工具。
环境需求
本演示将的所有操作将在一台支持虚拟化(kvm + qemu + libvirt) Linux 主机上执行。
在 Ubuntu 上启用虚拟化环境,请参考 KVM hypervisor: a beginner's guide 。
在 Fedora 上启用虚拟化环境,请参考 Getting startyed with virtualization (libvirt) 。
在 openSUSE 上启用虚拟化环境,请参考 Virtualization Guide 。
其他 Linux 发行版,请参考相关文档。
我是在我的笔记本电脑上执行的操作,系统是 openSUSE Leap 15.4 。
除了上述的虚拟化需求外,还需要在系统上安装上面提到的几个工具。如果你的环境中有 LinuxBrew,则可通过 Brew 直接安装
❯ brew install packer terraform ansible
否则,请下载各自官方发布的二进制包,解压后放到 PATH 路径中。
❯ packer version
Packer v1.8.3
❯ terraform version
Terraform v1.3.2
on linux_amd64
❯ ansible --version
ansible [core 2.13.4]
因为本示例中,使用了 Terraform 的 ansbile provisioner,因此还需要安装这个插件
❯ mkdir -p ~/.terraform.d/plugins
❯ curl -sL
https://raw.githubusercontent.com/radekg/terraform-provisioner-ansible/master/bin/deploy-release.sh
--output /tmp/deploy-release.sh
❯ chmod +x /tmp/deploy-release.sh
❯ /tmp/deploy-release.sh -v 2.5.0
❯ rm -rf /tmp/deploy-release.sh
完成以上需求之后,我们将开始执行如下步骤
- 使用 Packer 创建一个基于 Debian 11.5.0 的虚拟机系统模板镜像,该镜像中,将会配置好 SSH 免密登陆密钥。
- 使用 Terraform 在本地虚拟环境中,创建出需要的虚拟机,并生成后续 ansible 配置虚拟机需要的 inventory 文件。
- 使用 Ansible 配置虚拟机节点安装 k3s 集群,以及演示应用。
以上所有步骤的代码在 (https://github.com/mengzyou/i...)
将代码克隆到本地
❯ git clone https://github.com/mengzyou/iac-examples.git
❯ cd iac-example/k3scluster/
创建虚拟机镜像
首先我们需要通过 Packer 创建一个虚拟机系统镜像,后续需要使用该镜像来创建虚拟机实例,需要的代码在 k3scluster/packer/ 目录下
❯ cd packer/
❯ tree
.
|-- Makefile
|-- base.pkr.hcl
`-- preseed
|-- debian11.txt
这里通过 Makefile 来调用 packer 进行镜像的构建,和上传到虚拟化环境,注意以下变量配置