Azure 云上 10 分钟全自动部署 K3s 集群实战

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 分钟,大幅提升了开发测试效率,尤其适合需要频繁创建与销毁集群的场景。

(转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)

comments powered by Disqus