1. 概述

Kubernetes(简称 K8s)是一个可移植的开源平台,用于管理容器化的工作负载和服务。它能够编排和管理集群中的应用 Pod,实现诸如零停机部署、容器自愈等高效运维任务。然而,K8s 在本地开发或资源受限的环境中使用成本较高。

如果我们希望在嵌入式系统中使用 Kubernetes,或者想快速搭建一个本地 Kubernetes 集群,K3s 是一个非常合适的选择。

K3s 是一个轻量级的 Kubernetes 发行版,专为资源受限的环境设计。本文将介绍 K3s 的核心特性,并演示如何搭建一个简单的集群。

2. K3s:轻量级的 Kubernetes

K3s 是由 Rancher Labs 维护的 CNCF 沙盒项目,通过简化 Kubernetes 的组件和依赖,实现了轻量化的部署。

K3s 的轻量化特性

  • 单文件二进制部署,外部依赖极少
  • 硬件要求低,内存占用小
  • 支持单节点部署,也支持高可用部署(需外部数据库)

K3s 将标准 Kubernetes 组件打包成一个不到 100MB 的二进制文件,去除了不必要的驱动、可选卷插件和第三方云集成组件。

尽管如此,K3s 依然保留了 Kubernetes 的核心功能,例如:

  • 支持 CoreDNS 和 Ingress 控制器
  • 内置 SQLite 数据库存储集群信息
  • 默认使用 Flannel 作为 CNI 插件

K3s 可在至少 512MB RAM(推荐 1GB)和 1 个 CPU 的 Linux 系统上运行。虽然它是 Kubernetes 的简化版,但其核心架构依然保留了 Master 和 Worker 节点的结构。

此外,K3s 支持与 AWS、GCP 等云厂商集成,只需通过插件即可扩展功能。

3. 安装与配置

3.1 安装方式

K3s 的安装非常简单,推荐使用官方脚本一键安装:

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

该命令会下载并运行 K3s 服务。你也可以手动下载发行包安装。

如需自定义安装,例如禁用默认的 Flannel CNI 插件:

$ curl -sfL https://get.k3s.io | sh -s - --flannel-backend none

或使用环境变量方式:

$ INSTALL_K3S_EXEC="--flannel-backend none" k3s server

3.2 集群访问

K3s 默认将配置文件生成在 /etc/rancher/k3s/k3s.yaml,你可以通过设置环境变量使用该配置:

$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

或者复制到 ~/.kube/config

$ mkdir -p ~/.kube
$ sudo k3s kubectl config view --raw | tee ~/.kube/config
$ chmod 600 ~/.kube/config

查看节点状态:

$ kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
<cluster-name>   Ready    control-plane,master   4d3h   v1.25.6+k3s1

查看所有 Pod:

$ kubectl get pods --all-namespaces
NAMESPACE              NAME                                         READY   STATUS             RESTARTS         AGE
kube-system            helm-install-traefik-crd-6v28l               0/1     Completed          0                4d2h
...

默认组件包括:

✅ Traefik(Ingress 控制器)
✅ CoreDNS(集群 DNS)
✅ Local Path Provisioner(本地存储供给)
✅ Helm(用于组件管理)

3.3 添加节点

在其他节点上执行以下命令加入集群:

$ curl -sfL https://get.k3s.io | K3S_URL=https://<node-host>:6443 K3S_TOKEN=mynodetoken sh -

Token 可在主节点获取:

$ cat /var/lib/rancher/k3s/server/node-token

节点加入后,Master 会自动识别并调度任务。

4. 示例:部署 Nginx 集群

创建部署

$ kubectl create deployment nginx --image=nginx --port=80 --replicas=3

查看 Pod 状态:

$ kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
nginx-ff6774dc6-ntxv6   1/1     Running   0          17s
...

创建 Service

$ kubectl create service clusterip nginx --tcp=80:80

查看 Service 详情:

$ kubectl describe service nginx
Name:              nginx
Namespace:         default
Labels:            app=nginx
Annotations:       <none>
Selector:          app=nginx
Type:              ClusterIP
IP:                10.43.238.194
Port:              80-80  80/TCP
TargetPort:        80/TCP
Endpoints:         10.42.0.10:80,10.42.0.11:80,10.42.0.9:80

创建 Ingress

创建 nginx-ingress.yaml 文件:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80

应用配置:

$ kubectl apply -f nginx-ingress.yaml

查看 Ingress 状态:

$ kubectl describe ingress nginx
Name:             nginx
Address:          192.168.1.103
Rules:
  Host        Path  Backends
  ----        ----  --------
  *           
              /   nginx:80 (10.42.0.10:80,10.42.0.11:80,10.42.0.9:80)
Annotations:  ingress.kubernetes.io/ssl-redirect: false

现在可以通过浏览器访问 http://192.168.1.103 查看 Nginx 页面。

5. K3s 与 K8s 的区别

特性 K3s K8s
包大小 <100MB,单文件二进制 多组件分布,体积较大
启动速度 秒级启动 启动较慢
架构 单进程运行多个组件 多进程,组件独立运行
支持架构 支持 ARM、x86 等多种架构 主要支持 x86
网络插件 默认 Flannel 支持多种 CNI 插件
存储插件 默认 Local Path Provisioner 支持多种存储插件
高可用 支持但需外部数据库 原生支持 ETCD 高可用
适用场景 本地开发、边缘计算、CI/CD 测试 生产环境、大规模集群

K3s 优势: 轻量、快速、资源消耗低、适合边缘和测试环境
K3s 劣势: 缺乏企业级特性,高可用需额外配置

6. 总结

K3s 是一个轻量级的 Kubernetes 发行版,适用于资源有限的环境,如本地开发、嵌入式设备或 CI/CD 流水线测试。它保留了 Kubernetes 的核心功能,同时简化了安装和管理流程。

✅ 优点:

  • 安装简单
  • 占用资源少
  • 快速启动
  • 支持多种架构
  • 兼容 Kubernetes YAML

❌ 注意:

  • 不适合生产级高可用部署
  • 缺少部分企业级插件

如果你需要快速搭建一个 Kubernetes 环境进行测试或学习,K3s 是一个非常不错的选择。对于生产环境或复杂集群,仍建议使用标准的 Kubernetes。


原始标题:Getting Started With K3s