K3s 轻量 K8s 发行版
bash curl -sfL https://get.k3s.io | sh -
安装脚本会自动完成以下操作:
- 检测操作系统并下载对应架构的 K3s 二进制文件。
- 安装 `k3s` 命令到 `/usr/local/bin`。
- 创建 systemd 服务 `k3s.service` 并启动。
- 生成 kubeconfig 文件到 `/etc/rancher/k3s/k3s.yaml`。
安装完成后,检查服务状态:
```bash
sudo systemctl status k3s
步骤 2:配置 kubectl 访问
为了使用 kubectl 管理集群,可以将配置文件复制到当前用户的默认路径,并修改权限:
mkdir -p $HOME/.kube
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
现在可以查看节点信息:
kubectl get nodes
如果节点状态为 Ready,说明集群已正常运行。
步骤 3:验证组件
查看所有 Pod(包括系统组件)运行状态:
kubectl get pods --all-namespaces
你应该会看到类似 kube-system 命名空间下运行着 coredns、local-path-provisioner、traefik 等 Pod。
部署第一个应用
我们使用一个简单的 Nginx 示例来验证集群功能。
创建 Deployment
kubectl create deployment nginx --image=nginx:alpine
检查 Deployment 状态:
kubectl get deployments
暴露服务
通过 kubectl expose 创建一个 NodePort 类型的服务,以便从宿主机访问:
kubectl expose deployment nginx --port=80 --type=NodePort
查看服务分配的端口:
kubectl get svc nginx
输出中 PORT(S) 一列会显示类似 80:3xxxx/TCP,其中 3xxxx 就是 NodePort。在浏览器中访问 http://<你的主机IP>:3xxxx,即可看到 Nginx 欢迎页面。
使用 Traefik Ingress
K3s 内置了 Traefik Ingress Controller,可以更优雅地暴露 HTTP 服务。创建一个 Ingress 资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: nginx.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
保存为 ingress.yaml 并应用:
kubectl apply -f ingress.yaml
修改本地 hosts 文件,将 nginx.local 指向你的主机 IP,然后访问 http://nginx.local,同样可以访问到 Nginx。
K3s 集群管理进阶
添加 Agent 节点(多节点集群)
如果你有额外的机器需要加入集群,先获取主节点的 token 和 IP。
在主节点上查看 token:
sudo cat /var/lib/rancher/k3s/server/node-token
在需要加入的机器上,设置环境变量并运行安装脚本:
export K3S_URL=https://<主节点IP>:6443
export K3S_TOKEN=上一步获取的token
curl -sfL https://get.k3s.io | sh -
服务启动后,该节点会自动注册为 Agent 节点。在主节点上运行 kubectl get nodes 即可看到新节点出现,并且标签中会显示 node-role.kubernetes.io/agent。
常用配置选项
K3s 提供了丰富的安装时配置参数,可以通过环境变量或配置文件指定。以下是一些常用示例:
- 禁用 Traefik:如果你计划使用其他 Ingress Controller,可在安装脚本中加上
INSTALL_K3S_EXEC="--disable traefik"。 - 使用外部数据库(用于 HA 模式):
curl -sfL https://get.k3s.io | sh -s - server --datastore-endpoint="mysql://user:pass@tcp(ip:3306)/dbname" - 自定义 Pod CIDR 或 Service CIDR:
--cluster-cidr 10.42.0.0/16,--service-cidr 10.43.0.0/16。 - 开启嵌入式 etcd 的 HA 模式:至少需要三个节点,每个节点安装时指定
server和--cluster-init。
升级 K3s
K3s 支持原地升级。只需再次运行安装脚本,它会自动检测并升级到最新稳定版,同时保持集群数据完整:
curl -sfL https://get.k3s.io | sh -
如需升级到特定版本,可通过环境变量指定:
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.5+k3s1 sh -