logo

玩转 K3s:轻量级 Kubernetes 的高效部署与实践指南

作者:快去debug2025.10.10 15:45浏览量:54

简介:本文聚焦 K3s 这一轻量级 Kubernetes 发行版,从安装部署、集群管理、应用编排到高可用配置,提供全流程技术指南。通过代码示例与场景分析,帮助开发者快速掌握 K3s 的核心特性与优化技巧,提升容器化应用的开发与运维效率。

玩转 K3s:轻量级 Kubernetes 的高效部署与实践指南

一、K3s 的核心定位与优势解析

K3s 是由 Rancher Labs 开发的轻量级 Kubernetes 发行版,专为资源受限环境(如边缘计算、IoT 设备或开发测试环境)设计。其核心优势体现在以下三方面:

1. 极简架构与资源优化

  • 二进制体积:仅 50MB 左右,相比标准 Kubernetes 的数百 MB 安装包,显著降低存储与传输成本。
  • 内存占用:单节点运行仅需 512MB 内存(推荐 1GB),支持在树莓派等低配设备上部署。
  • 组件精简:移除云厂商依赖组件(如云控制器管理器)、存储驱动等非必要模块,保留核心调度与编排能力。

2. 快速部署与单节点支持

  • 单命令安装:通过 curl -sfL https://get.k3s.io | sh - 即可完成主节点部署,自动生成配置文件与 Token。
  • 嵌入式数据库:默认使用 SQLite 存储集群状态,避免外部数据库依赖(生产环境可替换为 etcd 或 MySQL)。
  • 混合节点支持:同时支持 Agent(工作节点)与 Server(控制平面)角色,简化单节点开发环境搭建。

3. 生产级特性兼容

  • 支持 Kubernetes 原生 API:完全兼容 Pod、Deployment、Service 等标准资源,无缝对接 Helm、Kustomize 等工具。
  • 高可用模式:通过外部 SQL 数据库(如 MySQL)或嵌入式 etcd 实现多主节点集群,保障业务连续性。
  • 安全加固:内置 TLS 证书管理、RBAC 权限控制与网络策略支持,满足企业级安全需求。

二、K3s 安装与集群初始化实战

1. 单节点快速启动

  1. # 安装 K3s 主节点(自动包含 Server 与 Agent 角色)
  2. curl -sfL https://get.k3s.io | sh -
  3. # 验证节点状态
  4. sudo k3s kubectl get nodes
  5. # 输出示例:
  6. # NAME STATUS ROLES AGE VERSION
  7. # k3s-node Ready control-plane,master 5m v1.28.4+k3s1
  • 关键文件路径
    • 配置文件:/etc/rancher/k3s/k3s.yaml(需通过 sudo 访问)
    • Token(用于添加工作节点):/var/lib/rancher/k3s/server/node-token

2. 多节点集群构建

2.1 主节点初始化

  1. # 生成 Token 并记录(替换为自定义 Token)
  2. TOKEN="my-secret-token"
  3. curl -sfL https://get.k3s.io | K3S_TOKEN=$TOKEN sh -s -- --write-kubeconfig-mode 644
  • --write-kubeconfig-mode 644:允许当前用户直接读取 kubeconfig,避免权限问题。

2.2 工作节点加入

  1. # 在工作节点执行(替换为主节点 IP 与 Token)
  2. curl -sfL https://get.k3s.io | K3S_URL=https://<MASTER_IP>:6443 K3S_TOKEN=$TOKEN sh -
  • 验证集群状态
    1. sudo k3s kubectl get nodes
    2. # 预期输出:主节点与工作节点均显示 Ready 状态

3. 配置持久化存储(生产环境必备)

3.1 使用外部 MySQL 数据库

  1. # /etc/rancher/k3s/config.yaml(主节点配置)
  2. datastore-endpoint: "mysql://username:password@tcp(db-host:3306)/k3s"
  • 初始化前需创建数据库
    1. CREATE DATABASE k3s CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3.2 启用 etcd 高可用模式

  1. # 主节点启动时指定 etcd 存储
  2. curl -sfL https://get.k3s.io | sh -s -- --cluster-init --datastore-endpoint="etcd://<ETCD_ENDPOINTS>"
  • ETCD 集群部署:建议使用 3 或 5 个节点,通过静态 Pod 或独立服务运行。

三、K3s 核心功能深度应用

1. 资源管理与调度优化

1.1 节点标签与亲和性调度

  1. # 示例:将 Pod 调度到具备 GPU 的节点
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: gpu-app
  6. spec:
  7. template:
  8. spec:
  9. nodeSelector:
  10. accelerator: nvidia-tesla-t4
  11. containers:
  12. - name: gpu-worker
  13. image: nvidia/cuda:11.0-base
  • 添加节点标签
    1. sudo k3s kubectl label nodes <NODE_NAME> accelerator=nvidia-tesla-t4

1.2 资源配额限制

  1. # 限制命名空间的 CPU 与内存使用
  2. apiVersion: v1
  3. kind: ResourceQuota
  4. metadata:
  5. name: mem-cpu-quota
  6. spec:
  7. hard:
  8. requests.cpu: "1"
  9. requests.memory: 1Gi
  10. limits.cpu: "2"
  11. limits.memory: 2Gi

2. 网络与存储方案选型

2.1 网络插件对比

插件 特点 适用场景
Flannel 默认集成,VXLAN/IPSEC 封装 简单内网环境
Calico 支持网络策略,BGP 路由 需要精细流量控制的生产环境
Canal Flannel + Calico 网络策略 兼顾性能与安全性
  • 切换网络插件(需在初始化前配置):
    1. # /etc/rancher/k3s/config.yaml
    2. flannel-backend: "none" # 禁用默认 Flannel
    3. # 后续通过 Helm 安装 Calico

2.2 存储类配置示例

  1. # 使用 Longhorn 作为持久化存储
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5. name: longhorn
  6. provisioner: driver.longhorn.io
  7. allowVolumeExpansion: true
  8. reclaimPolicy: Retain

3. 监控与日志体系搭建

3.1 Prometheus + Grafana 监控

  1. # 通过 Helm 部署监控栈
  2. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  3. helm install prometheus prometheus-community/kube-prometheus-stack
  • 关键指标:节点 CPU/内存使用率、Pod 重启次数、API Server 延迟。

3.2 日志集中管理(EFK 方案)

  1. # Filebeat DaemonSet 配置片段
  2. apiVersion: apps/v1
  3. kind: DaemonSet
  4. metadata:
  5. name: filebeat
  6. spec:
  7. template:
  8. spec:
  9. containers:
  10. - name: filebeat
  11. image: docker.elastic.co/beats/filebeat:7.12.0
  12. volumeMounts:
  13. - name: varlog
  14. mountPath: /var/log
  15. - name: varlibdockercontainers
  16. mountPath: /var/lib/docker/containers
  17. readOnly: true

四、K3s 高级场景与故障排查

1. 离线环境部署方案

  1. 打包依赖镜像
    1. # 导出 K3s 所需镜像
    2. sudo k3s crictl images --output json | jq -r '.[] | .repoTags[0]' > images.txt
    3. sudo docker save $(cat images.txt) -o k3s-images.tar
  2. 在离线节点加载镜像
    1. sudo docker load -i k3s-images.tar
  3. 使用本地注册表
    1. # /etc/rancher/k3s/registries.yaml
    2. mirrors:
    3. docker.io:
    4. endpoint:
    5. - "http://<LOCAL_REGISTRY>:5000"

2. 常见问题处理

2.1 节点状态为 NotReady

  • 检查原因
    1. sudo k3s kubectl describe node <NODE_NAME>
    2. # 查看 Conditions 中的 Ready 状态详情
  • 常见解决方案
    • 修复网络连接(确保 6443 端口互通)
    • 重启 kubelet 服务:sudo systemctl restart k3s
    • 检查磁盘空间:df -h /var/lib/rancher/k3s

2.2 Pod 调度失败

  • 排查步骤
    1. 检查资源是否充足:sudo k3s kubectl describe nodes | grep -A 10 Allocated
    2. 查看事件日志:sudo k3s kubectl get events --sort-by='.metadata.creationTimestamp'
    3. 验证节点标签与 Pod 亲和性规则是否匹配。

五、总结与最佳实践建议

  1. 开发环境:优先使用单节点 K3s + SQLite,配合 Skaffold 实现快速迭代。
  2. 边缘计算:通过 --disable 参数禁用非必要组件(如 traefikservicelb),减少资源占用。
  3. 生产环境
    • 启用高可用模式(etcd 或外部数据库)
    • 配置资源配额与网络策略
    • 集成监控与告警系统
  4. 升级策略:使用 k3s install --disable-components traefik 逐步替换组件,避免全量升级风险。

通过合理配置与优化,K3s 能够在资源受限环境下提供接近标准 Kubernetes 的完整功能,成为边缘计算、CI/CD 管道与小型团队的理想选择。

相关文章推荐

发表评论

活动