快速开始
部署模式
目前仅支持 Kubernetes 部署,并且提供两种部署模式 Operator 和 Yaml 清单 。如果想 Docker Compose 或者二进制部署可自行修改。
必备清单
mysql,redis,minio,Jaeger . 如果本地已经有了,可以使用自己的,如果没有可以查看 基本环境部署章节,使用脚本统一初始化。
基本环境部署
提示
如果已经有 mysql,redis,s3,jaeger 推荐使用内部的,此部署方式仅用于演示。
并且需要提前准备好 NFS 或者集群内有可用的 SC。
仓库地址:
克隆仓库
bash
git clone https://github.com/ikubeops/kube-nova.git
# 修改关键配置
vim scripts/basic-deploy.sh
# 存储模式:storageClass 或 nfs
STORAGE_MODE="storageClass" # 需要集群哪已经配置了 storageClass
# 如果选择 nfs 模式,`需要先配置 NFS 服务器`
# 需要手动修改文件: manifests/basic/pvc-nfs.yamlNFS 存储修改示例
bash
# 修改关键配置
vim scripts/basic-deploy.sh
# 存储模式:storageClass 或 nfs
STORAGE_MODE="nfs" # 需要集群哪已经配置了 storageClass
# 修改pvc
vim manifests/basic/pvc-nfs.yaml
# 修改 NFS 服务器地址和路径
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.1.100 # 修改为您的 NFS 服务器 IP
path: /nfs/kube-nova/mysql # 修改为实际路径执行部署
bash
bash scripts/basic-deploy.sh
# 部分日志如下:
==========================================
Kube-Nova 基础环境部署完成
==========================================
MySQL 连接信息:
集群内访问: mysql.kube-nova.svc.cluster.local:3306
用户名: root
密码: 8VlZ2lvIsKBCYSE3
数据库: kube_nova
端口转发: kubectl port-forward -n kube-nova svc/mysql 3306:3306
Redis 连接信息:
集群内访问: redis.kube-nova.svc.cluster.local:6379
密码: 2VOSiz0vhGtxaBJb
端口转发: kubectl port-forward -n kube-nova svc/redis 6379:6379
连接测试: redis-cli -h localhost -p 6379 -a 2VOSiz0vhGtxaBJb ping
MinIO 对象存储:
集群内 API: minio-service.kube-nova.svc.cluster.local:9000
集群内控制台: minio-service.kube-nova.svc.cluster.local:9001
访问密钥: kube-nova-admin
密钥: KubeNova@2024SecretKey!
桶名: kube-nova (公开访问)
已上传图片: public/kube-nova.png
端口转发:
API: kubectl port-forward -n kube-nova svc/minio-service 9000:9000
控制台: kubectl port-forward -n kube-nova svc/minio-service 9001:9001
访问控制台: http://localhost:9001
Jaeger 链路追踪:
集群内 Collector: jaeger-collector.kube-nova.svc.cluster.local
HTTP Collector: http://jaeger-collector:14268/api/traces
gRPC Collector: jaeger-collector:14250
OTLP gRPC: jaeger-collector:4317
OTLP HTTP: http://jaeger-collector:4318
UI NodePort: 30286
访问 UI: http://<NodeIP>:30286
端口转发: kubectl port-forward -n kube-nova svc/jaeger-ui 16686:16686
访问 UI: http://localhost:16686
存储配置:
存储模式: storageClass
说明: 使用 Kubernetes StorageClass 动态供应
常用命令:
查看所有资源:
kubectl get all -n kube-nova
查看 PVC 状态:
kubectl get pvc -n kube-nova
查看 Pod 日志:
kubectl logs -n kube-nova <pod-name>
进入 Pod:
kubectl exec -it -n kube-nova <pod-name> -- sh
删除所有资源:
kubectl delete namespace kube-nova
==========================================
[✓] 部署完成!所有服务已成功启动!脚本将自动完成以下步骤:
- 环境检查 - 检查 kubectl、集群连接、存储配置
- 创建命名空间 - 创建
kube-nova命名空间 - 部署 PVC - 根据选择的存储模式创建持久化存储
- 等待 PVC 绑定 - 等待所有 PVC 成功绑定
- 部署基础服务 - 依次部署 MySQL、Redis、MinIO、Jaeger
- 等待服务就绪 - 等待所有 Pod 进入 Running 状态
- 初始化 MinIO - 创建存储桶并上传默认图片
- 导入数据库 - 初始化 MySQL 数据库表结构和基础数据
- 显示访问信息 - 输出所有服务的访问地址和凭证
已有环境操作如下
Mysql: 请手动导入代码仓库中 sql/db.sql 到数据库中。
Minio: 上传 images/kube-nova.png 到 存储桶 public/kube-nova.png
Operator 部署
克隆地址
根据网络环境可以自行选择克隆仓库。
bash
git clone https://gitee.com/ikubeops/kube-nova-operator.git部署控制器
bash
cd kube-nova-operator/
kubectl apply -f dist/install.yaml部署 kube-nova
目前提供了三个 yaml 文件可根据需求自行选择
bash
deploy/
├── deploy-ingress.yaml
├── ingress+htts.yaml
└── nodeport.yaml配置文件
介绍 operator 配置文件参数。
访问
默认用户名:
- super_admin
- Admin@123456
bash
root@k8s-181:~/kube-nova/kube-nova-operator# kubectl get kn -n kube-nova -w
NAME 阶段 WEB 访问地址 运行时长
kubenova-sample 就绪 就绪 http://172.16.1.183:30088 79s
Manifests 部署
平台同时提供了 YAML 清单方式,可自行根据需求进行修改。
清单在 kube-nova 仓库中,如下
bash
cd /kube-nova/manifests/base
tree
.
├── 00-secret.yaml # 主要修改此文件
├── 01-rbac.yaml
├── 99-kube-nova-web.yaml
├── console-api-configmap.yaml
├── console-api-deployment.yaml
├── console-api-service.yaml
├── console-rpc-configmap.yaml
├── console-rpc-deployment.yaml
├── console-rpc-service.yaml
├── manager-api-configmap.yaml
├── manager-api-deployment.yaml
├── manager-api-service.yaml
├── manager-rpc-configmap.yaml
├── manager-rpc-deployment.yaml
├── manager-rpc-service.yaml
├── portal-api-configmap.yaml
├── portal-api-deployment.yaml
├── portal-api-service.yaml
├── portal-rpc-configmap.yaml
├── portal-rpc-deployment.yaml
├── portal-rpc-service.yaml
├── workload-api-configmap.yaml
├── workload-api-deployment.yaml
└── workload-api-service.yamlSecret 文件
主要修改 secret 文件即可,所有服务的配置会通过环境变量注入。
yaml
---
apiVersion: v1
kind: Secret
metadata:
name: kube-nova-secret
namespace: kube-nova
type: Opaque
stringData:
# 全局超时
DEFAULT_TIMEOUT: "30000"
# MySQL 基础参数
MYSQL_HOST: "mysql"
MYSQL_PORT: "3306"
MYSQL_DATABASE: "kube_nova"
MYSQL_USER: "root"
MYSQL_PASSWORD: "8VlZ2lvIsKBCYSE3"
MYSQL_MAX_OPEN_CONNS: "100"
MYSQL_MAX_IDLE_CONNS: "50"
MYSQL_CONN_MAX_LIFETIME: "30m"
# Redis 基础参数
REDIS_HOST: "redis"
REDIS_PORT: "6379"
REDIS_PASSWORD: "2VOSiz0vhGtxaBJb"
REDIS_TYPE: "node"
REDIS_TLS: "false"
REDIS_NONBLOCK: "true"
REDIS_PING_TIMEOUT: "3s"
# MinIO 配置
MINIO_ENDPOINT: "minio-service:9000"
MINIO_ACCESS_KEY: "kube-nova-admin"
MINIO_SECRET_KEY: "KubeNova@2024SecretKey!"
MINIO_BUCKET: "kube-nova"
MINIO_USE_TLS: "false"
# JWT
JWT_ACCESS_SECRET: "zk5Lp8m+0g7lvvLcnbUHPzQFEsRAmvNIn9tXdx0o80U="
JWT_ACCESS_EXPIRE: "86400"
JWT_REFRESH_SECRET: "zk5Lp8m+0g7lvvLcnbUHPzQFEsRAmvNIn9tXdx0o80U="
JWT_REFRESH_EXPIRE: "604800"
JWT_REFRESH_AFTER: "604800"
# Webhook
ALERTMANAGER_WEBHOOK_TOKEN: "mRwErqZaQVrxfyhiDQrdiQohAsONwSTtwhcmFXpCcaGavcINqorVoWINnSFFAijb"
# Jaeger
JAEGER_ENDPOINT: "http://jaeger-collector:14268/api/traces"
TELEMETRY_SAMPLER: "1.0"
TELEMETRY_BATCHER: "jaeger"
# Portal
PORTAL_NAME: "Kube-Nova 云原生平台"
PORTAL_URL: "http://www.yanshicheng.com:8888"
DEMO_MODE: "true"
# 其他
INJECT_IMAGE: "harbor.ikubeops.local/public/network-multitool:latest"