Cloudpods是一个开源的Golang实现的云原生的融合多云/混合云的云平台,也就是一个“云上之云”。Cloudpods不仅可以管理本地的虚拟机和物理机资源,还可以管理多个云平台和云账号。Cloudpods隐藏了这些异构基础设施资源的数据模型和API的差异,对外暴露了一套统一的API,允许用户就像用一个云一样地访问多云。从而大大降低了访问多云的复杂度,提升了管理多云的效率。
谁需要Cloudpods?
- 将几台物理服务器虚拟化成一个私有云平台
- 需要一个紧凑而且功能相对完整的物理机全生命周期管理工具
- 将VMware vSphere虚拟化集群转换为一个可以自服务的私有云平台
- 在混合云的场景,能够在一个界面访问私有云和公有云
- 通过一个集中的入口访问分布在多个公有云平台上的多个账号
- 当前只使用一个云公有云账号但希望将来使用多云的用户
功能
请访问产品介绍页面了解详细信息。
支持的云平台
- 公有云:
- AWS
- Azure
- Google Cloud Platform
- 阿里云
- 华为云
- 腾讯云
- UCloud
- 天翼云
- 移动云
- 京东云
- 私有云:
- OpenStack
- ZStack
- Alibaba Cloud Aspara (阿里飞天)
- Huawei HCSO (华为HCSO)
- Nutanix
- 本地基础设施资源:
- 基于 KVM 实现的轻量级私有云
- VMWare vSphere vCenter/ESXi
- Baremetals (IPMI, Redfish API)
- Object storages (Minio, Ceph, XSky)
- NAS (Ceph)
支持的云资源
- Servers: instances, disks, network interfaces, networks, vpcs, storages, hosts, wires, snapshots, snapshot policies, security groups, elastic IPs, SSH keypairs, images
- Load Balancers: instances, listeners, backend groups, backends, TLS certificates, ACLs
- Object Storage: buckets, objects
- NAS: file_systems, access_groups, mount_targets
- RDS: instances, accounts, backups, databases, parameters, privileges
- Elastic Cache: instances, accounts, backups, parameters
- DNS: DNS zones, DNS records
- VPC: VPCs, VPC peering, inter-VPC network, NAT gateway, DNAT/SNAT rules, route tables, route entries
安装部署
请参考文档安装部署选择合适的场景部署。
文档
谁在使用Cloudpods?
请在这里查看Cloudpods用户列表。如果你正在使用Cloudpods,欢迎回复留下你的信息。谢谢对Cloudpods的支持!
cloudpods/README-CN.md at master · yunionio/cloudpods
yunionio/ocboot: Installation and setup tool of Cloudpods
ocboot 能够快速的在 CentOS 7 、Kylin V10、Debian 10等机器上搭建部署 Cloudpods 服务。
ocboot 依赖 ansible-playbook 部署 cloudpods 服务,可以在单节点使用 local 的方式部署,也可以在多个节点使用 ssh 的方式同时部署。
依赖说明
- 操作系统: Centos 7.x 、Kylin V10、Debian 10
- 最低配置要求: 4 核 8G
- 软件: ansible 4.0 ~ 9.0 (ansible-core: 2.11 ~ 2.16)
- 能够 ssh 免密登录待部署机器
使用方法
安装 ansible
ocboot 使用 buildash 运行容器来部署服务,容器镜像里面包含了 python3 和 ansible 等运行环境。
所以请先在自己的系统上安装 buildah ,请先参考 buildah installation instructions 安装 buildah。
clone 代码(三行代码运行)
$ git clone https://github.com/yunionio/ocboot.git $ cd ./ocboot
git clone https://github.com/yunionio/ocboot.git
cd ./ocboot
./ocboot.sh run.py virt 10.8.8.253
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6799fbcd5-6h46v 1/1 Running 0 20m
kube-system calico-node-4gwt6 1/1 Running 0 20m
kube-system local-path-provisioner-84db5d44d9-b68lt 1/1 Running 0 20m
kube-system metrics-server-67c658944b-zzvw5 1/1 Running 0 20m
kube-system helm-install-traefik-crd-scdnm 0/1 Completed 0 20m
kube-system calico-kube-controllers-6c88bdfb9d-rxg6n 1/1 Running 0 20m
kube-system helm-install-traefik-f64rl 0/1 Completed 1 20m
onecloud default-etcd-q44xvdvjwt 1/1 Running 0 19m
onecloud default-keystone-84c8554875-2zqpj 1/1 Running 0 19m
kube-system traefik-zmkfj 1/1 Running 0 18m
onecloud default-victoria-metrics-54b9f6b5cf-wj8tj 1/1 Running 0 17m
onecloud default-region-7c99d87598-t92bj 1/1 Running 0 17m
onecloud default-scheduler-7cf5556c7c-l8wdh 1/1 Running 0 17m
onecloud default-webconsole-f88946c7b-kbpjk 2/2 Running 0 17m
onecloud default-region-dns-mdcp2 1/1 Running 0 16m
onecloud default-esxi-agent-5bf584c684-bjndc 1/1 Running 0 16m
onecloud default-ansibleserver-7f585d7b76-g6jkf 1/1 Running 0 16m
onecloud default-apimap-5868d7b5f9-97xnv 1/1 Running 0 16m
onecloud default-apigateway-64bb48979c-twgjc 1/1 Running 0 16m
onecloud default-glance-58f9d8675d-s8fcj 1/1 Running 0 17m
onecloud default-ovn-north-649444d657-mpptc 1/1 Running 0 16m
onecloud default-monitor-647c45948d-sffzt 1/1 Running 0 16m
onecloud default-host-image-pbtvc 1/1 Running 0 16m
onecloud default-host-health-b5vsj 1/1 Running 0 16m
onecloud default-vpcagent-6cc4544cf5-bdtxm 1/1 Running 0 16m
onecloud default-kubeserver-68d44db89-fdw5w 1/1 Running 0 17m
onecloud default-cloudmon-7dd86f7df4-ldj66 1/1 Running 0 16m
onecloud default-devtool-7d7d765469-xjv2k 1/1 Running 0 15m
onecloud default-yunionconf-7b4c749c4f-rf8h6 1/1 Running 0 15m
onecloud default-cloudproxy-c54b6fd5d-2mgng 1/1 Running 0 15m
onecloud default-scheduledtask-fd977d4d4-gtz6r 1/1 Running 0 15m
onecloud default-logger-58b795c79d-bmdzz 1/1 Running 0 15m
onecloud default-web-554c88bbff-f9n6r 1/1 Running 0 16m
onecloud default-host-deployer-llzmq 1/1 Running 0 15m
onecloud default-notify-78f46c7fd-l8vwr 1/1 Running 0 15m
onecloud default-climc-5f79dc589f-x9pfz 1/1 Running 0 15m
onecloud-monitoring monitor-minio-77b98c57d7-78b9b 1/1 Running 0 15m
onecloud onecloud-operator-cc4775b9f-9hw27 1/1 Running 0 14m
onecloud default-host-jtsfx 3/3 Running 0 14m
onecloud default-telegraf-bf224 1/1 Running 0 17m
部署服务
ocboot 的运行方式很简单,只需要按自己机器的规划写好 yaml 配置文件,然后执行 ./ocboot.sh run.py full
脚本,便会使用 buildah 启动容器,然后在容器里面运行 ansible-playbook 在对应的机器上部署服务。
快速开始
- All in One 安装:在 CentOS 7 或 Debian 10 等发行版里搭建全功能 Cloudpods 服务,可以快速体验内置私有云和多云管理的功能。
- 多节点高可用安装:在生产环境中使用高可用的方式部署 Cloudpods 服务,包括内置私有云和多云管理的功能。
添加节点
添加节点使用 add-node 子命令把节点加入到已有集群。
# 比如把节点 192.168.121.61 加入到已有集群 192.168.121.21 $ ./ocboot.sh add-node 192.168.121.21 192.168.121.61 # 可以一次添加多个节点,格式如下 $ ./ocboot.sh add-node $PRIMARY_IP $node1_ip $node2_ip ... $nodeN_ip # 把 $node_ip ssh 端口 2222 的节点加入到 $PRIMARY_IP ssh 端口 4567 的集群 $ ./ocboot.sh add-node --port 4567 --node-port 2222 $PRIMARY_IP $node_ip # 查看 add-node 命令帮助信息 $ ./ocboot.sh add-node --help
具体操作可参考文档:添加节点。
添加 lbagent 节点
添加节点使用 add-lbagent 子命令把运行 lb agent 服务的节点加入到已有集群。
# 比如把节点 192.168.121.62 加入到已有集群 192.168.121.21 $ ./ocboot.sh add-lbagent 192.168.121.21 192.168.121.62 # 可以一次添加多个节点,格式如下 $ ./ocboot.sh add-lbagent $PRIMARY_IP $node1_ip $node2_ip ... $nodeN_ip # 把 $node_ip ssh 端口 2222 的节点加入到 $PRIMARY_IP ssh 端口 4567 的集群 $ ./ocboot.sh add-lbagent --port 4567 --node-port 2222 $PRIMARY_IP $node_ip
具体操作可参考文档:部署Lbagent。
升级节点
升级节点参考文档:升级服务。
备份节点
原理
备份流程会备份当前系统的配置文件(config.yml
) 以及使用 mysqldump
来备份数据库。
命令行参数
usage: ocboot.py backup [-h] [--backup-path BACKUP_PATH] [--light] config positional arguments: config config yaml file optional arguments: -h, --help show this help message and exit --backup-path BACKUP_PATH backup path, default: /opt/backup --light ignore yunionmeter and yunionlogger database; ignore tables start with 'opslog' and 'task'.
注意事项
下面详细介绍各个参数的作用和注意事项。
config
是必选参数,即,需要备份的配置文件名称,例如config-allinone.yml, config-nodes.yml, config-k8s-ha.yml,
以及使用快速安装时会生成的config-allinone-current.yml
,因此备份命令不对配置文件名称作假设,需由使用者自行输入配置文件名称。--backup-path
这个参数记录备份的目标目录。备份的内容包括配置文件(几k
级别),以及mysqldump
命令备份的数据库文件临时文件:onecloud.sql
,然后会将该文件压缩为onecloud.sql.tgz
,并删除临时文件。用户需确保/opt/backup
目录存在且可写且磁盘空间足够。--light
这个选项用来做精简备份,原理是在备份过程中,忽略掉一些尺寸较大的特定文件,主要是账单、操作日志等相关的文件。默认保留。- 备份后的配置文件名称为
config.yml
。 - 备份的流程全部采用命令行参数接受输入,备份过程中无交互。因此支持
crontab
方式自动备份。但备份程序本身不支持版本rotate
,用户可以使用logrotate
之类的工具来做备份管理。
FAQ
Q: 备份时提示缺
MySQLdb
包怎么办?A:在centos上,可以执行如下命令来安装(其他os发行版请酌情修改,或联系客服):
sudo yum install -y mariadb-devel python3-devel sudo yum groupinstall -y "Development Tools" sudo pip3 install mysqlclient
Q: 怎样查看、手工解压备份文件?
A:备份文件默认用户名为:
/opt/backup/onecloud.sql.gz
, 预览、手工解压的方式如下:# 预览该文件: gunzip --stdout /opt/backup/onecloud.sql.gz | less # 解压,同时保留源文件: gunzip --stdout /opt/backup/onecloud.sql.gz > /opt/backup/onecloud.sql # 有些高版本的gunzip 提供 -k/--keep 选项,来保存源文件。可以直接执行: gunzip -k /opt/backup/onecloud.sql.gz
恢复节点
原理
恢复是备份的逆操作,流程包括:
- 解压备份好的数据库文件;
- 依照用户输入,或者在本机安装
mariadb-server
,并导入数据库;或者将备份的数据库 source 到指定的数据库中。 - 根据之前备份好的
config.yml
,结合用户输入(当前机器ip
、worker node ips
、master node ips
),来重新生成 config.yml,然后提示用户重新安装云管系统。
命令行参数
usage: ocboot.py restore [-h] [--backup-path BACKUP_PATH] [--install-db-to-localhost] [--master-node-ips MASTER_NODE_IPS] [--master-node-as-host] [--worker-node-ips WORKER_NODE_IPS] [--worker-node-as-host] [--mysql-host MYSQL_HOST] [--mysql-user MYSQL_USER] [--mysql-password MYSQL_PASSWORD] [--mysql-port MYSQL_PORT] primary_ip positional arguments: primary_ip primary node ip optional arguments: -h, --help show this help message and exit --backup-path BACKUP_PATH backup path, default=/opt/backup --install-db-to-localhost use this option when install local db --master-node-ips MASTER_NODE_IPS master nodes ips, seperated by comma ',' --master-node-as-host use this option when use master nodes as host --worker-node-ips WORKER_NODE_IPS worker nodes ips, seperated by comma ',' --worker-node-as-host use this option when use worker nodes as host --mysql-host MYSQL_HOST mysql host; not needed if set --install-db-to- localhost --mysql-user MYSQL_USER mysql user, default: root; not needed if set --install-db-to-localhost --mysql-password MYSQL_PASSWORD mysql password; not needed if set --install-db-to- localhost --mysql-port MYSQL_PORT mysql port, default: 3306; not needed if set --install-db-to-localhost
注意事项
primary_ip
为必填项,作为位置参数传入。--backup-path
,默认值为/opt/backup
。--install-db-to-localhost
,是否在本机(primary
节点) 安装数据库。默认为否。如果选择了--install-db-to-localhost
,则会在本机安装数据(mariadb-server
的稳定版),并自动赋予下列参数以默认值:--mysql-host=127.0.0.1 --mysql-user=root --mysql-password=<继承备份文件里 mysql 的密码> --mysql-port=3306
--mysql-host
以及其他同类选项:不安装数据库,直接复用给定数据库。注意:--install-db-to-localhost
参数与--mysql-*
系列参数互斥,只能选择其中一种,要么本机安装数据库,要么给定具体参数。--master-node-ips
同时安装master
节点。该参数是以半角逗号分隔的ip
列表。适用于多节点模式。--master-node-as-host
安装master
节点时,将其作为host
节点。--worker-node-ips
、--worker-node-as-host
,作用同上,如其名。
卸载
根据平台安装方式,卸载方式各有不同,方式如下。
Ocboot 安装
Ocboot 快速安装是指以 All in One 的方式,在服务器上安装了一个 K3s 或者 Kubernets 集群,进而在集群中部署了Cloudpods。
因此卸载Cloupods只需要卸载安装的 K3s 或者 Kubernetes 集群,以及在服务器上安装的相关包。
- K3s
- Kubernetes
卸载 K3s 服务
$ k3s-uninstall.sh
$ k3s-agent-uninstall.sh
停止并禁用相关服务:
$ systemctl disable --now yunion-executor
卸载数据库(以 CentOS 举例):
$ yum -y remove mariadb*
$ rm -rf /var/lib/mysql # 保留原始数据执行 mv -f /var/lib/mysql /var/lib/mysql.$(date +"%Y%m%d-%H%M").bak
$ rm -rf /etc/my.conf
机器重启,恢复之前的网络:
$ reboot
卸载openvswitch(先重启,再卸载 openvswitch,以免可能出现的断网情况)。命令如下:
$ systemctl disable --now openvswitch
$ yum -y remove openvswitch-*
$ rm -rf /etc/openvswitch
Kubernetes Helm 安装
使用如下命令卸载:
helm uninstall -n onecloud default
Docker Compose 安装
使用如下命令卸载:
docker compose down