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 (默认)、PostgreSQL、MySQL 或 MariaDB。这大大降低了运行时的资源需求。
* 打包为单个二进制文件,安装过程极为简化。
* 移除了旧的、非必需的插件和云提供商集成。
* 默认集成了 containerd、CoreDNS、Traefik (作为 Ingress 控制器)、Flannel (作为 CNI 插件) 和主机端口暴露服务。
这些优化使得 K3s 成为在资源有限或需要快速部署 Kubernetes 环境时的理想选择。
K3s 的优势
- 轻量级:K3s 的二进制文件只有几十 MB,内存占用极低,通常小于 512MB。
- 易于安装:通过一个简单的命令即可完成安装,无需复杂的配置。
- 高性能:虽然轻量,但 K3s 仍然提供了完整的 Kubernetes API,并能满足大多数生产环境的需求。
- 高可用性:支持多主节点和外部数据库的高可用部署。
- 边缘计算友好:非常适合在边缘设备、物联网网关和小型服务器上运行。
- 开发和测试:是本地开发、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 文件。
- 安装
kubectl:请参考 Kubernetes 官方文档安装适合你操作系统的kubectl工具。 -
获取
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 控制器,你可以通过以下方式访问你的服务:
- NodePort:如果你创建的是
NodePort类型的 Service,你可以通过任一 K3s 节点的 IP 地址加上 NodePort 端口访问。 - LoadBalancer:K3s 会使用 Traefik(或如果你配置了 MetalLB)来为
LoadBalancer类型的 Service 提供一个外部 IP。你可以通过kubectl get services命令查看到EXTERNAL-IP。 -
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 server:
sudo systemctl stop k3s - 启动 K3s server:
sudo 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
- server 节点:
高级用法 (简述)
- 数据库选择:在安装 K3s server 时,你可以通过环境变量指定使用外部
PostgreSQL或MySQL数据库,以提高数据持久性和集群的弹性。
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!