# 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`: ```yaml 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. 设置环境变量 ```bash # 必须 export TAILSCALE_AUTH_KEY="tskey-auth-xxx" # 首次安装 (SSH 加固) export SSH_PASSWORD="your-root-password" ``` ### 3. 执行安装 ```bash 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 ```bash # 安装完成后自动保存到 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`) 自动执行: 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` 环境变量。 ## 常用命令 ```bash # 测试连接 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 ```