自动配置K3s集群的脚本

wen 实用脚本 6

本文目录导读:

自动配置K3s集群的脚本

  1. 目录导读
  2. 为什么需要自动配置K3s集群?
  3. K3s集群自动配置脚本的设计原理
  4. 实战脚本编写与部署(含完整代码)
  5. 常见问题与优化策略(FAQ)
  6. 推荐的最佳实践与安全注意事项
  7. 从手动到自动的进化

目录导读

  1. 为什么需要自动配置K3s集群?
    1.1 传统手工部署的痛点
    1.2 自动化的核心价值

  2. K3s集群自动配置脚本的设计原理
    2.1 脚本的核心模块拆解
    2.2 关键参数与环境检测逻辑

  3. 实战脚本编写与部署(含完整代码)
    3.1 前置环境准备
    3.2 主节点自动化脚本
    3.3 工作节点加入脚本
    3.4 验证集群状态

  4. 常见问题与优化策略(FAQ)
    4.1 问题一:节点注册失败怎么办?
    4.2 问题二:如何支持离线或代理环境?
    4.3 问题三:如何调整集群资源参数?

  5. 推荐的最佳实践与安全注意事项

  6. 从手动到自动的进化


为什么需要自动配置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 -yyum install
安装K3s 下载并运行K3s安装脚本 curl -sfL https://get.k3s.io | sh -s -
主节点配置 生成token、配置server参数(如--cluster-cidr 环境变量 K3S_TOKENINSTALL_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

若输出显示所有节点Readycoredns等系统组件状态为Running,则部署成功。

问:脚本中使用了国内镜像地址,如果环境在国外或需要官方源怎么办?
答:删除export INSTALL_K3S_MIRROR=cn行,并改用curl -sfL https://get.k3s.io即可。


常见问题与优化策略(FAQ)

1 问题一:节点注册失败怎么办?

  • 现象:工作节点加入后状态为NotReady
  • 排查步骤
    1. 检查主节点防火墙是否开放端口:sudo ufw status(Ubuntu)或 firewall-cmd --list-all(CentOS)。
    2. 确认工作节点DNS能解析主节点主机名。
    3. 查看journalctl -u k3s-agent -fk3s kubectl describe node <node-name>

2 问题二:如何支持离线或代理环境?

  • 方案A(离线包)
    1. 在一台联网主机下载K3s二进制及镜像:
      wget https://github.com/k3s-io/k3s/releases/download/v1.28.8  /k3s-airgap-images-amd64.tar.gz
    2. 将文件传输至目标节点,执行sudo mkdir -p /var/lib/rancher/k3s/agent/images/ && sudo cp k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/
  • 方案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"

推荐的最佳实践与安全注意事项

  1. Token管理:使用k3s token create生成临时加入Token,避免长期暴露主节点Token。
  2. 证书管理:默认证书有效期1年,可通过k3s certificate rotate手动轮换。
  3. 存储选择:生产环境建议使用外部存储(如Longhorn或Rook),而非默认的local-path-provisioner
  4. 日志监控:推荐集成Prometheus + Grafana,使用helm install prometheus prometheus-community/kube-prometheus-stack
  5. 备份脚本:定期备份/var/lib/rancher/k3s/server/db/下的etcd数据。

问:K3s自动配置脚本是否支持非root用户执行?
答:K3s安装需要root权限,但可以通过sudo提权执行,建议将脚本分为“安装”和“配置”两部分,安装部分用sudo,配置部分以普通用户权限执行。


从手动到自动的进化

自动配置K3s集群的脚本不仅减少了99%的人工介入,更将部署流程标准化、可版本化,本文提供的脚本可直接应用于开发测试环境,生产环境需根据网络、安全策略做适当调整,自动化不是目的,而是手段——目标是快速迭代与稳定运行。

下一步行动:将脚本纳入Ansible Playbook或Jenkins流水线,实现从“按需部署”到“一键重建集群”的质变。

抱歉,评论功能暂时关闭!