logo

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

作者:暴富20212025.09.23 14:23浏览量:0

简介:本文深入探讨 K3s 的核心优势、部署策略及高级应用场景,从基础安装到高可用集群构建,结合代码示例与实操建议,助力开发者与运维团队高效玩转轻量级 Kubernetes。

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

引言:为什么选择 K3s?

在 Kubernetes 生态中,K3s 以其轻量化、易部署、低资源消耗的特性脱颖而出。作为 CNCF 认证的 Kubernetes 发行版,K3s 专为边缘计算、IoT 和资源受限环境设计,去除了非核心组件(如 etcd、云控制器),将核心二进制文件压缩至不足 100MB。对于开发者而言,K3s 提供了“开箱即用”的 Kubernetes 体验,无需复杂配置即可快速验证应用;对于企业用户,它降低了运维成本,支持在树莓派、虚拟机甚至物理机上快速构建集群。

一、K3s 的核心优势解析

1.1 极简架构,资源友好

K3s 采用嵌入式 SQLite 数据库替代 etcd,将控制平面组件(API Server、Scheduler、Controller Manager)合并为单个进程,显著减少内存占用。实测数据显示,单节点 K3s 仅需 512MB 内存即可运行,相比标准 Kubernetes 节省 60% 以上资源。这一特性使其成为边缘设备、CI/CD 流水线或开发测试环境的理想选择。

1.2 一键安装,快速上手

K3s 的安装命令简洁到令人惊叹:

  1. curl -sfL https://get.k3s.io | sh -

此命令会自动完成以下操作:

  • 下载并验证 K3s 二进制文件
  • 配置为 systemd 服务并启动
  • 生成 kubeconfig 文件(默认路径:/etc/rancher/k3s/k3s.yaml

安装完成后,通过 kubectl get nodes 即可验证集群状态,整个过程不超过 1 分钟。

1.3 高可用支持,企业级扩展

尽管 K3s 默认使用 SQLite,但它也支持外部数据库(如 MySQL、PostgreSQL)实现高可用。通过配置 --datastore 参数,可将多个 K3s 服务器节点组成集群,数据通过外部数据库同步,确保控制平面无单点故障。例如:

  1. # 节点1(主节点)
  2. k3s server --datastore-endpoint="mysql://user:pass@tcp(db-host:3306)/k3s"
  3. # 节点2(从节点)
  4. k3s server --server https://<主节点IP>:6443 --token <共享令牌> --datastore-endpoint="mysql://user:pass@tcp(db-host:3306)/k3s"

二、K3s 部署实践:从单机到集群

2.1 单机模式:开发测试利器

对于本地开发,单机 K3s 是最佳选择。安装后,可通过以下步骤快速部署应用:

  1. # 1. 配置 kubectl 使用 K3s 的 kubeconfig
  2. export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
  3. # 2. 部署一个 Nginx Pod
  4. kubectl apply -f - <<EOF
  5. apiVersion: v1
  6. kind: Pod
  7. metadata:
  8. name: nginx
  9. spec:
  10. containers:
  11. - name: nginx
  12. image: nginx:alpine
  13. ports:
  14. - containerPort: 80
  15. EOF
  16. # 3. 验证部署
  17. kubectl port-forward nginx 8080:80 &
  18. curl http://localhost:8080 # 应返回 Nginx 欢迎页

2.2 多节点集群:生产环境部署

构建多节点集群时,需注意以下关键步骤:

  1. 主节点初始化

    1. k3s server --tls-san <主节点IP> --node-name master

    --tls-san 参数确保其他节点可通过 IP 或域名访问 API Server。

  2. 从节点加入
    在主节点执行 sudo cat /var/lib/rancher/k3s/server/node-token 获取令牌,然后在从节点运行:

    1. k3s agent --server https://<主节点IP>:6443 --token <令牌> --node-name worker1
  3. 验证集群状态

    1. kubectl get nodes
    2. # 输出应显示所有节点为 Ready 状态

2.3 持久化存储配置

K3s 默认使用本地存储,但生产环境需配置持久化存储方案。以 Longhorn 为例:

  1. # 1. 添加 Longhorn Helm 仓库
  2. helm repo add longhorn https://charts.longhorn.io
  3. # 2. 部署 Longhorn
  4. kubectl create namespace longhorn-system
  5. helm install longhorn longhorn/longhorn --namespace longhorn-system
  6. # 3. 创建使用 Longhorn 的 PVC
  7. kubectl apply -f - <<EOF
  8. apiVersion: v1
  9. kind: PersistentVolumeClaim
  10. metadata:
  11. name: mypvc
  12. spec:
  13. accessModes:
  14. - ReadWriteOnce
  15. storageClassName: longhorn
  16. resources:
  17. requests:
  18. storage: 10Gi
  19. EOF

三、K3s 高级玩法:解锁边缘计算潜力

3.1 离线环境部署

在无互联网访问的环境中,可通过以下步骤预下载镜像:

  1. # 1. 在有网络的机器上拉取镜像
  2. docker pull rancher/k3s:v1.25.3
  3. docker save rancher/k3s:v1.25.3 > k3s.tar
  4. # 2. 传输到目标机器并加载
  5. docker load -i k3s.tar
  6. # 3. 使用 --image-path 参数指定镜像路径
  7. k3s server --image-path /path/to/images

3.2 自定义 Traefik Ingress

K3s 默认集成 Traefik 作为 Ingress Controller,可通过 ConfigMap 自定义配置:

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: traefik-config
  5. namespace: kube-system
  6. data:
  7. traefik.toml: |
  8. [entryPoints]
  9. [entryPoints.web]
  10. address = ":80"
  11. [entryPoints.websecure]
  12. address = ":443"
  13. [providers]
  14. [providers.kubernetesIngress]
  15. ingressClass = "traefik"

应用后,Traefik 将根据配置处理 Ingress 规则。

3.3 监控与日志方案

结合 Prometheus 和 Grafana 实现监控:

  1. # 1. 部署 Prometheus Operator
  2. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml
  3. # 2. 配置 K3s 指标端点
  4. # 修改 /etc/rancher/k3s/k3s.yaml,在 server 启动参数中添加:
  5. # --kubelet-arg=feature-gates=MetricsServer=true
  6. # --kubelet-arg=container-log-max-size=10Mi
  7. # --kubelet-arg=container-log-max-files=5
  8. # 3. 部署 Grafana
  9. helm install grafana grafana/grafana --set persistence.enabled=true

四、常见问题与优化建议

4.1 资源不足时的调优

  • 限制 Pod 资源:通过 LimitRangeResourceQuota 防止资源耗尽。
  • 调整 K3s 参数:如 --kubelet-arg=eviction-hard=memory.available<500Mi 设置内存驱逐阈值。

4.2 网络插件选择

K3s 默认使用 Flannel(VXLAN 模式),如需高性能可切换为 Calico:

  1. k3s server --flannel-backend=none
  2. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

4.3 升级与回滚策略

升级 K3s 时,建议先备份数据并测试:

  1. # 升级
  2. k3s-killall.sh
  3. curl -sfL https://get.k3s.io | sh -s - --server-url https://<主节点IP>:6443
  4. # 回滚(需提前保存旧版本二进制文件)
  5. systemctl stop k3s
  6. cp /path/to/k3s-old /usr/local/bin/k3s
  7. systemctl start k3s

结论:K3s 的适用场景与未来展望

K3s 的轻量化特性使其在边缘计算、CI/CD 流水线、开发测试环境中表现卓越。随着 Kubernetes 生态向轻量化发展,K3s 有望成为更多场景的首选。对于开发者,建议从单机模式入手,逐步探索集群部署与高级功能;对于企业用户,需重点关注高可用方案与持久化存储配置。未来,K3s 可能进一步集成 Serverless 能力,成为云原生时代的“瑞士军刀”。

相关文章推荐

发表评论