文件
k3s/ansible/README.md
T
2026-02-10 10:25:28 +08:00

4.9 KiB

K3s Ansible 自动化安装

一键部署 K3s 集群,支持国内镜像加速、Tailscale 组网、SSH 安全加固。

目录结构

ansible/
├── ansible.cfg                 # Ansible 配置
├── .ansible-lint               # Lint 规则配置
├── requirements.yml            # Ansible Galaxy 依赖
├── 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"

# 单独添加节点时 (完整安装时自动获取)
export K3S_SERVER_URL="https://10.0.0.1:6443"

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 - 自定义标签
kubelet_reserved string - 资源预留: cpu=500m,memory=512Mi

环境变量

变量 必须 说明
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) 自动执行:

  1. 端口改为 2103
  2. 禁用密码登录
  3. 启用密钥认证
  4. 自动添加本地公钥

集群安装流程

Playbook 按以下顺序执行:

  1. 初始化节点安装: 安装 cluster_init: true 的第一个 master 节点
  2. 动态获取 Token: 从初始化节点读取 /var/lib/rancher/k3s/server/node-token
  3. Token 注入: 将 K3S_TOKEN 和 K3S_SERVER_URL 设置为所有节点的 fact
  4. 其他 Master 节点: 使用动态获取的 Token 加入集群
  5. 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

故障排查

# K3s 状态
systemctl status k3s
journalctl -u k3s -f

# Tailscale 状态
tailscale status

# 获取 Token
cat /var/lib/rancher/k3s/server/node-token