简介:本文聚焦 K3s 这一轻量级 Kubernetes 发行版,从安装部署、集群管理、应用编排到高可用配置,提供全流程技术指南。通过代码示例与场景分析,帮助开发者快速掌握 K3s 的核心特性与优化技巧,提升容器化应用的开发与运维效率。
K3s 是由 Rancher Labs 开发的轻量级 Kubernetes 发行版,专为资源受限环境(如边缘计算、IoT 设备或开发测试环境)设计。其核心优势体现在以下三方面:
curl -sfL https://get.k3s.io | sh - 即可完成主节点部署,自动生成配置文件与 Token。
# 安装 K3s 主节点(自动包含 Server 与 Agent 角色)curl -sfL https://get.k3s.io | sh -# 验证节点状态sudo k3s kubectl get nodes# 输出示例:# NAME STATUS ROLES AGE VERSION# k3s-node Ready control-plane,master 5m v1.28.4+k3s1
/etc/rancher/k3s/k3s.yaml(需通过 sudo 访问)/var/lib/rancher/k3s/server/node-token
# 生成 Token 并记录(替换为自定义 Token)TOKEN="my-secret-token"curl -sfL https://get.k3s.io | K3S_TOKEN=$TOKEN sh -s -- --write-kubeconfig-mode 644
--write-kubeconfig-mode 644:允许当前用户直接读取 kubeconfig,避免权限问题。
# 在工作节点执行(替换为主节点 IP 与 Token)curl -sfL https://get.k3s.io | K3S_URL=https://<MASTER_IP>:6443 K3S_TOKEN=$TOKEN sh -
sudo k3s kubectl get nodes# 预期输出:主节点与工作节点均显示 Ready 状态
# /etc/rancher/k3s/config.yaml(主节点配置)datastore-endpoint: "mysql://username:password@tcp(db-host:3306)/k3s"
CREATE DATABASE k3s CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 主节点启动时指定 etcd 存储curl -sfL https://get.k3s.io | sh -s -- --cluster-init --datastore-endpoint="etcd://<ETCD_ENDPOINTS>"
# 示例:将 Pod 调度到具备 GPU 的节点apiVersion: apps/v1kind: Deploymentmetadata:name: gpu-appspec:template:spec:nodeSelector:accelerator: nvidia-tesla-t4containers:- name: gpu-workerimage: nvidia/cuda:11.0-base
sudo k3s kubectl label nodes <NODE_NAME> accelerator=nvidia-tesla-t4
# 限制命名空间的 CPU 与内存使用apiVersion: v1kind: ResourceQuotametadata:name: mem-cpu-quotaspec:hard:requests.cpu: "1"requests.memory: 1Gilimits.cpu: "2"limits.memory: 2Gi
| 插件 | 特点 | 适用场景 |
|---|---|---|
| Flannel | 默认集成,VXLAN/IPSEC 封装 | 简单内网环境 |
| Calico | 支持网络策略,BGP 路由 | 需要精细流量控制的生产环境 |
| Canal | Flannel + Calico 网络策略 | 兼顾性能与安全性 |
# /etc/rancher/k3s/config.yamlflannel-backend: "none" # 禁用默认 Flannel# 后续通过 Helm 安装 Calico
# 使用 Longhorn 作为持久化存储apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: longhornprovisioner: driver.longhorn.ioallowVolumeExpansion: truereclaimPolicy: Retain
# 通过 Helm 部署监控栈helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm install prometheus prometheus-community/kube-prometheus-stack
# Filebeat DaemonSet 配置片段apiVersion: apps/v1kind: DaemonSetmetadata:name: filebeatspec:template:spec:containers:- name: filebeatimage: docker.elastic.co/beats/filebeat:7.12.0volumeMounts:- name: varlogmountPath: /var/log- name: varlibdockercontainersmountPath: /var/lib/docker/containersreadOnly: true
# 导出 K3s 所需镜像sudo k3s crictl images --output json | jq -r '.[] | .repoTags[0]' > images.txtsudo docker save $(cat images.txt) -o k3s-images.tar
sudo docker load -i k3s-images.tar
# /etc/rancher/k3s/registries.yamlmirrors:docker.io:endpoint:- "http://<LOCAL_REGISTRY>:5000"
sudo k3s kubectl describe node <NODE_NAME># 查看 Conditions 中的 Ready 状态详情
sudo systemctl restart k3sdf -h /var/lib/rancher/k3ssudo k3s kubectl describe nodes | grep -A 10 Allocatedsudo k3s kubectl get events --sort-by='.metadata.creationTimestamp'--disable 参数禁用非必要组件(如 traefik、servicelb),减少资源占用。k3s install --disable-components traefik 逐步替换组件,避免全量升级风险。通过合理配置与优化,K3s 能够在资源受限环境下提供接近标准 Kubernetes 的完整功能,成为边缘计算、CI/CD 管道与小型团队的理想选择。