在容器编排领域,Kubernetes 已经成为事实上的标准。然而,对于资源有限或对性能要求较高的场景(如边缘计算、物联网等),传统的 Kubernetes 部署可能会显得过于庞大和复杂。为了解决这些问题,k3s 应运而生。它是一款轻量级的 Kubernetes 发行版,专为资源受限环境设计,同时保留了 Kubernetes 的核心功能。本文将深入探讨 k3s 的核心功能和使用方法,帮助读者全面掌握这一强大的工具。
核心功能与特性
1. 安装与配置
下载与安装
首先,确保已经安装了必要的依赖项(如 Docker 或 containerd)。可以通过以下命令快速安装 k3s:
curl -sfL https://get.k3s.io | sh -
该命令会自动下载并安装 k3s,并将其配置为系统服务。
配置文件说明
k3s 使用 /etc/rancher/k3s/config.yaml
文件进行全局配置。常见的配置项包括启用 TLS 加密、设置节点角色等。
# /etc/rancher/k3s/config.yaml
tls-san:
- "192.168.1.100"
node-label:
- "node-role.kubernetes.io/worker=true"
2. 集群管理
k3s 提供了简单易用的命令行工具 kubectl
来管理和操作集群。通过这些命令,可以方便地查看集群状态、添加或移除节点等。
查看集群状态
要查看当前集群的状态,可以使用以下命令:
kubectl get nodes
这将列出所有节点及其状态信息。
添加新节点
要向现有集群添加新节点,可以在目标机器上运行以下命令:
curl -sfL https://get.k3s.io | K3S_URL=https://<master-ip>:6443 K3S_TOKEN=<token> sh -
其中 <master-ip>
是主节点的 IP 地址,<token>
是用于认证的共享密钥。
3. 应用部署
k3s 支持多种方式来部署应用程序,包括 YAML 文件、Helm 图表等。下面介绍几种常用的方法。
使用 YAML 文件
编写一个简单的 Deployment YAML 文件 nginx-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
然后使用 kubectl apply
命令部署:
kubectl apply -f nginx-deployment.yaml
使用 Helm 图表
如果需要更复杂的部署逻辑,可以使用 Helm 图表。首先,确保已经安装了 Helm 客户端:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
接下来,添加官方 Helm 仓库并安装 Nginx Ingress Controller:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
4. 其他实用功能
除了上述核心功能,k3s 还包含了一些其他实用的功能,进一步提升了用户体验。
监控与日志
k3s 内置了对 Prometheus 和 Fluentd 的支持,可以轻松集成监控和日志收集功能。
备份与恢复
为了确保数据的安全性,k3s 提供了备份和恢复机制。可以通过 Etcd 快照实现集群状态的定期备份。
sudo k3s etcd snapshot-save /var/lib/rancher/k3s/server/db/snapshot.db
示例介绍
假设你正在开发一个微服务架构的应用程序,并希望将其部署到 k3s 集群中。你可以使用 k3s 来简化这个过程。
示例 1:创建 k3s 集群
- 在主节点上安装 k3s:
curl -sfL https://get.k3s.io | sh -
- 获取加入集群所需的 token:
cat /var/lib/rancher/k3s/server/node-token
- 在工作节点上加入集群:
curl -sfL https://get.k3s.io | K3S_URL=https://<master-ip>:6443 K3S_TOKEN=<token> sh -
示例 2:部署应用程序
- 编写一个简单的 Deployment YAML 文件
app-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 8080
- 使用
kubectl apply
命令部署:
kubectl apply -f app-deployment.yaml
- 创建一个 Service 对象以暴露应用程序:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
- 应用 Service 配置:
kubectl apply -f service.yaml
总结
k3s 是一款轻量级且易于使用的 Kubernetes 发行版,特别适合那些资源受限或对性能有较高要求的场景。通过提供丰富的集群管理和应用部署功能,k3s 不仅简化了 Kubernetes 的部署过程,还确保了其核心功能的完整性和可靠性。