Kubeasz 部署 K8s1.35 (存储:Longhorn)
一、环境规划
1.1 节点规划
| 角色 | 主机名 | IP(示例) | 配置 | 数量 |
|---|---|---|---|---|
| Master | node1 | 10.10.0.204 | 4C8G 50G SSD | 1 |
| Worker | node2 | 10.10.0.201 | 4C8G 50G SSD | 1 |
| Worker | node3 | 10.10.0.202 | 4C8G 50G SSD | 1 |
| Worker | node4 | 10.10.0.203 | 8C16G 100G SSD | 1 |
生产建议:Master 至少 3 节点保证高可用;Worker 根据业务负载规划;Longhorn 推荐每个 Worker 挂载一块独立数据盘(如
/dev/vdb),避免与系统盘争用 IO。
1.2 系统要求
| 项目 | 要求 |
|---|---|
| OS | Ubuntu 20.04/22.04 或 CentOS 7.9/8(推荐 Ubuntu 22.04) |
| Kernel | ≥ 4.18(Longhorn 需要 iSCSI 支持,推荐 5.x) |
| 网络 | 全节点互通,关闭 Swap |
| 磁盘 | Longhorn 节点需额外数据盘,格式化为 ext4/xfs |
| 时间 | 所有节点 NTP 同步 |
二、部署前准备
2.1 基础环境初始化(所有节点)
1 | # 配置安装节点与其他节点免密 |
2.2 iSCSI 客户端安装(Longhorn 必需,所有 Worker 节点)
1 | # Ubuntu |
三、Kubeasz 部署 K8s
3.1 安装 Kubeasz
1 | # 在部署机(可选独立部署机或 master-01) |
3.2 配置集群
1 | # 容器化运行kubeasz |
3.3 编辑集群配置文件
hosts 文件 (/etc/kubeasz/clusters/k8s-prod/hosts):
1 | root@node1:~# cat /etc/kubeasz/clusters/k8s-prod/hosts |
config.yml (/etc/kubeasz/clusters/k8s-prod/config.yml):
1 | root@node1:~# cat /etc/kubeasz/clusters/k8s-prod/config.yml |
3.4 执行部署
1 | # 部署所有 |
3.5 验证集群
1 | root@node1:~# kubectl get nodes |
安装harbor仓库
需要提前把包放进去
1 | root@node1:/etc/kubeasz/down# ls |
四、Longhorn 存储部署
4.1 准备数据盘(所有 Worker 节点)
1 | # 查看数据盘(假设 /dev/vdb 为 Longhorn 专用数据盘) |
4.2 安装 Longhorn
安装Helm
1 | root@node1:/etc/kubeasz/down# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash |
1 | # 创建命名空间 |
1 | # 提前下载镜像并导入 |
4.3 Longhorn 生产优化配置
部署完成后,在 Longhorn UI 或 CRD 中调整以下设置:
1 | # longhorn-setting.yaml |
4.4 创建 StorageClass[helm自动创建]
1 | # longhorn-storageclass.yaml |
1 | kubectl apply -f longhorn-storageclass.yaml |
4.5 配置备份目标(NFS 示例)
1 | # 在 NFS 服务器上 |
五、验证与测试
5.1 验证 Longhorn
1 | # 检查 Longhorn 组件 |
5.2 创建 PVC 测试
1 | root@node1:~# cat nginx* |
1 | root@node1:~# kubectl get sc |
Web UI

六、生产加固建议
| 维度 | 措施 |
|---|---|
| 监控 | 部署 Prometheus + Grafana,导入 Longhorn Dashboard(ID: 17628) |
| 告警 | 配置磁盘使用率 >80% 告警,副本异常告警 |
| 备份 | 设置定时 Backup CRD,关键数据每日备份到 NFS/S3 |
| 日志 | 收集 Longhorn Manager 日志到 ELK/Loki |
| 安全 | Longhorn UI 配置 Ingress + Basic Auth/TLS |
| 升级 | 制定 Longhorn 滚动升级流程,升级前做好备份 |
| 灾备 | 跨可用区部署 Worker,利用 Longhorn Zone Anti-Affinity |
| 资源隔离 | 为 Longhorn 组件设置 requests/limits,避免资源争抢 |
监控示例(Prometheus 告警规则)
1 | # longhorn-alert-rules.yaml |
七、部署Headlamp
Kubernetes Dashboard 项目已经归档,Headlamp 成为新的 Kubernetes UI 方向。
Headlamp 通过允许你从单个界面处理多个集群而无需切换工具或丢失上下文,扩展了这个视图。 这使得并排管理开发、暂存和生产环境变得更容易。
In-cluster
Install Headlamp in your cluster using Helm. Run the following:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/
helm install my-headlamp headlamp/headlamp --namespace kube-system
root@node1:~# helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/
"headlamp" has been added to your repositories
root@node1:~# helm install my-headlamp headlamp/headlamp --namespace kube-system
NAME: my-headlamp
LAST DEPLOYED: Mon Jul 20 07:42:14 2026
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace kube-system -l "app.kubernetes.io/name=headlamp,app.kubernetes.io/instance=my-headlamp" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace kube-system $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace kube-system port-forward $POD_NAME 8080:$CONTAINER_PORT
2. Get the token using
kubectl create token my-headlamp --namespace kube-system
1 |
|
