本文目录导读:

目录导读
-
为什么需要自动配置K3s集群?
1.1 传统手工部署的痛点
1.2 自动化的核心价值 -
K3s集群自动配置脚本的设计原理
2.1 脚本的核心模块拆解
2.2 关键参数与环境检测逻辑 -
实战脚本编写与部署(含完整代码)
3.1 前置环境准备
3.2 主节点自动化脚本
3.3 工作节点加入脚本
3.4 验证集群状态 -
常见问题与优化策略(FAQ)
4.1 问题一:节点注册失败怎么办?
4.2 问题二:如何支持离线或代理环境?
4.3 问题三:如何调整集群资源参数? -
推荐的最佳实践与安全注意事项
-
从手动到自动的进化
为什么需要自动配置K3s集群?
1 传统手工部署的痛点
- 重复劳动:每部署一个节点需要手动安装kubelet、配置TLS证书、设置网络插件(如flannel或Cilium)。
- 错误率高:环境依赖(如iptables版本、内核参数)不一致导致失败。
- 难以扩展:10台以上节点时,手动配置耗时且易遗漏关键步骤。
2 自动化的核心价值
- 一键部署:从裸机到集群就绪,仅需一个脚本。
- 版本一致性:所有节点使用相同K3s版本、配置模板。
- 可重复性:脚本可纳入CI/CD管道,实现基础设施即代码。
问:K3s本身已经很轻量,为什么还需要自动化?
答:轻量不等于零配置,K3s解决了安装包大小问题,但节点间网络规划、存储后端选择(如local-path-provisioner)、TLS证书续期等仍需手动操作,自动化脚本能将这些“琐碎”环节标准化。
K3s集群自动配置脚本的设计原理
1 脚本的核心模块拆解
一个优秀的K3s自动配置脚本应包含以下模块:
| 模块名称 | 功能描述 | 典型实现方式 |
|---|---|---|
| 环境检测 | 检查系统版本、CPU架构、防火墙状态 | uname -m, systemctl status firewalld |
| 依赖安装 | 安装conntrack、socat等K3s依赖包 | apt-get install -y 或 yum install |
| 安装K3s | 下载并运行K3s安装脚本 | curl -sfL https://get.k3s.io | sh -s - |
| 主节点配置 | 生成token、配置server参数(如--cluster-cidr) |
环境变量 K3S_TOKEN,INSTALL_K3S_EXEC |
| 工作节点加入 | 利用主节点token自动注册 | curl -sfL https://get.k3s.io | K3S_URL=https://SERVER_IP:6443 K3S_TOKEN=xxx sh - |
| 状态验证 | 校验node、pod状态是否Ready | kubectl get nodes, kubectl get pod -n kube-system |
2 关键参数与环境检测逻辑
- 检测IP可达性:主节点需提供稳定IP,工作节点需能ping通此IP。
- 防火墙规则:默认K3s需要开放端口:6443(API Server)、8472(Flannel VXLAN)、10250(kubelet metrics)。
- Swap关闭:K3s要求节点
swap必须为0,脚本需自动执行swapoff -a并注释/etc/fstab。
问:为什么脚本中要特别处理Swap?
答:Kubernetes要求节点物理内存充足,swap会导致Pod调度不准确,K3s继承此要求,若未关闭则kubelet报错无法启动。
实战脚本编写与部署(含完整代码)
1 前置环境准备
- 3台Ubuntu 22.04或CentOS 8+虚拟机(最低配置2核4G)。
- 所有节点已设置静态IP(或DHCP保留)。
- SSH免密登录(非必需,但便于批量执行)。
2 主节点自动化脚本
以下为简化版脚本(已过滤敏感token):
#!/bin/bash
# k3s_master_setup.sh - 自动配置K3s主节点
# 1. 系统环境准备
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
modprobe overlay && modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
# 2. 安装K3s(使用国内加速镜像)
export INSTALL_K3S_MIRROR=cn
export K3S_TOKEN=$(uuidgen | tr -d '-')
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | sh -s - server \
--cluster-cidr=10.42.0.0/16 \
--service-cidr=10.43.0.0/16 \
--write-kubeconfig-mode 644
# 3. 输出加入信息
echo "主节点安装完成!"
echo "工作节点加入命令参考:"
echo "curl -sfL https://get.k3s.io | K3S_URL=https://$(hostname -I | awk '{print $1}'):6443 K3S_TOKEN=$K3S_TOKEN sh -"
3 工作节点加入脚本
#!/bin/bash
# k3s_worker_join.sh - 自动加入工作节点
read -p "请输入主节点IP: " SERVER_IP
read -p "请输入主节点Token: " K3S_TOKEN
# 环境准备
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab
export INSTALL_K3S_MIRROR=cn
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | sh -s - agent \
--server https://${SERVER_IP}:6443 \
--token ${K3S_TOKEN}
4 验证集群状态
kubectl get nodes -o wide kubectl get pods --all-namespaces
若输出显示所有节点Ready且coredns等系统组件状态为Running,则部署成功。
问:脚本中使用了国内镜像地址,如果环境在国外或需要官方源怎么办?
答:删除export INSTALL_K3S_MIRROR=cn行,并改用curl -sfL https://get.k3s.io即可。
常见问题与优化策略(FAQ)
1 问题一:节点注册失败怎么办?
- 现象:工作节点加入后状态为
NotReady。 - 排查步骤:
- 检查主节点防火墙是否开放端口:
sudo ufw status(Ubuntu)或firewall-cmd --list-all(CentOS)。 - 确认工作节点DNS能解析主节点主机名。
- 查看
journalctl -u k3s-agent -f或k3s kubectl describe node <node-name>。
- 检查主节点防火墙是否开放端口:
2 问题二:如何支持离线或代理环境?
- 方案A(离线包):
- 在一台联网主机下载K3s二进制及镜像:
wget https://github.com/k3s-io/k3s/releases/download/v1.28.8 /k3s-airgap-images-amd64.tar.gz
- 将文件传输至目标节点,执行
sudo mkdir -p /var/lib/rancher/k3s/agent/images/ && sudo cp k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/。
- 在一台联网主机下载K3s二进制及镜像:
- 方案B(代理):
在k3s-install.sh前设置环境变量:export HTTP_PROXY= http://proxy.example.com:8080。
3 问题三:如何调整集群资源参数?
- 修改kubelet预留:在安装命令中添加
--kubelet-arg system-reserved=cpu=500m,memory=512Mi。 - 调整Pod数量上限:
export INSTALL_K3S_EXEC="--kubelet-arg max-pods=50"。
推荐的最佳实践与安全注意事项
- Token管理:使用
k3s token create生成临时加入Token,避免长期暴露主节点Token。 - 证书管理:默认证书有效期1年,可通过
k3s certificate rotate手动轮换。 - 存储选择:生产环境建议使用外部存储(如Longhorn或Rook),而非默认的
local-path-provisioner。 - 日志监控:推荐集成Prometheus + Grafana,使用
helm install prometheus prometheus-community/kube-prometheus-stack。 - 备份脚本:定期备份
/var/lib/rancher/k3s/server/db/下的etcd数据。
问:K3s自动配置脚本是否支持非root用户执行?
答:K3s安装需要root权限,但可以通过sudo提权执行,建议将脚本分为“安装”和“配置”两部分,安装部分用sudo,配置部分以普通用户权限执行。
从手动到自动的进化
自动配置K3s集群的脚本不仅减少了99%的人工介入,更将部署流程标准化、可版本化,本文提供的脚本可直接应用于开发测试环境,生产环境需根据网络、安全策略做适当调整,自动化不是目的,而是手段——目标是快速迭代与稳定运行。
下一步行动:将脚本纳入Ansible Playbook或Jenkins流水线,实现从“按需部署”到“一键重建集群”的质变。