
Azure 云上 10 分钟全自动部署 K3s 集群实战
背景
在云计算与容器化技术飞速发展的今天,快速搭建可扩展的 Kubernetes 集群成为开发者的必备技能。尤其是在开发测试环境中,能够快速创建、销毁集群是提升工作效率的关键。
K3s 作为轻量级 Kubernetes 发行版,非常适合在云上快速搭建测试、开发或边缘计算集群。结合 IaC(基础设施即代码)工具 Terraform 和自动化脚本项目 k3s-cluster-automation,可以极大提升集群部署效率,降低人为操作风险。
本文将介绍如何通过 Terraform 与 k3s-cluster-automation 脚本,在 Azure 云上实现从虚拟机创建到 K3s 集群部署的全自动化流程,整个过程无需手动干预,大幅提升开发测试效率。
为什么选择 Azure + K3s + Terraform?
- Azure:提供稳定的云计算资源,适合快速部署测试环境(还有另外一个原因,作为微软 MVP,可以免费使用 Azure 资源)
- K3s:轻量级 Kubernetes 发行版,资源占用少(仅需 512MB 内存),适合边缘计算与测试集群,是我喜欢的 Kubernetes 发行版之一
- Terraform:基础设施即代码(IAC)工具,通过代码描述资源状态,支持版本控制与批量部署
前置条件
- Azure 账户(需有资源创建权限)
- 本地环境:安装 Terraform CLI、Azure CLI
- K3s 部署工具:k3sup CLI(用于远程部署 K3s)
一、通过 Terraform 创建 Azure 虚拟机
1. 认证与订阅配置
首先通过 Azure CLI 完成认证,并设置目标订阅:
# 登录 Azure 账户(需提前获取 tenant ID)
az login --tenant <你的租户 ID>
# 查看账户信息
az account show
# 设置目标订阅(如有多个订阅)
az account set --subscription <订阅 ID>
这里记录下你的订阅 ID,后续 Terraform 代码中会用到。
2. 克隆 Terraform 代码并初始化
# 克隆包含 Azure 虚拟机创建脚本的仓库
git clone https://github.com/addozhang/terraform-azure-sample.git
cd terraform-azure-sample
# 进入资源组创建目录
cd resource-group
# 初始化 Terraform 环境(下载 Azure Provider)
terraform init
# 验证代码格式
terraform validate
3. 配置并创建资源组与网络
在 variables.tf
中配置资源组名称与区域(如东亚 eastasia
),或通过命令行参数指定:
# 创建资源组、虚拟网络与子网(带参数示例)
terraform apply -var "name=k3s-cluster" -var "location=eastasia" -var "subscription_id=<你的订阅 ID>"
4. 创建多节点虚拟机
在 terraform-azure-sample/virtual-machine
目录下,使用 Terraform 创建虚拟机。注意,这里默认使用 ~/.ssh/id_rsa.pub
作为 SSH 公钥,如果需要使用其他公钥,请在 azure.tf
中修改 public_key
的值。
# 切换到虚拟机创建目录
cd ../virtual-machine
# 初始化环境
terraform init
# 示例:设置 1 个主节点 + 2 个工作节点
# 应用配置创建虚拟机
terraform apply -var "name_prefix=vm" -var "resource_group_name=k3s-cluster" -var "vm_count=3" -var "instance_size=Standard_D4s_v3" -var "location=eastasia" -var "subscription_id=<你的订阅 ID>"
5. 获取虚拟机 IP 地址
# 查看创建的资源详情
terraform show -json | jq '.values.root_module.resources[] | select(.type == "azurerm_public_ip")' | jq .values.ip_address
记录下所有虚拟机的公网 IP 地址,按顺序排列(第一个为主节点,后续为工作节点)。
二、部署 K3s 集群到 Azure 虚拟机
1. 安装 k3sup 工具
k3sup 是一个命令行工具,使用前要下载安装 CLI。
Linux:
curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/
macOS:
brew install k3sup
2. 克隆 K3s 自动化部署仓库
git clone https://github.com/addozhang/k3s-cluster-automation.git
cd k3s-cluster-automation
4. 配置环境变量
# 设置虚拟机 IP 列表(主节点在前,工作节点在后)
export HOSTS=(<主节点IP> <工作节点1IP> <工作节点2IP>)
# 设置 SSH 用户名(Azure 虚拟机默认用户名如 'azureuser')
export USER=azureuser
5. 一键部署 K3s 集群
# 部署最小化配置的 K3s 集群(禁用非必要组件)
./setupk3s \
--user $USER \
--key ~/.ssh/id_rsa \
--k3s-version v1.28.13+k3s1 \
--mini
# 可选参数:
# --docker 使用 Docker 替代 containerd
# --no-traefik 仅禁用 Traefik 入口控制器
部署完成后,集群配置会自动保存到 ~/.kube/config
。
三、验证与使用 K3s 集群
1. 查看节点状态
kubectl get nodes -o wide
输出示例:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION
k3s-master Ready control-plane,master 5m v1.28.1 10.0.0.4 <公网IP> Ubuntu 22.04 LTS 5.15.0-1035-azure
k3s-worker-1 Ready <none> 4m v1.28.1 10.0.0.5 <公网IP> Ubuntu 22.04 LTS 5.15.0-1035-azure
k3s-worker-2 Ready <none> 4m v1.28.1 10.0.0.6 <公网IP> Ubuntu 22.04 LTS 5.15.0-1035-azure
2. 查看系统组件
kubectl get pods -A
四、清理资源
1. 销毁 K3s 集群
# 在 k3s-cluster-automation 目录执行
./cleanupk3s
2. 删除 Azure 虚拟机与资源组
# 回到 Terraform 虚拟机目录
cd ../terraform-azure-sample/virtual-machine
# 销毁虚拟机资源
terraform destroy
# 回到资源组目录销毁网络资源
cd ../resource-group
terraform destroy
总结
通过 Terraform 与 k3s-cluster-automation 的结合,我们实现了从基础设施创建到 Kubernetes 集群部署的全自动化流程。整个过程无需手动操作,从开始到完成仅需 10-15 分钟,大幅提升了开发测试效率,尤其适合需要频繁创建与销毁集群的场景。