..
2026-02-12 14:55:04 +08:00
2026-02-10 13:21:05 +08:00
2026-02-12 14:55:04 +08:00
2026-02-10 10:25:28 +08:00
2026-02-09 14:03:42 +08:00
2026-02-10 10:25:28 +08:00
2026-02-10 12:20:27 +08:00
2026-02-12 14:55:04 +08:00
K3s Ansible 自动化安装
一键部署 K3s 集群,支持国内镜像加速、Tailscale 组网、SSH 安全加固。
目录结构
ansible/
├── ansible.cfg # Ansible 配置
├── inventory/
│ ├── hosts.yml # 主机清单 ⭐ 需修改
│ └── group_vars/all.yml # 全局变量
├── roles/
│ ├── ssh/ # SSH 安全加固
│ │ ├── tasks/main.yml
│ │ ├── handlers/main.yml
│ │ └── templates/sshd_config.j2
│ ├── common/ # 基础配置 (hostname, sysctl, tailscale)
│ │ ├── tasks/main.yml
│ │ └── handlers/main.yml
│ └── k3s/ # K3s 安装
│ ├── tasks/main.yml
│ └── templates/
│ ├── k3s-server.yaml.j2 # Server 配置 (统一 init/join)
│ ├── k3s-agent.yaml.j2 # Agent 配置
│ └── registries.yaml.j2 # 镜像加速
└── playbooks/
└── site.yml # 完整安装
快速开始
1. 配置主机清单
编辑 inventory/hosts.yml:
masters:
hosts:
master1:
ansible_host: 10.0.0.1
node_hostname: master1
cluster_init: true # 首个节点设为 true
node_region: cn-sh # 区域标签
use_mirror: true # 使用镜像加速
enable_lb: true # 启用 LB
netfilter_mode: "" # 阿里云/华为云设为 nodivert
2. 设置环境变量
# 必须
export TAILSCALE_AUTH_KEY="tskey-auth-xxx"
# 首次安装 (SSH 加固)
export SSH_PASSWORD="your-root-password"
3. 执行安装
cd k3s/ansible
# 方式一: 首次安装 (含 SSH 加固,端口改为 2103,启用密钥认证)
ansible-playbook playbooks/site.yml --tags ssh,common,k3s,status
# 方式二: 常规安装 (已配置 SSH 密钥)
ansible-playbook playbooks/site.yml
# 方式三: 仅安装首个 master
ansible-playbook playbooks/site.yml -l first-master-name
# 方式四: 添加新节点
ansible-playbook playbooks/site.yml -l new-node-name
4. 获取 kubeconfig
# 安装完成后自动保存到 ansible/kubeconfig.yaml
sed -i '' 's/127.0.0.1/k3s.yourdomain.com/g' kubeconfig.yaml
export KUBECONFIG=$(pwd)/kubeconfig.yaml
kubectl get nodes
节点变量
| 变量 | 类型 | 默认值 | 说明 |
|---|---|---|---|
ansible_host |
string | - | 节点 IP |
node_hostname |
string | - | 主机名 |
cluster_init |
bool | false | 首个 master 设为 true |
node_region |
string | - | 区域标签 (cn-sh/hk/us-west) |
use_mirror |
bool | false | 使用镜像加速 |
enable_lb |
bool | - | 启用 K3s LB |
netfilter_mode |
string | "" | Tailscale netfilter: off/nodivert/on |
node_labels |
dict | - | 自定义标签 |
node_taints |
list | - | 节点污点 (格式: key=value:effect) |
环境变量
| 变量 | 必须 | 说明 |
|---|---|---|
TAILSCALE_AUTH_KEY |
✅ | Tailscale Auth Key |
K3S_TOKEN |
单独添加节点时 | 集群 Token (完整安装时自动获取) |
K3S_SERVER_URL |
单独添加节点时 | API Server 地址 (完整安装时自动设置) |
SSH_PASSWORD |
首次安装 | SSH 密码 |
SSH_PUBKEY |
- | SSH 公钥 (默认 ~/.ssh/id_rsa.pub) |
镜像加速
当 use_mirror: true 时自动启用:
- K3s 安装脚本:
rancher-mirror.rancher.cn - 常规容器镜像加速
SSH 安全加固
首次安装时 (--tags ssh) 自动执行:
- 端口改为 2103
- 禁用密码登录
- 启用密钥认证
- 自动添加本地公钥
集群安装流程
Playbook 按以下顺序执行:
- 初始化节点安装: 安装
cluster_init: true的第一个 master 节点 - 动态获取 Token: 从初始化节点读取
/var/lib/rancher/k3s/server/node-token - Token 注入: 将 K3S_TOKEN 和 K3S_SERVER_URL 设置为所有节点的 fact
- 其他 Master 节点: 使用动态获取的 Token 加入集群
- Agent 节点: 使用动态获取的 Token 加入集群
这样在一次性安装整个集群时,无需手动设置 K3S_TOKEN 环境变量。
常用命令
# 测试连接
ansible all -m ping
# 仅运行特定阶段
ansible-playbook playbooks/site.yml --tags common
ansible-playbook playbooks/site.yml --tags k3s
# 指定节点
ansible-playbook playbooks/site.yml -l master1,agent1
# 调试模式
ansible-playbook playbooks/site.yml -vvv
# 检查语法
ansible-playbook playbooks/site.yml --syntax-check