×

本文源自根据工作要求预研记录,部分内容可能有误,同时未贴合大众学习使用路线,严谨操作请关注官方!

一、安装部署

🔧 前置准备

环境准备

  • 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 端口,如端口被占用,可修改为 84439443
  • 端口修改位置: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:核心 API
  • compose-apigateway-1:API 网关
  • compose-scheduler-1:调度器
  • compose-glance-1:镜像服务
  • compose-monitor-1:监控服务
  • compose-web-1:Web UI
  • compose-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。
  • 登录后进入 “云账号管理” 页面,添加云账号:
    1. 选择「云账号」→「添加」
    2. 填写阿里云 AccessKey ID/Secret,或 AWS 的 Key/Secret
    3. 选择同步模式(手动/自动)
    4. 保存后,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.ymldocker 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. 自动化多云监控指标同步
  • 目标:监控指标自动同步到告警平台,而不是手动配置每个节点。
  • 方法:
    1. 通过 Cloudpods API 获取监控节点列表。
    2. 使用 APIGateway 接口批量注册节点到告警平台。
    3. 设置定时任务或脚本,实现增量同步。

实现方案1

——————————–未测试————————————–

1️⃣ 各个云环境的监控服务器(采集端)

  • 每个云环境(如 AWS、阿里云、私有云等)上都部署监控服务器,它做两件事:
    1. 采集自身资源指标:CPU、内存、磁盘、网络、虚拟机状态等。
      • 常用方式:Node Exporter、应用自身的 metrics 接口(Go/Java/Python 服务)等。
    2. 暴露指标给 Prometheus:通常是 HTTP /metrics 接口,Prometheus 可以去抓。

重点:采集端只负责本云环境的指标采集,不做跨云聚合和告警计算。


2️⃣ 中央 Prometheus(集中端)

  • 功能:统一拉取所有云环境的指标,做集中存储和告警。
  • 工作方式:
    1. 对每个云环境的采集端做 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’]
    2. 对抓取到的指标统一管理告警规则,例如 CPU > 80% 就告警。
    3. 可通过 Alertmanager 发送告警到邮箱、钉钉、企业微信等。

重点:中央 Prometheus 不采集应用资源,它只是把所有指标集中起来,并统一做告警。


3️⃣ Cloudpods API(云资源管理端)

  • Cloudpods 本身是一个多云管理平台,它知道各云上有哪些资源:主机、虚拟机、存储、网络等。
  • 本身不做实时指标采集(可能有自己的监控模块,但不是必须的),而是提供 API 给外部使用:
    1. 获取各云环境的资源信息(IP、主机名、指标端口等)。
    2. 管理告警模板和策略。
  • 你的脚本可以调用 Cloudpods API,把各云环境的资源信息转化为 Prometheus targets 文件,这样中央 Prometheus 就能自动发现要抓取的指标。

换句话说:Cloudpods 提供“谁存在、在哪儿、端口多少”,而中央 Prometheus 去真正抓指标。


4️⃣ 告警平台

  • 功能:根据中央 Prometheus 的指标做统一告警。
  • 原理:
    1. 你在中央 Prometheus 写一次告警规则。
    2. 所有云环境的指标都在中央 Prometheus,就可以统一判断告警条件。
    3. 通过 Alertmanager 或 Cloudpods API 下发通知。

重点:告警规则只写一次,告警触发集中处理,不再分散到各云环境。


5️⃣ 工作流程总结

 [云环境监控端] Node Exporter/应用指标 --> 暴露 /metrics
            |
            v
 [中央 Prometheus] 拉取所有云环境指标 --> 存储 + 告警计算
            |
            v
 [Alertmanager/告警平台] 统一通知
           
 [Cloudpods API] 提供资源信息 --> 自动生成 Prometheus targets
  • 采集端:只采集自身指标。
  • 中央 Prometheus:拉取所有指标,统一告警。
  • Cloudpods API:提供资源列表,辅助自动发现。
  • 告警平台:统一通知,不再手动配置每个云的告警。

综上:引入 Cloudpods 的实质性帮助

  1. 自动发现资源
    • Cloudpods 本身管理多云资源(虚拟机、裸金属、网络等)
    • 提供 API 查询功能:你可以通过脚本获取所有云环境的资源信息(IP、主机名、端口等)
    • 效果:不用手动在 Prometheus 配置 targets,资源变化(新增/删除主机)可以自动同步
  2. 统一管理告警策略
    • 你可以在 Cloudpods 里维护告警模板和策略
    • 脚本可以把这些策略和资源映射到 Prometheus/Alertmanager
    • 效果:告警规则只需写一次,就能覆盖所有云环境,减少重复配置
  3. 减少配置出错和维护成本
    • 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 可能遇到的问题:

  1. 无法直接管理指标采集配置
    • Pulumi 管理的是云资源(虚拟机、网络等),不管 VM 内部的 Node Exporter 或应用指标如何抓取。
  2. 多云资源发现麻烦
    • 你要在 Prometheus targets 中添加新 VM 或新云环境,Pulumi 的 IaC 代码可能无法直接把这些动态生成的指标端口暴露给 Prometheus。
  3. 告警配置依然分散
    • 你需要在每个云的 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 服务)。
  • 实际可以通过:
    1. 使用 Cloudpods 已经支持的 API
    2. 不支持的资源 → 直接调用阿里云/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 下发操作。

配置同步资源区域

定时同步任务设置

🔹附:新建同步策略步骤

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

3、新建用户说明

选择【认证与安全】——【用户】——【新建用户】——填写用户信息

将用户加入项目

新建或选择项目

加入具体项目

4、通知

5、关联 LDAP

点击【认证与安全】——【认证源】——【新建】

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

使用 LDAP 登录

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

修改权限

设置项目角色

四、最新问题解析

以下为工作过程中同事发现的问题即解决方案记录

2025.9.12

1、权限问题

Cloudpods可以根据项目分配权限吗?

Cloudpods 支持根据项目分配权限,并且结合角色做到很细粒度的控制。

Cloudpods 本身有一个完整的 RBAC(基于角色的访问控制)模型,它不仅能按用户/角色分配权限,还能结合 项目(Project) 来做精细化控制。


📌 Cloudpods 权限模型核心概念

  1. 域(Domain)
    • 相当于一个大的组织单位,比如公司、子公司。
  2. 项目(Project)
    • 域下面可以创建多个项目(类似部门/业务线)。
    • 每个项目下可以托管不同的资源(主机、存储、网络)。
  3. 角色(Role)
    • 定义一组权限(如只读、管理员、操作员)。
  1. 用户(User)/组(Group)
    • 用户和用户组可以被分配到项目里,并赋予特定的角色。

2、控制面板数据准不准?怎么得到的?底层原理?

🔎 Cloudpods 控制面板数据来源

  1. 云平台 API 同步
    • 对接阿里云、AWS、腾讯云等时,Cloudpods 会调用官方 API(比如 ECS、VPC、RDS 等接口),把返回的数据存到本地数据库。
    • 这些数据是准实时的(同步频率可设置,默认几分钟到几十分钟不等)。
  2. 私有云/宿主机监控
    • 通过 telegraf agent 部署在宿主机或 VM 上,采集 CPU、内存、磁盘、网络等指标。
    • 这些数据上报到 InfluxDB 或 VictoriaMetrics,再通过 Cloudpods 的 monitor 服务 提供 API/展示。
  3. Cloudmon 服务
    • 用来周期性调用外部云平台 API,采集资源使用量、运行状态,甚至做 ping 连通性检测。

⚙️ 底层原理

  • 资源类数据(主机/网络/存储)
    • 通过云厂商 API 拉取 → 存数据库 → 控制面板展示。
    • 和云厂商保持一致(只要 API 没延迟,数据就准确)。
  • 监控类数据(CPU/内存/磁盘/网络)
    • agent(telegraf)采集 → 时序数据库 → 控制面板查询。
    • 数据是按秒/分钟采样的,延迟可能 5–30 秒。
  • 告警/用量数据
    • Cloudpods 会在本地计算(比如 CPU > 80% 持续 5 分钟触发告警),再统一推送到 UI 或 Webhook。

3、主机——>网络——>安全组 存储位置

具体数据库位置

  • Cloudpods 默认使用 MySQL(容器名叫 compose-mysql-1)。
  • 安全组等资源信息存储在 yunioncloud 这个数据库中(表:secgroupssecgrouprules)。

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 在执行“资源同步”时,会记录同步过程。
    • 日志存储在 本地数据库yunioncloudcloudsync_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 通知服务数据库,存放系统告警消息、邮件/短信/钉钉通知的记录与配置。
  • webconsole Web 终端相关信息,比如用户通过 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

协议与类型

  • 认证协议LDAPLDAPS(如果要加密请选择 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 涉及:
    • 创建虚拟机/servers POST
    • 删除虚拟机/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 创建快照,并基于快照生成备份。
  • 接口示例:
    • 创建快照:/snapshots POST
    • 云盘备份:/diskbackups POST
  • 与虚拟机备份不同:
    • 虚拟机备份通常是基于镜像 + 配置导出
    • 云盘备份是针对存储卷的快照级备份
  • 结论:云盘备份接口是存在且可用的。

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

  1. 登录阿里云控制台 → ECS → 网络与安全 → 专有网络 VPC
  2. 选择区域:例如华北2(张家口)
  3. 创建一个新的:
    • VPC 名称:Cloudpods-zhangjiakou
    • 网段:192.168.0.0/16
  4. 然后在该 VPC 下创建一个子网(VSwitch):
    • 可用区:随机选一个
    • 子网:192.168.1.0/24

步骤 2:让 Cloudpods 同步 VPC

2、阿里云IOPS无法同步到Cloudpods

原因如下:

  1. Cloudpods 内部没有实例级最大 IOPS 字段
    • Cloudpods 的数据模型里只存储了实例基础信息(CPU、内存、状态、绑定磁盘等),不存储“虚拟机最大 IOPS”这个衍生属性。
    • Web 界面显示的 - 就是 没有数据 的占位符,并不是 Cloudpods 获取失败。
  2. Web 界面显示逻辑
    • Web 界面会尝试从实例绑定的磁盘推算最大 IOPS。
    • 如果 Cloudpods 没有做推算逻辑,或者实例磁盘信息不全(比如磁盘类型未知、云厂商字段未同步),就显示 -
  3. 为什么阿里云控制台能显示而 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

文章推荐