基于 Cloudpods 实现企业私有云与公有云的多云统一管理与资源调度
本文源自根据工作要求预研记录,部分内容可能有误,同时未贴合大众学习使用路线,严谨操作请关注官方!
一、安装部署
🔧 前置准备
环境准备
- OS: CentOS 7.9 (最小化安装即可)
- 内存:至少 4G(推荐 8G 以上)
- 硬盘:50G+
- 网络:能访问公网(方便拉 Docker 镜像),也能访问公司私有云。
基础依赖
# 更新系统
yum update -y
# 安装常用工具
yum install -y wget curl vim git net-tools lsof unzip
# 安装 Docker
curl -fsSL https://get.docker.com/ | sh
systemctl enable docker --now
# 安装 docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Docker-compose 安装 Cloudpods 方式
参照官网:https://www.cloudpods.org/docs/getting-started/cmp/quickstart-docker-compose
1. 克隆指定版本代码
git clone -b release/3.11 https://github.com/yunionio/ocboot
cd ./ocboot
说明:
-b release/3.11:指定release/3.11分支cd ./ocboot:进入项目目录
2. 进入 Docker Compose 配置目录
cd compose
ls -alh docker-compose.yml
说明:
- 确认
docker-compose.yml文件存在 - 该文件是 Compose 的核心配置,定义了所有服务与镜像
3. 拉取镜像
docker-compose pull
说明:
- 共包含 16 个镜像
- 根据
docker-compose.yml配置从远程仓库拉取 - 若网络受限(如国内访问 GitHub / Docker Hub 较慢),可配置代理或使用国内镜像源
4. 启动服务
docker-compose up -d
说明:
-d:后台运行- 启动
docker-compose.yml中定义的全部服务 - 可通过
docker ps查看容器运行状态
注意事项:
- 默认使用 443 端口,如端口被占用,可修改为
8443、9443等 - 端口修改位置:
docker-compose.yml文件末尾的ports配置 - Cloudpods Web / Nginx 使用 HTTPS,直接用 HTTP 访问会报错:
400 Bad Request
The plain HTTP request was sent to HTTPS port
5. 查看日志
docker-compose logs -f
说明:
-f:实时跟随日志输出- 查看单个服务日志:
docker-compose logs -f <service_name>
Cloudpods 容器列表(共 16 个)
compose-keystone-1:认证服务compose-region-1:核心 APIcompose-apigateway-1:API 网关compose-scheduler-1:调度器compose-glance-1:镜像服务compose-monitor-1:监控服务compose-web-1:Web UIcompose-webconsole-1:Web 控制台compose-cloudid-1:多云账号对接compose-kubeserver-1:容器管理(不使用可停)compose-notify-1:消息通知compose-influxdb-1:时序数据存储compose-logger-1:日志服务compose-cloudmon-1:云监控compose-yunionconf-1:配置中心compose-host-deployer-1:宿主机部署组件
整体重启 Cloudpods 方式
docker-compose down
docker-compose up -d
说明:
- Cloudpods 通过 docker-compose 统一编排(包含 mysql、etcd、keystone、region、dashboard 等)
- 重启必须使用
docker-compose方式
注意事项:
*-init、*-post-init容器为初始化容器,执行完成后退出属于正常现象- 需要长期运行的是
compose-xxx-1系列服务容器
二、核心问题预研分析
1. 解决多云登录麻烦
- Cloudpods 的优势是统一登录,不用分别去阿里云 / AWS。
- 登录后进入 “云账号管理” 页面,添加云账号:
- 选择「云账号」→「添加」
- 填写阿里云 AccessKey ID/Secret,或 AWS 的 Key/Secret
- 选择同步模式(手动/自动)
- 保存后,Cloudpods 会自动拉取云上资源。
📌 效果:一次登录 Cloudpods,能同时管理阿里云 + AWS + 私有云资源。
2. 解决多云资源管理麻烦
- 在 Cloudpods 控制台,你可以看到所有云账号的:
- 云主机 (ECS/EC2)
- 网络 (VPC/子网)
- 存储 (OSS/S3)
- 也支持统一创建、删除、开关机。
📌 关键点:Cloudpods 提供 API(Swagger 文档在 /apidocs/),你可以直接通过 API 调用,实现批量操作。
API参考链接:https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd
效果图:


3. 解决监控/告警配置麻烦
Cloudpods 监控/告警架构
(1)监控采集
- 监控 Agent(telegraf)
- 部署在宿主机或虚拟机内,用于采集 CPU、内存、磁盘、网络等指标。
- 私有云宿主机/虚拟机通过 Agent 上报指标。
- cloudmon 服务
- 周期性从云平台(如阿里云、AWS)调用 API 拉取监控数据(VM、存储使用量等),还可做 ping 监控。
- 相当于“集中拉取云端指标”,不需要在每个云 VM 上部署 Agent。
(2)数据存储
- influxdb / VictoriaMetrics
- 存储时序监控数据,为查询和告警提供数据支持。
(3)监控服务 API(monitor)
- 提供统一 API 查询监控指标和告警。
- 外部系统可以通过 API 获取指标,或者同步告警配置。
- 并不直接做 Prometheus 那样的采集、拉取和报警,而是“抽象层 + API 接口”。
(4)告警策略
- 可以在 Cloudpods UI 中配置告警规则和通知方式(Webhook、企业微信、钉钉、邮件等)。
- 也可以通过调用 Cloudpods API 自动同步告警配置到其他平台。
集中管理告警配置策略
部署中央 Prometheus(测试用)
快速部署方法(docker 方式):
mkdir -p /opt/prometheus && cd /opt/prometheus
# 创建 prometheus.yml
cat > prometheus.yml <<'EOF'
global:
scrape_interval: 30s
scrape_configs:
- job_name: 'cloudpods-federate'
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{__name__=~"^(yunion_|node_|process_).+"}' # 过滤你需要的指标
static_configs:
- targets: ['192.168.201.200:30990'] # Cloudpods 内置 Prometheus 地址
EOF
# 启动容器
docker run -d --name prometheus -p 30990:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
APIGateway 端口映射与健康检查
1. 确认容器运行与健康状态
- 查看容器是否在运行,并且健康状态为
healthy:
docker ps | grep apigateway
- 理想输出:
fbedd7a752e1 compose-apigateway-1 Up ... (healthy)
- 若状态非
healthy,需要进入容器日志查看原因:
docker logs compose-apigateway-1 -f
2. 检查端口映射
- 确认容器内部端口 8888 已映射到虚拟机的 30888:
docker inspect compose-apigateway-1 | grep -A 5 "Ports"
- 正确映射示例:
"Ports": {
"8888/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "30888"
}
]
}
- 如果没有映射,需要在
docker-compose.yml或docker run命令中添加:
ports:
- "30888:8888"
然后重启容器:
docker-compose down
docker-compose up -d
3. 测试端口是否能访问
- 在虚拟机上:
curl http://127.0.0.1:30888/health
- 在其他主机上:
curl http://<虚拟机IP>:30888/health
- 确认返回健康状态或接口可用。
4. 自动化多云监控指标同步
- 目标:监控指标自动同步到告警平台,而不是手动配置每个节点。
- 方法:
- 通过 Cloudpods API 获取监控节点列表。
- 使用 APIGateway 接口批量注册节点到告警平台。
- 设置定时任务或脚本,实现增量同步。
实现方案1
——————————–未测试————————————–
1️⃣ 各个云环境的监控服务器(采集端)
- 每个云环境(如 AWS、阿里云、私有云等)上都部署监控服务器,它做两件事:
- 采集自身资源指标:CPU、内存、磁盘、网络、虚拟机状态等。
- 常用方式:Node Exporter、应用自身的 metrics 接口(Go/Java/Python 服务)等。
- 暴露指标给 Prometheus:通常是 HTTP
/metrics接口,Prometheus 可以去抓。
- 采集自身资源指标:CPU、内存、磁盘、网络、虚拟机状态等。
重点:采集端只负责本云环境的指标采集,不做跨云聚合和告警计算。
2️⃣ 中央 Prometheus(集中端)
- 功能:统一拉取所有云环境的指标,做集中存储和告警。
- 工作方式:
- 对每个云环境的采集端做
scrape(抓取): scrape_configs:
– job_name: ‘aws-monitor’
static_configs:
– targets: [‘aws_vm1_ip:9100’, ‘aws_vm2_ip:9100’]
– job_name: ‘aliyun-monitor’
static_configs:
– targets: [‘aliyun_vm1_ip:9100’, ‘aliyun_vm2_ip:9100’] - 对抓取到的指标统一管理告警规则,例如 CPU > 80% 就告警。
- 可通过 Alertmanager 发送告警到邮箱、钉钉、企业微信等。
- 对每个云环境的采集端做
重点:中央 Prometheus 不采集应用资源,它只是把所有指标集中起来,并统一做告警。
3️⃣ Cloudpods API(云资源管理端)
- Cloudpods 本身是一个多云管理平台,它知道各云上有哪些资源:主机、虚拟机、存储、网络等。
- 它本身不做实时指标采集(可能有自己的监控模块,但不是必须的),而是提供 API 给外部使用:
- 获取各云环境的资源信息(IP、主机名、指标端口等)。
- 管理告警模板和策略。
- 你的脚本可以调用 Cloudpods API,把各云环境的资源信息转化为 Prometheus targets 文件,这样中央 Prometheus 就能自动发现要抓取的指标。
换句话说:Cloudpods 提供“谁存在、在哪儿、端口多少”,而中央 Prometheus 去真正抓指标。
4️⃣ 告警平台
- 功能:根据中央 Prometheus 的指标做统一告警。
- 原理:
- 你在中央 Prometheus 写一次告警规则。
- 所有云环境的指标都在中央 Prometheus,就可以统一判断告警条件。
- 通过 Alertmanager 或 Cloudpods API 下发通知。
重点:告警规则只写一次,告警触发集中处理,不再分散到各云环境。
5️⃣ 工作流程总结
[云环境监控端] Node Exporter/应用指标 --> 暴露 /metrics
|
v
[中央 Prometheus] 拉取所有云环境指标 --> 存储 + 告警计算
|
v
[Alertmanager/告警平台] 统一通知
[Cloudpods API] 提供资源信息 --> 自动生成 Prometheus targets
- 采集端:只采集自身指标。
- 中央 Prometheus:拉取所有指标,统一告警。
- Cloudpods API:提供资源列表,辅助自动发现。
- 告警平台:统一通知,不再手动配置每个云的告警。
综上:引入 Cloudpods 的实质性帮助
- 自动发现资源
- Cloudpods 本身管理多云资源(虚拟机、裸金属、网络等)
- 提供 API 查询功能:你可以通过脚本获取所有云环境的资源信息(IP、主机名、端口等)
- 效果:不用手动在 Prometheus 配置
targets,资源变化(新增/删除主机)可以自动同步
- 统一管理告警策略
- 你可以在 Cloudpods 里维护告警模板和策略
- 脚本可以把这些策略和资源映射到 Prometheus/Alertmanager
- 效果:告警规则只需写一次,就能覆盖所有云环境,减少重复配置
- 减少配置出错和维护成本
- Cloudpods 提供了资源和策略的“单一来源”,Prometheus 拉取指标时只需依赖 Cloudpods API
- 新加或删掉云环境时,只需要更新 Cloudpods 信息,Prometheus targets 文件就能自动生成
- 效果:真正实现“多云统一监控 + 告警”,不需要手动在每个云环境重复操作
4. 解决 Pulumi 麻烦的问题
- Pulumi 需要写代码(TypeScript/Python/Go)去管理云资源,比较重。
- Cloudpods 提供 UI + API,不需要写代码就能完成资源编排。
- 如果一定要结合 Pulumi,可以通过 Pulumi 调用 Cloudpods 的 API → 由 Cloudpods 代理管理阿里云/AWS。
📌 建议:内部场景直接用 Cloudpods 的 API + UI,Pulumi 可以不用。
Pulumi 在多云监控场景的痛点
假设你要做统一监控和告警,Pulumi 可能遇到的问题:
- 无法直接管理指标采集配置
- Pulumi 管理的是云资源(虚拟机、网络等),不管 VM 内部的 Node Exporter 或应用指标如何抓取。
- 多云资源发现麻烦
- 你要在 Prometheus targets 中添加新 VM 或新云环境,Pulumi 的 IaC 代码可能无法直接把这些动态生成的指标端口暴露给 Prometheus。
- 告警配置依然分散
- 你需要在每个云的 Prometheus 或监控模块单独写告警规则,如果 Pulumi 只管理资源而不管理指标采集,告警规则更新仍然手动或分散。
引入 Cloudpods 可以解决的痛点
Cloudpods 是一个多云管理平台,在你的场景下,它可以提供 Pulumi 做不到的几个功能:
| Pulumi 的局限 | Cloudpods 的解决方案 |
|---|---|
| 资源变更后 Prometheus targets 不自动更新 | Cloudpods API 提供云环境资源信息(IP、端口、主机名),可以自动生成 Prometheus targets 配置,实现 动态发现 |
| 不能统一管理监控告警 | 将指标集中到中央 Prometheus + Cloudpods API 管理告警模板,实现统一告警 |
| 各云指标采集配置分散 | Cloudpods 本身可集成监控模块,或者通过 API 管理采集配置,简化多云采集端配置 |
5. 是否能对接阿里云和 AWS 所有资源
- Cloudpods 官方文档说明:支持 主流核心资源(ECS/EC2、RDS、VPC、SLB、OSS/S3、Redis 等)。
- 并不是 100% 支持所有资源(比如某些新出的 AI 服务)。
- 实际可以通过:
- 使用 Cloudpods 已经支持的 API
- 不支持的资源 → 直接调用阿里云/AWS SDK
📌 建议:日常运维统一走 Cloudpods;特殊资源直接走云厂商 API。
✅ Cloudpods 支持的资源类型
Cloudpods 支持管理以下资源类型:
- 计算资源:虚拟机(VM)、裸金属服务器、容器集群等。
- 网络资源:VPC、子网、安全组、负载均衡等。
- 存储资源:云硬盘、对象存储、文件存储等。
- 数据库资源:关系型数据库、NoSQL 数据库等。
- 中间件资源:Redis、RabbitMQ、Kafka 等。
- 监控与日志:Prometheus、Grafana、Elasticsearch 等。
- 身份与权限管理:IAM、SSO、RBAC 等。
- 自动化与调度:自动化任务、调度器等。
❌ 目前不支持的资源类型
根据 Cloudpods 的文档和社区讨论,以下资源类型可能尚未完全支持或正在开发中:
- 某些云服务的特定功能:如 AWS 的 Lambda、Azure 的 Functions 等。
- 某些云服务的高级功能:如 AWS 的 Aurora、Azure 的 Cosmos DB 等。
- 某些云服务的特定区域或版本:如某些云服务仅在特定区域或版本中可用,可能尚未被 Cloudpods 支持。
需要注意的是,Cloudpods 是一个开源项目,其功能和支持的资源类型会随着版本的更新而不断增加和完善。
三、功能配置说明
1、默认管理员账号
Cloudpods 安装包通常默认提供一个管理员账号,具体可能在 docker-compose.yml 或初始化脚本中定义:
官方默认登录用户密码为:admin 和 admin@123

2、配置云账号界面功能说明
云账号管理配置界面
点击【多云管理】——【云账号】

【新建】

以阿里云配置为例

配置云账号

1️⃣ 资源归属方式
这是在 云账号/订阅的资源同步时,决定同步下来的 VM、镜像、网络等资源属于哪个项目(Project / Domain)。
- 根据同步策略归属(推荐)
- 你可以在“同步策略”里定义资源要放到哪个项目。
- 灵活性高,适合多云统一管理。
- 根据云上项目归属
- 如果云厂商本身有项目(如阿里云的 Resource Group、AWS 的 Project Tag),Cloudpods 会照着放。
- 适合和现有云上组织结构保持一致。
- 根据云订阅归属
- 一般用于 Azure / Office 365 这种“订阅”概念的云平台。
- 每个订阅下的资源自动划到对应的项目。
- 指定项目
- 所有资源一律放到你指定的某个项目下。
- 适合小规模场景,简单直接。
- 屏蔽同步资源
- 同步时忽略这些资源(Cloudpods 不管理)。
- 适合你只想管部分资源,不想管全部。
👉 建议: 如果你是测试环境,可以直接用 指定项目 → 默认项目;生产环境建议用 根据同步策略归属。
2️⃣ 代理
有些云厂商的 API 无法直接访问(比如 Google Cloud、部分 AWS 区域)。
- 填写 HTTP/HTTPS 代理地址,例如:
http://proxy.company.com:8080
- 如果你没用 GCP 或国外云,这里可以留空。
3️⃣ 开启免密登录
- 开启后,Cloudpods 会把自身的 SAML 信息同步到云平台。
- 意味着你可以用 Cloudpods 的账号直接登录云厂商控制台(SSO 单点登录)。
- 前提:云厂商得支持 SAML(如 AWS、阿里云 RAM)。
👉 测试环境可以不开,生产环境有 SSO 需求再配置。
4️⃣ 只读模式
- 开启后,这个云账号在 Cloudpods 中只能做 同步(查看云上资源),不能做新建/删除操作。
- 避免误删云上的重要资源。
👉 建议:
- 前期接入云账号测试 → 开启只读模式(安全)。
- 确认没问题,再关闭只读模式,允许 Cloudpods 下发操作。
配置同步资源区域

定时同步任务设置

🔹附:新建同步策略步骤

- 进入控制台 → 同步策略页面 → 点击“新建” (不同厂商位置可能不同,比如阿里云在 资源目录 / 资源管理 里,华为云/腾讯云也有类似菜单)
- 填写基本信息
- 域:选择策略所属的域(通常只有一个 Default 域)。
- 名称:按规则输入,例如
sync-ecs-prod(不能以-结尾)。 - 备注:可以写“生产环境ECS同步策略”。
- 配置规则
- 条件:用来筛选哪些资源要同步(比如云账号下的 ECS、数据库等)。
- 标签:可绑定最多 20 个标签,常见做法是通过标签区分项目(如
env=prod、dept=finance)。 - 归属类型:
- 指定项目:选择目标项目,符合条件的资源同步后自动放入该项目。
- 指定名称:可以进一步细化(比如实例名包含 “prod”)。
- 共享范围
- 不共享:资源只归属到目标项目,不对其他项目可见。
- 全局共享:资源同步后,所有项目都能访问。
- 保存策略
- 多个规则时要注意顺序,从上到下优先级逐渐降低。
- 建议把“特定条件”的规则放在前面,“兜底规则”放在最后。
- 执行同步
- 策略保存后,需要执行一次“同步云账号资源”,才能把现有资源归类到对应项目里。
- 后续会自动按策略规则定期同步。
3、新建用户说明
选择【认证与安全】——【用户】——【新建用户】——填写用户信息

将用户加入项目

新建或选择项目

加入具体项目

4、通知

5、关联 LDAP
点击【认证与安全】——【认证源】——【新建】

填写格式(参照已测试成功的)

使用 LDAP 登录

如果未授权将其加入域和项目会报错

修改权限


设置项目角色

四、最新问题解析
以下为工作过程中同事发现的问题即解决方案记录
2025.9.12
1、权限问题
Cloudpods可以根据项目分配权限吗?
Cloudpods 支持根据项目分配权限,并且结合角色做到很细粒度的控制。
Cloudpods 本身有一个完整的 RBAC(基于角色的访问控制)模型,它不仅能按用户/角色分配权限,还能结合 项目(Project) 来做精细化控制。
📌 Cloudpods 权限模型核心概念
- 域(Domain)
- 相当于一个大的组织单位,比如公司、子公司。
- 项目(Project)
- 域下面可以创建多个项目(类似部门/业务线)。
- 每个项目下可以托管不同的资源(主机、存储、网络)。
- 角色(Role)
- 定义一组权限(如只读、管理员、操作员)。

- 用户(User)/组(Group)
- 用户和用户组可以被分配到项目里,并赋予特定的角色。
2、控制面板数据准不准?怎么得到的?底层原理?
🔎 Cloudpods 控制面板数据来源
- 云平台 API 同步
- 对接阿里云、AWS、腾讯云等时,Cloudpods 会调用官方 API(比如 ECS、VPC、RDS 等接口),把返回的数据存到本地数据库。
- 这些数据是准实时的(同步频率可设置,默认几分钟到几十分钟不等)。
- 私有云/宿主机监控
- 通过 telegraf agent 部署在宿主机或 VM 上,采集 CPU、内存、磁盘、网络等指标。
- 这些数据上报到 InfluxDB 或 VictoriaMetrics,再通过 Cloudpods 的 monitor 服务 提供 API/展示。
- Cloudmon 服务
- 用来周期性调用外部云平台 API,采集资源使用量、运行状态,甚至做 ping 连通性检测。
⚙️ 底层原理
- 资源类数据(主机/网络/存储)
- 通过云厂商 API 拉取 → 存数据库 → 控制面板展示。
- 和云厂商保持一致(只要 API 没延迟,数据就准确)。
- 监控类数据(CPU/内存/磁盘/网络)
- agent(telegraf)采集 → 时序数据库 → 控制面板查询。
- 数据是按秒/分钟采样的,延迟可能 5–30 秒。
- 告警/用量数据
- Cloudpods 会在本地计算(比如 CPU > 80% 持续 5 分钟触发告警),再统一推送到 UI 或 Webhook。
3、主机——>网络——>安全组 存储位置
具体数据库位置:
- Cloudpods 默认使用 MySQL(容器名叫
compose-mysql-1)。 - 安全组等资源信息存储在
yunioncloud这个数据库中(表:secgroups、secgrouprules)。
4、数据库存储问题汇总
docker-compose.yml 中数据库配置
mysql:
image: ${MARIADB_REPO:-registry.cn-beijing.aliyuncs.com/yunionio}/mariadb:10.5.19
volumes:
- ./data/var/lib/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: your-sql-password
MYSQL_TCP_PORT: '3306'
MYSQL_ROOT_HOST: '%'
MARIADB_AUTO_UPGRADE: 'true'
MARIADB_DISABLE_UPGRADE_BACKUP: 'true'
healthcheck:
test: mysqladmin ping -h mysql -P 3306 -p$$MYSQL_ROOT_PASSWORD
interval: 5s
timeout: 10s
retries: 10
start_period: 30s
- 资源同步日志:
- Cloudpods 在执行“资源同步”时,会记录同步过程。
- 日志存储在 本地数据库(
yunioncloud→cloudsync_tasks表),也会写入容器日志。 - 容器日志路径: docker logs compose-region-1 | grep sync(region 服务负责和云厂商 API 交互)
- 存储软件系统的用户名、密码:
- 所有云账号的 AK/SK、数据库连接信息都存在 MariaDB 里。
- 数据库:
yunioncloud - 表:
cloudaccounts(云账号)、users(用户)、credentials(凭据)。 - 密码通常是 加密后存储,Cloudpods 启动时通过本地配置文件加载解密密钥。
- 配置文件位置:
/etc/yunion/(宿主机上挂载到 region、keystone 容器)。
具体查找步骤说明
1️⃣ 进入数据库容器
docker exec -it compose-mysql-1 bash
2️⃣ 登录 MariaDB
容器内默认会有 mysql 客户端,尝试:
mysql -uroot -pyour-sql-password
👉 如果 Cloudpods 部署时设置过 root 密码,你需要输入。一般在 docker-compose.yml 或 .env 里有 MYSQL_ROOT_PASSWORD。已查询在docker-compose.yml中,默认密码为:your-sql-password
3️⃣ 显示所有数据库
进入数据库后执行:
SHOW DATABASES;
你会看到类似:
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| glance |
| information_schema |
| keystone |
| kubeserver |
| monitor |
| mysql |
| notify |
| performance_schema |
| webconsole |
| yunionansible |
| yunioncloud |
| yunioncloudid |
| yunionconf |
| yunionlogger |
+--------------------+
14 rows in set (0.004 sec)
MariaDB [(none)]>
这些就是 Cloudpods 各组件对应的数据库。
✅ 系统数据库(MariaDB 自带)
mysql:存放用户账号、权限、时区等数据库系统信息。information_schema:只读的系统视图,存放表结构、字段、索引等元数据。performance_schema:数据库性能相关信息(查询耗时、锁等待等)。
✅ 云平台业务相关数据库
glance存放镜像服务相关的元数据(比如系统镜像、ISO 镜像的 ID、路径、状态)。keystone身份认证与授权服务数据库,存放用户、租户(项目)、角色、Token 等信息。相当于“账号系统”。kubeserver容器(Kubernetes)管理相关数据,比如集群、节点、Pod 的元信息。monitor监控服务数据库,保存告警规则、监控指标的配置,以及告警历史。notify通知服务数据库,存放系统告警消息、邮件/短信/钉钉通知的记录与配置。webconsoleWeb 终端相关信息,比如用户通过 Web 打开的 VNC/SSH 会话记录、会话密钥。yunionansible自动化运维(Ansible)相关的数据,比如剧本执行记录、任务状态。yunioncloud云资源管理的核心数据库,存放虚拟机、网络、磁盘、宿主机等最主要的 IaaS 元数据。yunioncloudid云账号管理数据库,存放 AWS、阿里云、腾讯云等公有云账号信息、同步的资源。yunionconf平台全局配置管理数据库,比如服务配置项、参数。yunionlogger日志服务数据库,存放操作日志、安全审计记录。
4️⃣ 查找数据库存储位置
MariaDB/MySQL 在容器里的数据通常挂载在 /var/lib/mysql。
在容器里执行:
mysql -uroot -p -e "SHOW VARIABLES LIKE 'datadir';"
输出类似:
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
5️⃣ 查看宿主机上的实际存储路径
退出容器后,回到宿主机:
docker inspect compose-mysql-1 | grep Mounts -A 10
这会显示类似:
[root@akuvox ~]# docker inspect compose-mysql-1 | grep Mounts -A 10
"Mounts": [
{
"Type": "bind",
"Source": "/root/ocboot/compose/data/var/lib/mysql",
"Destination": "/var/lib/mysql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
[root@akuvox ~]#
👉 这里的 Source 就是你宿主机上的真实存储位置,所有数据库表文件都在里面。
6️⃣ 验证数据文件
在宿主机上直接查看:
ls -lrth /root/ocboot/compose/data/var/lib/mysql
你会看到一堆以数据库名命名的目录,比如:
[root@akuvox ~]# ls -lrth /root/ocboot/compose/data/var/lib/mysql
total 202M
drwx------ 2 polkitd input 20 Sep 4 15:05 performance_schema
-rw-r--r-- 1 polkitd input 15 Sep 4 15:05 mysql_upgrade_info
-rw-rw---- 1 polkitd input 0 Sep 4 15:05 multi-master.info
drwx------ 2 polkitd input 4.0K Sep 4 15:05 mysql
drwx------ 2 polkitd input 4.0K Sep 4 15:06 keystone
drwx------ 2 polkitd input 168 Sep 4 15:07 webconsole
drwx------ 2 polkitd input 4.0K Sep 4 15:07 yunionansible
drwx------ 2 polkitd input 4.0K Sep 4 15:07 yunionconf
drwx------ 2 polkitd input 4.0K Sep 4 15:07 yunionlogger
drwx------ 2 polkitd input 4.0K Sep 4 15:07 glance
drwx------ 2 polkitd input 4.0K Sep 4 15:07 notify
drwx------ 2 polkitd input 4.0K Sep 4 15:07 kubeserver
drwx------ 2 polkitd input 16K Sep 4 15:08 yunioncloud
drwx------ 2 polkitd input 4.0K Sep 4 15:08 monitor
drwx------ 2 polkitd input 4.0K Sep 4 15:08 yunioncloudid
-rw-rw---- 1 polkitd input 15K Sep 5 15:57 ib_buffer_pool
-rw-rw---- 1 polkitd input 12M Sep 11 17:48 ibtmp1
-rw-rw---- 1 polkitd input 76M Sep 12 11:30 ibdata1
-rw-rw---- 1 polkitd input 18M Sep 12 11:40 aria_log.00000001
-rw-rw---- 1 polkitd input 52 Sep 12 11:40 aria_log_control
-rw-rw---- 1 polkitd input 96M Sep 12 11:53 ib_logfile0
[root@akuvox ~]#
里面就是 .ibd 和 .frm 文件,真正存储数据库内容。
最大 IOPS属于高级属性,需要 事件或增量同步触发,或者是 最新 API 扩展字段。
五、Cloudpods 补充功能预研
1、cloudpods对接openldap
2、接口的调用包括:
创建虚拟机,删除虚拟机,变更虚拟机配置
3、Cloudpods 云盘备份接口
4、系统镜像、自动快照策略这两个确认下是否没办法同步到cloudpods
1️⃣ Cloudpods 对接 OpenLDAP
官方文档:https://www.cloudpods.org/docs/guides/auth_security/identity/providers/ldap/
- ✅ Cloudpods 原生支持 LDAP 认证源,可对接 OpenLDAP / Active Directory。
- 在 Cloudpods 管理控制台 → 认证源 中可以添加 LDAP,配置 Base DN、Bind DN、用户/组过滤规则。
- 常见应用场景:集中账号管理,实现单点登录(SSO)。
- 注意点:Cloudpods 内部 RBAC 权限和 OpenLDAP 组关系需要映射,才能完成角色权限管理。
创建认证源填写说明
- 认证源归属:
- 例:
系统(选择“系统”或相应选项,表示这是系统级认证源)
- 系统级认证源(选择“系统”):
- 表示这个认证源在整个 Cloudpods 平台范围内都可用。
- 系统管理员可以用它来统一导入用户,然后再把用户分配到不同域(tenant/project)。
- 适合:公司级统一账号系统(比如一个全局 OpenLDAP / AD)。
- 影响:所有域都能共享这个认证源的账号。
- 域级认证源(选择某个“域”):
- 表示认证源只对这个域(类似于一个租户 / 部门)生效。
- 认证和用户同步只在该域内可见。
- 适合:多租户场景,不同部门/客户有自己的 LDAP/AD,各自管理。
- 影响:只有该域下的用户能使用这个认证源。
- 例:
- 域 / 归属域:
- 说明:可选,指定当前认证源绑定到哪个“域”/租户;为空则按你描述会创建同名域,若同名会追加
-1。 - 示例:
ocdc.com或 留空(Cloudpods 自动创建域)。
- 说明:可选,指定当前认证源绑定到哪个“域”/租户;为空则按你描述会创建同名域,若同名会追加
- 名称:请输入认证源名称(平台内显示名)
- 示例:
openldap-ocdc
- 示例:
- 备注:任意备注
- 示例:
OpenLDAP for dev environment
- 示例:
协议与类型
- 认证协议:
LDAP或LDAPS(如果要加密请选择 LDAPS 或 使用 StartTLS)- 示例:
LDAP(明文端口 389)或LDAPS(端口 636)
- 示例:
- 认证类型:选择
OpenLDAP/FreeIPA导入单域(要的是 OpenLDAP)
目标域/用户归属
- 用户归属目标域(选填):
- 说明:若填写,会将导入用户归到指定域;为空则系统自动用认证源名称做域名(若重复追加
-1)。 - 示例:
ocdc.com或 留空
- 说明:若填写,会将导入用户归到指定域;为空则系统自动用认证源名称做域名(若重复追加
连接 & 搜索基础(必须正确)
正确写法示例
- 服务器地址: ldap://192.168.201.120:389
- 基本 DN(Base DN): DC=fz,DC=akubela,DC=local
- 用户名: CN=Manager,DC=fz,DC=akubela,DC=local
- 密码:
Manager密码 - 用户DN: OU=智能家居事业部,DC=fz,DC=akubela,DC=local
- 组DN: OU=Group,DC=fz,DC=akubela,DC=local
用户启用状态
- 启用 / 禁用:
- 说明:选择“启用”表示导入后的用户状态为启用(可登录)。选择“禁用”则相反,之后可在用户列表调整状态。
- 示例:
启用
2️⃣ 接口调用(创建 / 删除 / 修改虚拟机配置)
官网API调用过程:https://www.cloudpods.org/docs/development/apisdk/api
Cloudpods 官方API文档:https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd
创建虚拟机实例
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342722964
创建主机快照
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342723018
创建快照
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342723154
创建自动快照策略
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342723141
删除虚拟机
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342722965
更新(修改配置)
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342723111
云盘备份接口
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342722123
- ✅ Cloudpods 提供 RESTful API 和 OpenAPI 接口文档。
- 核心 API 涉及:
- 创建虚拟机:
/serversPOST - 删除虚拟机:
/servers/{id}DELETE - 修改配置(CPU/内存/磁盘):
/serverskus/{id}PATCH
- 创建虚拟机:
- 调用前需要获取
token(对接 Keystone 风格认证),接口权限基于用户/项目。
bash-5.1# climc credential-create-aksk
+------------+----------------------------------------------+
| Field | Value |
+------------+----------------------------------------------+
| access_key | d5ebabafa84143468bccb15d19ecef64 |
| expire | 0 |
| secret | elBZYXRqZmFlVXRoU2tnc1hlS1NFd1c4YlY3blljZXk= |
+------------+----------------------------------------------+
bash-5.1# climc credential-get-aksk
+--------+----------------------------------+----------------------------------+----------------------------------------------+----------------------+
| expire | key_id | project_id | secret | time_stamp |
+--------+----------------------------------+----------------------------------+----------------------------------------------+----------------------+
| 0 | d5ebabafa84143468bccb15d19ecef64 | ca48138e18534f1987edbb28e872e055 | elBZYXRqZmFlVXRoU2tnc1hlS1NFd1c4YlY3blljZXk= | 2025-09-29T10:08:26Z |
+--------+----------------------------------+----------------------------------+----------------------------------------------+----------------------+
*** Total: 1 ***
bash-5.1#
3️⃣ 云盘备份接口
https://s.apifox.cn/f917f6a6-db9f-4d6a-bbc3-ea58c945d7fd/api-342722123
- ✅ Cloudpods 支持云硬盘快照(Snapshot),同时提供 备份接口。
- 云盘可通过 API 创建快照,并基于快照生成备份。
- 接口示例:
- 创建快照:
/snapshotsPOST - 云盘备份:
/diskbackupsPOST
- 创建快照:
- 与虚拟机备份不同:
- 虚拟机备份通常是基于镜像 + 配置导出
- 云盘备份是针对存储卷的快照级备份
- 结论:云盘备份接口是存在且可用的。
4️⃣ 系统镜像 & 自动快照策略同步问题
- 系统镜像:
- Cloudpods 自身镜像仓库与云厂商(如阿里云、腾讯云)的镜像 不能自动同步。
- 想要使用,需要手动导入镜像(上传 ISO/镜像文件)或对接已有镜像仓库。
- 所以:❌ 没法自动同步,需要手动导入。对于 公共/社区镜像,从 v3.7 起 Cloudpods 平台确实有周期同步公共镜像并从 OSS 拉取(即公共镜像能“自动”出现在平台)。cloudpods.org+1对于 云厂商私有/自定义镜像:仍需要通过 cloud account 同步或手动导入(不能自动把云厂商私有镜像全部搬过来,除非你设置云账号同步或导入流水线)。
- 自动快照策略:
- Cloudpods 支持创建快照任务,但和阿里云、腾讯云的自动快照策略 无法直接同步。
- 如果你想要“同步云厂商已有的快照策略”,目前 Cloudpods 不支持,需要自己在 Cloudpods 内定义调度策略。
- 所以:❌ 不能直接同步,需要重新配置策略。官网没有文档说明它会把云厂商的“自动快照策略对象”自动导入并在 Cloudpods 中作为策略继续执行
六、Cloudpods 新增问题【2025.10.9】
1、阿里云创建虚拟机只能创建在乌兰察布
# 1. 查看 Cloudpods 内同步的阿里云 Region
climc cloud-region-list --provider Aliyun
# 2. 查看同步的 VPC
climc vpc-list --provider Aliyun
以上命令可以清晰看到:
Region 列表——已同步到全球阿里云 20+ 区域(包括北京、上海、香港、深圳、乌兰察布等)
VPC 列表——仅有 1 条记录 → Board-Uat-HomeCloud-Cn-ulanqab-Vpc001
说明只有乌兰察布区域存在 VPC,其他区域未同步到 VPC 信息
为什么前端只显示「乌兰察布」
Cloudpods 在创建虚拟机时有一个非常严格的逻辑:
只显示那些:
- 区域存在;
- 区域内存在至少一个
available状态的 VPC;- 且 VPC 内有至少一个可用子网 (VSwitch)。
修复步骤:
步骤 1:在阿里云控制台创建 VPC
- 登录阿里云控制台 → ECS → 网络与安全 → 专有网络 VPC
- 选择区域:例如
华北2(张家口) - 创建一个新的:
- VPC 名称:
Cloudpods-zhangjiakou - 网段:
192.168.0.0/16
- VPC 名称:
- 然后在该 VPC 下创建一个子网(VSwitch):
- 可用区:随机选一个
- 子网:
192.168.1.0/24
步骤 2:让 Cloudpods 同步 VPC
2、阿里云IOPS无法同步到Cloudpods
原因如下:
- Cloudpods 内部没有实例级最大 IOPS 字段
- Cloudpods 的数据模型里只存储了实例基础信息(CPU、内存、状态、绑定磁盘等),不存储“虚拟机最大 IOPS”这个衍生属性。
- Web 界面显示的
-就是 没有数据 的占位符,并不是 Cloudpods 获取失败。
- Web 界面显示逻辑
- Web 界面会尝试从实例绑定的磁盘推算最大 IOPS。
- 如果 Cloudpods 没有做推算逻辑,或者实例磁盘信息不全(比如磁盘类型未知、云厂商字段未同步),就显示
-。
- 为什么阿里云控制台能显示而 Cloudpods 不能
- 阿里云控制台自己有 磁盘类型 + 磁盘大小 + 实例规格的映射表,所以可以直接显示最大 IOPS。
- Cloudpods 默认 不包含这个映射表,也没有自动计算逻辑,所以 CLI 和 Web 都显示为空或
-。
如果你想在 Cloudpods Web 界面显示最大 IOPS,需要在 Cloudpods 数据模型里增加字段并写计算逻辑,或者通过外部脚本计算后显示。
3、AWS AMI无法同步到Cloudpods
【未解决】可能包含镜像类型、区域限制等问题
4、系统镜像、自动快照策略—不能同步
【未解决】可能是云端API返回字段或状态与Cloudpods不同导致过滤
5、cloudpods有自己内置的系统镜像,可以用于创建虚拟机,但是读取不到proxmox上的镜像
目前测试201网段正常,可以读取到
在创建虚拟机时:
需要选中”指定项目“ ”区域“,然后再选择”操作系统“,”私有云ISO镜像“,这里分为Ubuntu和Linux(即CentOS等),对应不同存储路径上的镜像。
6、cloudpods读取不到proxmox上的虚拟机模板
Cloudpods可以正常读取到Template虚拟机,展示在“虚拟机”中,同正常虚拟机。
主机模版未显示:
可能是由于虚拟机模板没有标签显示为template,过滤了,作为正常虚拟机展示
目前测试修改不了标签。
内容源自公司工作要求记录,成果隶属星网锐捷所有!
作者
fffff@xf.nn
