5分钟极速搭建K3S单节点集群:开发者的轻量级Kubernetes初体验

当你想学习Kubernetes却对着官方文档里复杂的组件列表和配置步骤望而却步时,K3S就像一位贴心的向导,为你打开容器编排世界的大门。这个由Rancher实验室专为边缘计算和简易部署设计的轻量级发行版,保留了K8S的核心功能,却将安装包缩小到40MB左右,内存占用仅为传统K8S的1/4。更妙的是,它内置了containerd、Flannel网络插件和Traefik入口控制器,让初学者无需纠结组件选型就能获得完整功能。

1. 环境准备与核心概念

在开始之前,我们先理清几个关键点。K3S采用"单二进制"架构,这意味着:

  • All-in-One设计 :kube-apiserver、kube-controller-manager等核心组件被编译进单个二进制文件
  • 简化网络 :默认集成Flannel作为CNI插件,省去网络配置烦恼
  • 内置工具链 :自动包含kubectl、crictl等常用工具

与标准K8S相比,K3S的主要差异体现在:

特性 K8S K3S
安装包大小 ~700MB ~40MB
内存占用 2GB+ 512MB即可运行
默认容器运行时 无默认 containerd
学习曲线 陡峭 平缓

准备一台满足以下条件的机器:

  • 任意Linux发行版或macOS(Windows可通过WSL2运行)
  • 1核CPU/1GB内存(最低配置)
  • 开放6443端口(单节点模式下仅本地访问)

提示:生产环境建议至少2核CPU/4GB内存,本文演示使用个人笔记本即可完成

2. 一键安装Master节点

让我们用最简命令启动集群。打开终端执行:

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

这个魔法般的命令完成了以下操作:

  1. 下载最新稳定版K3S二进制文件
  2. 自动安装为systemd服务并启动
  3. 生成kubeconfig文件于 /etc/rancher/k3s/k3s.yaml
  4. 创建 kubectl 别名指向k3s

安装完成后验证集群状态:

sudo kubectl get nodes
# 应看到类似输出:
# NAME       STATUS   ROLES                  AGE   VERSION
# localhost  Ready    control-plane,master   45s   v1.24.2+k3s2

关键文件位置备忘:

  • 主配置文件: /etc/rancher/k3s/k3s.yaml
  • 服务日志: journalctl -u k3s -f
  • 数据存储: /var/lib/rancher/k3s/

3. 部署你的第一个应用

让我们用经典的Nginx来检验集群。创建 nginx.yaml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30080
  selector:
    app: nginx

应用配置并验证:

kubectl apply -f nginx.yaml
kubectl get pods -o wide
kubectl get svc

访问应用(根据环境选择):

  • Linux/macOS: curl http://localhost:30080
  • 浏览器访问: http://<服务器IP>:30080

4. 日常管理与问题排查

掌握几个高效管理命令:

查看集群信息

kubectl cluster-info
k3s check-config  # 验证系统配置

资源监控

kubectl top nodes  # 需metrics-server组件
kubectl top pods

常见问题处理

  1. 端口冲突解决:
sudo systemctl stop k3s
sudo k3s server --https-listen-port 8443  # 修改API端口
  1. 重置集群:
/usr/local/bin/k3s-uninstall.sh
  1. 查看组件日志:
journalctl -u k3s -f  # Master节点
journalctl -u k3s-agent -f  # Worker节点

性能优化参数

/etc/rancher/k3s/config.yaml 中添加:

write-kubeconfig-mode: "0644"
disable:
  - traefik  # 如果不需要Ingress控制器
node-taint:
  - "CriticalAddonsOnly=true:NoExecute"  # 主节点专用

5. 进阶配置技巧

虽然单节点已能满足学习需求,但了解这些技巧能让你的集群更专业:

使用Docker作为运行时

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

配置私有镜像仓库 创建 /etc/rancher/k3s/registries.yaml

mirrors:
  "myreg.com":
    endpoint:
      - "https://myreg.com:5000"
configs:
  "myreg.com:5000":
    auth:
      username: xxxxxx
      password: xxxxxx

启用Traefik Dashboard 编辑 /var/lib/rancher/k3s/server/manifests/traefik.yaml ,在valuesContent部分添加:

dashboard:
  enabled: true
  domain: "traefik.local"

持久化存储配置 K3S默认提供local-path-provisioner,创建PVC示例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-path-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: local-path
  resources:
    requests:
      storage: 1Gi

我在实际测试中发现,当在树莓派集群上运行K3S时,内存占用可以控制在300MB以下,这对于资源受限的边缘设备特别有价值。有个小技巧是通过 --disable=servicelb 参数禁用内置的LB服务,能进一步减少约50MB内存消耗。

更多推荐