158 行
4.3 KiB
Markdown
158 行
4.3 KiB
Markdown
# 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`:
|
|
|
|
```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 |
|
|
| `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
|
|
```
|
|
|
|
|