K3s 使用指南:简化你的 Kubernetes 部署 – wiki词典

It seems I made a mistake and attempted to use a write_file tool which is not available in my current set of capabilities. My apologies.

Since I cannot directly write a file to your system with the available tools, I will provide the article content directly in Markdown format in this chat response. Please copy and paste it into a file yourself.

Here is the article:

K3s 使用指南:简化你的 Kubernetes 部署

在云计算和容器化日益普及的今天,Kubernetes (K8s) 已经成为容器编排的事实标准。然而,标准版 Kubernetes 的部署和维护复杂度较高,这让许多开发者和小型团队望而却步。幸运的是,Rancher Labs 推出的 K3s 提供了一个轻量级、易于安装且资源占用极低的 Kubernetes 发行版。本文将详细介绍 K3s,并提供一份实用的使用指南,帮助你简化 Kubernetes 部署。

什么是 K3s?

K3s 是一个高度精简、认证过的 Kubernetes 发行版,专为边缘计算、物联网 (IoT) 设备、CI/CD 环境以及资源受限的服务器而设计。它的名字来源于 Kubernetes (K8s) 减去 500MB 以上的内存,因此得名 K3s(K8s – 5 = K3s)。它移除了大量非核心的插件和功能,例如:
* 移除了传统的 etcd 数据库,转而支持 SQLite3 (默认)、PostgreSQLMySQLMariaDB。这大大降低了运行时的资源需求。
* 打包为单个二进制文件,安装过程极为简化。
* 移除了旧的、非必需的插件和云提供商集成。
* 默认集成了 containerdCoreDNSTraefik (作为 Ingress 控制器)、Flannel (作为 CNI 插件) 和主机端口暴露服务。

这些优化使得 K3s 成为在资源有限或需要快速部署 Kubernetes 环境时的理想选择。

K3s 的优势

  1. 轻量级:K3s 的二进制文件只有几十 MB,内存占用极低,通常小于 512MB。
  2. 易于安装:通过一个简单的命令即可完成安装,无需复杂的配置。
  3. 高性能:虽然轻量,但 K3s 仍然提供了完整的 Kubernetes API,并能满足大多数生产环境的需求。
  4. 高可用性:支持多主节点和外部数据库的高可用部署。
  5. 边缘计算友好:非常适合在边缘设备、物联网网关和小型服务器上运行。
  6. 开发和测试:是本地开发、CI/CD 流水线和测试环境的绝佳选择。

K3s 安装指南

K3s 的安装非常简单,通常只需要一行命令。

前提条件

  • 一台运行 Linux 的机器(可以是虚拟机、物理机或树莓派)。
  • 至少 512MB 内存(推荐 1GB 或更多)。
  • 至少 1 核 CPU。
  • 互联网连接(用于下载 K3s 二进制文件和容器镜像)。

单节点安装 (快速入门)

这是最常见的安装方式,适用于开发、测试和轻量级生产环境。

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

执行上述命令后,K3s 会自动安装 containerd、K3s server 和 client,并配置 kubectl

安装完成后,你可以通过以下命令检查 K3s 集群状态:

bash
sudo kubectl get nodes
sudo kubectl get pods -A

默认情况下,kubectl 的配置文件位于 /etc/rancher/k3s/k3s.yaml。为了方便使用,你可以将其复制到你的用户目录并设置环境变量:

bash
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
chmod 600 ~/.kube/config # 确保文件权限安全
export KUBECONFIG=~/.kube/config # 临时设置,可添加到 ~/.bashrc 或 ~/.zshrc 持久化

现在,你可以像使用标准 Kubernetes 集群一样使用 kubectl 了。

客户端工具安装

如果你想在本地机器(而非 K3s server 所在机器)上管理 K3s 集群,你需要安装 kubectl 和获取集群的 kubeconfig 文件。

  1. 安装 kubectl:请参考 Kubernetes 官方文档安装适合你操作系统的 kubectl 工具。
  2. 获取 kubeconfig 文件:将 K3s server 上的 /etc/rancher/k3s/k3s.yaml 文件复制到你的本地机器(例如 ~/.kube/config)。确保替换 server 地址为你的 K3s server 的 IP 地址或域名。

    原始文件可能类似:
    yaml
    apiVersion: v1
    clusters:
    - cluster:
    certificate-authority-data: ...
    server: https://127.0.0.1:6443 # <-- 将此替换为你的 K3s server IP
    name: default
    contexts:
    - context:
    cluster: default
    user: default
    name: default
    current-context: default
    kind: Config
    preferences: {}
    users:
    - name: default
    user:
    client-certificate-data: ...
    client-key-data: ...

    修改后的 kubeconfig 文件:
    yaml
    apiVersion: v1
    clusters:
    - cluster:
    certificate-authority-data: ...
    server: https://<你的 K3s server IP>:6443 # <-- 修改这里
    name: default
    contexts:
    - context:
    cluster: default
    user: default
    name: default
    current-context: default
    kind: Config
    preferences: {}
    users:
    - name: default
    user:
    client-certificate-data: ...
    client-key-data: ...

    然后设置 KUBECONFIG 环境变量指向该文件。

Worker 节点加入集群

如果你想构建一个多节点的 K3s 集群,你可以将额外的 worker 节点加入到已有的 server 节点。

首先,在 K3s server 上获取 NODE_TOKEN

bash
sudo cat /var/lib/rancher/k3s/server/node-token

在 worker 节点上执行以下命令:

bash
curl -sfL https://get.k3s.io | K3S_URL="https://<K3s Server IP>:6443" K3S_TOKEN="<NODE_TOKEN>" sh -

替换 <K3s Server IP> 为你的 K3s server 的实际 IP 地址,<NODE_TOKEN> 为你之前获取的 token。

K3s 基本使用

K3s 提供了完整的 Kubernetes API,这意味着你可以像使用标准 Kubernetes 集群一样部署应用。

部署一个 Nginx 应用

创建一个名为 nginx-deployment.yaml 的文件:

“`yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx:latest
ports:
– containerPort: 80


apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
– protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer # K3s 会使用 Traefik 或 MetalLB 提供 LoadBalancer 功能
“`

部署应用:

bash
kubectl apply -f nginx-deployment.yaml

检查部署状态:

bash
kubectl get deployments
kubectl get pods -l app=nginx
kubectl get services

访问你的应用

由于 K3s 默认集成了 Traefik 作为 Ingress 控制器,你可以通过以下方式访问你的服务:

  1. NodePort:如果你创建的是 NodePort 类型的 Service,你可以通过任一 K3s 节点的 IP 地址加上 NodePort 端口访问。
  2. LoadBalancer:K3s 会使用 Traefik(或如果你配置了 MetalLB)来为 LoadBalancer 类型的 Service 提供一个外部 IP。你可以通过 kubectl get services 命令查看到 EXTERNAL-IP
  3. Ingress:对于更复杂的访问,你可以配置 Ingress 资源,Traefik 会根据 Ingress 规则将流量路由到你的服务。

    例如,创建一个 nginx-ingress.yaml
    yaml
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: nginx-ingress
    annotations:
    ingress.kubernetes.io/ssl-redirect: "false" # 仅用于 HTTP 示例
    spec:
    rules:
    - host: nginx.example.com
    http:
    paths:
    - path: /
    pathType: Prefix
    backend:
    service:
    name: nginx-service
    port:
    number: 80

    部署 Ingress:kubectl apply -f nginx-ingress.yaml
    你需要在 DNS 中将 nginx.example.com 指向你的 K3s server IP。

K3s 特有命令

K3s 也提供了一些特有的命令来管理服务:

  • 停止 K3s serversudo systemctl stop k3s
  • 启动 K3s serversudo systemctl start k3s
  • 查看日志sudo journalctl -u k3s
  • 卸载 K3s
    • server 节点:sudo /usr/local/bin/k3s-uninstall.sh
    • worker 节点:sudo /usr/local/bin/k3s-agent-uninstall.sh

高级用法 (简述)

  • 数据库选择:在安装 K3s server 时,你可以通过环境变量指定使用外部 PostgreSQLMySQL 数据库,以提高数据持久性和集群的弹性。
    bash
    curl -sfL https://get.k3s.io | K3S_URL="https://<K3s Server IP>:6443" K3S_TOKEN="<NODE_TOKEN>" INSTALL_K3S_EXEC="--datastore-endpoint='mysql://user:pass@tcp(host:3306)/k3s'" sh -
  • 自定义配置:K3s 允许通过启动参数或配置文件 (/etc/rancher/k3s/config.yaml) 进行详细配置,例如禁用内置组件 (Traefik, CoreDNS)、更改端口等。
  • 高可用集群:通过部署多个 K3s server 节点并配置外部数据库,可以构建一个高可用的 K3s 集群,确保控制平面的健壮性。

总结

K3s 以其轻量、易用和高性能的特点,为 Kubernetes 的部署和管理带来了革命性的简化。无论是在边缘设备、开发环境还是资源受限的生产场景,K3s 都是一个极具吸引力的选择。通过本文的指南,你应该能够快速上手 K3s,并开始你的容器化应用之旅。如果你还在为 Kubernetes 的复杂性而烦恼,不妨尝试一下 K3s,它可能会彻底改变你对 Kubernetes 的认知。

希望这篇文章能帮助你更好地理解和使用 K3s!

滚动至顶部