226 lines
5.8 KiB
Markdown
226 lines
5.8 KiB
Markdown
# K3s 基础设施部署总结
|
||
|
||
部署日期: 2026-01-30
|
||
|
||
## 已完成的基础设施组件
|
||
|
||
### ✅ 1. Helm 包管理工具
|
||
- **版本**: v3.20.0
|
||
- **位置**: /usr/local/bin/helm
|
||
- **配置**: KUBECONFIG 已添加到 ~/.bashrc
|
||
|
||
### ✅ 2. Longhorn 分布式存储
|
||
- **版本**: v1.11.0
|
||
- **命名空间**: longhorn-system
|
||
- **存储类**: longhorn (默认)
|
||
- **S3 备份**: 已配置 MinIO S3 备份
|
||
- 备份目标: s3://longhorn-backup@us-east-1/
|
||
- 凭证 Secret: longhorn-crypto
|
||
- **访问**: http://longhorn.local
|
||
|
||
### ✅ 3. Redis 中间件
|
||
- **版本**: Redis 7 (Alpine)
|
||
- **命名空间**: redis
|
||
- **存储**: 5Gi Longhorn 卷
|
||
- **持久化**: RDB + AOF 双重持久化
|
||
- **内存限制**: 2GB
|
||
- **访问**: redis.redis.svc.cluster.local:6379
|
||
|
||
### ✅ 4. PostgreSQL 数据库
|
||
- **版本**: PostgreSQL 16.11
|
||
- **命名空间**: postgresql
|
||
- **存储**: 10Gi Longhorn 卷
|
||
- **内存限制**: 2GB
|
||
- **访问**: postgresql-service.postgresql.svc.cluster.local:5432
|
||
- **凭证**:
|
||
- 用户: postgres
|
||
- 密码: postgres123
|
||
|
||
### ✅ 5. Traefik Ingress 控制器
|
||
- **状态**: K3s 默认已安装
|
||
- **命名空间**: kube-system
|
||
- **已配置 Ingress**:
|
||
- Longhorn UI: http://longhorn.local
|
||
- MinIO API: http://s3.u6.net3w.com
|
||
- MinIO Console: http://console.s3.u6.net3w.com
|
||
- Grafana: http://grafana.local
|
||
- Prometheus: http://prometheus.local
|
||
- Alertmanager: http://alertmanager.local
|
||
|
||
### ✅ 6. Prometheus + Grafana 监控系统
|
||
- **命名空间**: monitoring
|
||
- **组件**:
|
||
- Prometheus: 时间序列数据库 (20Gi 存储, 15天保留)
|
||
- Grafana: 可视化仪表板 (5Gi 存储)
|
||
- Alertmanager: 告警管理 (5Gi 存储)
|
||
- Node Exporter: 节点指标收集
|
||
- Kube State Metrics: K8s 资源状态
|
||
- **Grafana 凭证**:
|
||
- 用户: admin
|
||
- 密码: prom-operator
|
||
- **访问**:
|
||
- Grafana: http://grafana.local
|
||
- Prometheus: http://prometheus.local
|
||
- Alertmanager: http://alertmanager.local
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
/home/fei/k3s/009-基础设施/
|
||
├── 003-helm/
|
||
│ ├── install_helm.sh
|
||
│ └── readme.md
|
||
├── 004-longhorn/
|
||
│ ├── deploy.sh
|
||
│ ├── s3-secret.yaml
|
||
│ ├── values.yaml
|
||
│ ├── readme.md
|
||
│ └── 说明.md
|
||
├── 005-ingress/
|
||
│ ├── deploy-longhorn-ingress.sh
|
||
│ ├── longhorn-ingress.yaml
|
||
│ └── readme.md
|
||
└── 006-monitoring/
|
||
├── deploy.sh
|
||
├── values.yaml
|
||
├── ingress.yaml
|
||
└── readme.md
|
||
|
||
/home/fei/k3s/010-中间件/
|
||
├── 001-redis/
|
||
│ ├── deploy.sh
|
||
│ ├── redis-deployment.yaml
|
||
│ └── readme.md
|
||
└── 002-postgresql/
|
||
├── deploy.sh
|
||
├── postgresql-deployment.yaml
|
||
└── readme.md
|
||
```
|
||
|
||
## 存储使用情况
|
||
|
||
| 组件 | 存储大小 | 存储类 |
|
||
|------|---------|--------|
|
||
| MinIO | 50Gi | local-path |
|
||
| Redis | 5Gi | longhorn |
|
||
| PostgreSQL | 10Gi | longhorn |
|
||
| Prometheus | 20Gi | longhorn |
|
||
| Grafana | 5Gi | longhorn |
|
||
| Alertmanager | 5Gi | longhorn |
|
||
| **总计** | **95Gi** | - |
|
||
|
||
## 访问地址汇总
|
||
|
||
需要在 `/etc/hosts` 中添加以下配置(将 `<节点IP>` 替换为实际 IP):
|
||
|
||
```
|
||
<节点IP> longhorn.local
|
||
<节点IP> grafana.local
|
||
<节点IP> prometheus.local
|
||
<节点IP> alertmanager.local
|
||
<节点IP> s3.u6.net3w.com
|
||
<节点IP> console.s3.u6.net3w.com
|
||
```
|
||
|
||
## 快速验证命令
|
||
|
||
```bash
|
||
# 查看所有命名空间的 Pods
|
||
kubectl get pods -A
|
||
|
||
# 查看所有 PVC
|
||
kubectl get pvc -A
|
||
|
||
# 查看所有 Ingress
|
||
kubectl get ingress -A
|
||
|
||
# 查看存储类
|
||
kubectl get storageclass
|
||
|
||
# 测试 Redis
|
||
kubectl exec -n redis $(kubectl get pod -n redis -l app=redis -o jsonpath='{.items[0].metadata.name}') -- redis-cli ping
|
||
|
||
# 测试 PostgreSQL
|
||
kubectl exec -n postgresql postgresql-0 -- psql -U postgres -c "SELECT version();"
|
||
```
|
||
|
||
## 备份策略
|
||
|
||
1. **Longhorn 卷备份**:
|
||
- 所有持久化数据存储在 Longhorn 卷上
|
||
- 可通过 Longhorn UI 创建快照
|
||
- 自动备份到 MinIO S3 (s3://longhorn-backup@us-east-1/)
|
||
|
||
2. **数据库备份**:
|
||
- Redis: AOF + RDB 持久化
|
||
- PostgreSQL: 可使用 pg_dump 进行逻辑备份
|
||
|
||
3. **配置备份**:
|
||
- 所有配置文件已保存在 `/home/fei/k3s/` 目录
|
||
- 建议定期备份此目录
|
||
|
||
## 下一步建议
|
||
|
||
1. **安全加固**:
|
||
- 修改 PostgreSQL 默认密码
|
||
- 配置 TLS/SSL 证书
|
||
- 启用 RBAC 权限控制
|
||
|
||
2. **监控优化**:
|
||
- 配置告警通知(邮件、Slack、钉钉)
|
||
- 导入更多 Grafana 仪表板
|
||
- 为 Redis 和 PostgreSQL 添加专用监控
|
||
|
||
3. **高可用**:
|
||
- 考虑 Redis 主从复制或 Sentinel
|
||
- 考虑 PostgreSQL 主从复制
|
||
- 增加 K3s 节点实现多节点高可用
|
||
|
||
4. **日志收集**:
|
||
- 部署 Loki 或 ELK 进行日志聚合
|
||
- 配置日志持久化和查询
|
||
|
||
5. **CI/CD**:
|
||
- 部署 GitLab Runner 或 Jenkins
|
||
- 配置自动化部署流程
|
||
|
||
## 维护命令
|
||
|
||
```bash
|
||
# 更新 Helm 仓库
|
||
helm repo update
|
||
|
||
# 升级 Longhorn
|
||
helm upgrade longhorn longhorn/longhorn --namespace longhorn-system -f values.yaml
|
||
|
||
# 升级监控栈
|
||
helm upgrade kube-prometheus-stack prometheus-community/kube-prometheus-stack --namespace monitoring -f values.yaml
|
||
|
||
# 查看 Helm 发布
|
||
helm list -A
|
||
|
||
# 清理未使用的镜像
|
||
kubectl get pods -A -o jsonpath='{range .items[*]}{.spec.containers[*].image}{"\n"}{end}' | sort -u
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
如果遇到问题,请检查:
|
||
|
||
1. Pod 状态: `kubectl get pods -A`
|
||
2. 事件日志: `kubectl get events -A --sort-by='.lastTimestamp'`
|
||
3. Pod 日志: `kubectl logs -n <namespace> <pod-name>`
|
||
4. 存储状态: `kubectl get pvc -A`
|
||
5. Longhorn 卷状态: 访问 http://longhorn.local
|
||
|
||
## 联系和支持
|
||
|
||
- Longhorn 文档: https://longhorn.io/docs/
|
||
- Prometheus 文档: https://prometheus.io/docs/
|
||
- Grafana 文档: https://grafana.com/docs/
|
||
- K3s 文档: https://docs.k3s.io/
|
||
|
||
---
|
||
|
||
**部署完成!所有基础设施组件已成功运行。** 🎉
|