CloudStack部署
Apache CloudStack™ 是一个开源软件系统,旨在部署和管理大型虚拟机网络,作为一个高可用性、高可扩展性的基础设施即服务(IaaS)云计算平台。
1 最低系统要求
1.1 系统管理服务器,数据库和存储系统要求
运行管理服务器和 MySQL 数据库的机器必须满足以下要求。同样的机器也可以用来提供主存储和二级存储,例如通过本地磁盘和 NFS。管理服务器可以安装在虚拟机中。
- 操作系统:
- Preferred: CentOS/RHEL 7.2+ or Ubuntu 16.04(.2) or higher
- 64位 x86 CPU (多个核心性能更好)
- 4 GB 内存
- 250 GB 本地磁盘 (更大的容量性能更佳;推荐 500GB)
- 至少一块网卡
- 静态分配的 IP 地址
- 通过 hostname 命令返回的完全合格的域名
1.2 宿主机/虚拟机软件系统需求
主机是云服务以来宾虚拟形式运行的地方 机器。每个主机都是一台满足以下条件的机器 要求:
- 必须支持 HVM(启用 Intel-VT 或 AMD-V)。
- 64 位 x86 CPU(内核越多,性能越好)
- 需要硬件虚拟化支持
- 4 GB 内存
- 36 GB 本地磁盘
- 至少 1 个 NIC
- 应用于虚拟机管理程序软件的最新修补程序
- 当你部署 CloudStack 时,hypervisor 主机不能有任何 VM 已在运行
- 集群中的所有主机都必须是同构的。CPU 必须为 相同的 type、count 和 feature 标志。
1.3 包仓库
配置软件包存储库
wget -O - https://download.cloudstack.org/release.asc |sudo tee /etc/apt/trusted.gpg.d/cloudstack.asc
echo "deb https://download.cloudstack.org/ubuntu $(lsb_release -cs) 4.18" > /etc/apt/sources.list.d/cloudstack.list
apt update
1.4 网段规划
高级网络模式
公共流量 | ||
---|---|---|
网段 | 子网掩码 | 网关 |
192.168.10.51-192.168.10.80 | 255.255.254.0 | 192.168.11.1 |
提供点Pod | ||
---|---|---|
网段 | 子网掩码 | 网关 |
192.168.23.51-192.168.23.100 | 255.255.255.0 | 192.168.23.2 |
1.5 基本结构
操作系统版本 Ubuntu 22.04.4 LTS,CloudStack 版本 4.18.2.5 LTS。
主机名 | IP | 备注 |
---|---|---|
cs-mgmt1 | 192.168.0.201 | 管理节点 |
cs-agent1 | 192.168.10.41 | MySQL,NFS 存储,KVM 计算节点 |
上图各个组件介绍:
Regions:为了提高云的可靠性,可以选择将资源分为多个地理区域。区域是CloudStack部署中最大的可用组织单位。一个区域由几个可用性zones组成,其中每个zone大致相当于一个数据中心。每个Regions均由其在一个zone中运行的管理服务器集群控制。regions中的zones通常相隔非常近。Regions 是用于提供容错和灾难恢复的有用技术。
Zone:Zone 对应于现实中的一个数据中心。
Pod:Pod 对应着一个机架。同一个 pod 中的机器在同一个子网(网段)中。
Cluster:Cluster 是多个主机组成的一个集群。同一个 cluster 中的主机有相同的硬件,相同的 Hypervisor,和共用同样的存储。同一个 cluster 中的虚拟机,可以实现无中断服务地从一个主机迁移到另外一个上。
Host:Host 就是运行虚拟机(VM)的主机。
CloudStack
存储按用途分为主存储(Primary Storage)
和二级存储(Secondary Storage)
,主存储用来存储虚拟机的卷
,二级存储用来存放虚拟机的模板,ISO镜像和快照
Primary storage:一级存储与 cluster 关联,它为该 cluster 中的主机的全部虚拟机提供磁盘卷。一个 cluster 至少有一个一级存储,且在部署时位置要临近主机以提供高性能。
Secondary storage:二级存储与 zone 关联,它存储模板文件,ISO 镜像和磁盘卷快照。
- 模板:可以启动虚拟机的操作系统镜像,也包括了诸如已安装应用的其余配置信息。
- ISO 镜像:包含操作系统数据或启动媒质的磁盘镜像。
- 磁盘卷快照:虚拟机数据的已储存副本,能用于数据恢复或者创建新模板。
2 管理服务器安装
2.1 准备操作系统
以 root 用户登录到操作系统
检查主机名是否为完全合格的域名 (FQDN)
hostname --fqdn
输出应显示为完全合格的域名,例如:
management1.lab.example.org
。 如果返回的结果不符合此要求,请通过编辑/etc/hosts
文件进行修正。确保主机可以访问互联网
ping cloudstack.apache.org
启用 NTP 服务以进行时间同步
NTP 服务用于同步云服务器的时间。如果时间不同步,可能会导致意外问题。
安装 chrony
apt install -y chrony
2.2 在第一台主机上安装管理服务器
2.2.1 安装 management
apt install -y cloudstack-management
2.3 安装数据库服务器
2.3.1 在一个单独的节点上安装数据库
apt install -y mysql-server
编辑 MySQL 配置,创建/etc/mysql/conf.d/cloudstack.cnf
文件添加这些配置。 max_connections参数应设置为 350 乘以正在部署的 Management Server 的数量。
tee /etc/mysql/conf.d/cloudstack.cnf <<'EOF'
[mysqld]
server-id = 1
innodb_rollback_on_timeout = 1
innodb_lock_wait_timeout = 600
max_connections = 350
log-bin = mysql-bin
binlog-format = 'ROW'
EOF
修改/etc/mysql/mysql.conf.d/mysqld.cnf
中 bind-address 为 0.0.0.0
sed -i.bak 's/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
配置后重启数据库
systemctl restart mysql.service
设置 MySQL 密码
mysql -u root
mysql> create user 'root'@'%' identified by 'root';
mysql> grant all privileges on *.* to 'root'@'%' with grant option;
mysql> flush privileges;
2.3.2 初始化 cloudstack 数据库
返回第一个 Management Server 的 shell
cloudstack-setup-databases 脚本用于创建 cloudstack 数据库(cloud、cloud_usage)、创建用户(cloud)、授予用户权限以及为首次启动管理服务器准备表。
以下命令在数据库上创建 cloud 用户
cloudstack-setup-databases cloud:123456@192.168.10.41 --deploy-as=root:root
cloud:123456:表示执行成功后,mysql 数据库将创建一个密码为 123456 的 cloud 用户供管理节点使用。
高可用在其他节点不添加
–deploy-as
参数
此脚本完成后,会看到 CloudStack 已成功初始化数据库的提示
现在数据库已经设置好了,你可以完成管理服务器操作系统的配置了。这个命令将会设置iptables(防火墙规则)、sudoers(用户权限)并启动管理服务器。
cloudstack-setup-management
现在可以访问 http://192.168.0.201:8080/
默认用户名/密码:admin/password
2.4 准备 NFS 共享
2.4.1 使用单独的 NFS 服务器
安装 nfs-utils 软件包
apt install -y nfs-kernel-server
在管理服务器主机上创建两个目录,分别用于主存储和二级存储。例如
mkdir -p /data/export/{primary,secondary}
配置 NFS 导出,编辑/etc/exports
。以 rw、async、no_root_squash、no_subtree_check 配置 NFS 共享。
插入以下行。
echo '/data/export *(rw,async,no_root_squash,no_subtree_check)' >> /etc/exports
应用导出配置
exportfs -a
自启动 rpcbind 和 nfs 服务
systemctl enable rpcbind
systemctl enable nfs-kernel-server
在管理服务器(192.168.0.201)上,为二级存储创建挂载点。 例如:
mkdir -p /mnt/secondary
将二级存储挂载到 Management Server 上。将 以下示例 NFS 服务器名称和 NFS 与您自己的路径共享路径。
mount -t nfs 192.168.10.41:/data/export/secondary /mnt/secondary
2.5 准备系统虚拟机模板
在 Management Server 上,运行以下一个或多个命令以检索和解压缩 系统 VM 模板。
此过程需要本地文件系统上大约 5 GB 的可用空间,每次运行最多需要 30 分钟。
# kvm
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloudstack.org/systemvm/4.18/systemvmtemplate-4.18.1-kvm.qcow2.bz2 -h kvm -F
# vsphere
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -u http://download.cloudstack.org/systemvm/4.18/systemvmtemplate-4.18.1-vmware.ova -h vmware -F
使用单独的 NFS 服务器时,请务必执行此步骤,防止 management 重启后报错
umount /mnt/secondary
rmdir /mnt/secondary
3 KVM 主机安装
3.1 KVM 虚拟机管理程序主机的系统要求
KVM 包含在多种基于 Linux 的操作系统中。虽然不是必须运行这些发行版,但以下是推荐的系统:
- CentOS / RHEL: 7.X
- CentOS / RHEL / 二进制兼容变种: 8.X
- Ubuntu: 18.04 及以上
- openSUSE / SLES: 15.2 及以上
KVM 虚拟机管理程序的主要需求是确保 libvirt 和 Qemu 的版本满足要求。无论您使用的是哪种 Linux 发行版,请确保满足以下要求:
- libvirt: 1.2.0 或更高版本
- Qemu/KVM: 1.5 或更高版本(推荐使用 2.5 或更高版本)
CloudStack 的默认网络桥接实现是 Linux 原生的桥接模块(bridge 模块)。此外,CloudStack 还支持使用 OpenVswitch,其要求如下:
- libvirt: 1.2.0 或更高版本
- openvswitch: 1.7.1 或更高版本
并非所有版本的 Qemu/KVM 都支持动态调整实例的资源配置。有些版本组合可能会在实例部署期间导致 CPU 或内存相关的错误。
3.2 硬件要求
- 在单个集群内,主机必须运行相同版本的操作系统发行版。
- 集群内的所有主机必须是同构的。CPU 必须具有相同的类型、数量和功能特性。
- 必须支持 HVM(启用了 Intel-VT 或 AMD-V)。
- 64 位 x86 CPU(核心数越多性能越好)。
- 至少 4 GB 内存。
- 至少 1 个网卡(NIC)。
3.3 注意事项
在部署 CloudStack 时,虚拟机管理程序主机上不得有任何已经运行的实例。这些实例将会被 CloudStack 销毁。
3.4 准备操作系统
在配置主机以承载 CloudStack Agent 和运行 KVM 实例之前,请完成以下步骤:
以 root 用户登录到操作系统
检查主机名是否为完全合格的域名 (FQDN)
hostname --fqdn
输出应显示为完全合格的域名,例如:
kvm1.lab.example.org
。 如果返回的结果不符合此要求,请通过编辑/etc/hosts
文件进行修正。确保主机可以访问互联网
ping www.cloudstack.org
启用 NTP 服务以进行时间同步
NTP 服务用于同步云服务器的时间。如果时间不同步,可能会导致意外问题。
安装 NTP 服务
apt install -y chrony
在每个虚拟机管理程序主机上重复所有这些步骤
3.5 安装和配置 Agent
CloudStack 使用一个代理来管理主机上的 KVM 实例。该代理与管理服务器通信,并控制主机上的所有实例。
根据您的发行版,您可能需要为 CloudStack 添加相应的软件包存储库。
安装 agent
apt install -y cloudstack-agent
3.6 安装和配置 libvirt
CloudStack 使用 libvirt 来管理实例。因此,正确配置 libvirt 至关重要。libvirt 是 cloudstack-agent 的依赖项,应该已经安装。
当主机被添加时,CloudStack 会自动对 agent 和 libvirt 进行基本配置。如果您计划自动化部署和配置 KVM 主机,这一点尤为重要。
为避免对实例的潜在安全攻击,我们需要关闭 libvirt 监听不安全的 TCP 端口。当主机被添加到 CloudStack 时,CloudStack 会自动设置云密钥库和证书。我们还需要关闭 libvirt 尝试使用多播 DNS 广告功能。这两个设置都位于 /etc/libvirt/libvirtd.conf
文件中。
设置以下参数:
echo 'listen_tls=0' >> /etc/libvirt/libvirtd.conf
echo 'listen_tcp=1' >> /etc/libvirt/libvirtd.conf
echo 'tcp_port = "16509"' >> /etc/libvirt/libvirtd.conf
echo 'mdns_adv = 0' >> /etc/libvirt/libvirtd.conf
echo 'auth_tcp = "none"' >> /etc/libvirt/libvirtd.conf
我们还需要更改以下参数:
在 Ubuntu 22.04 或更高版本上,修改 /etc/default/libvirtd
文件。
取消注释以下行:
LIBVIRTD_ARGS="--listen"
对于 Ubuntu 20.04/22.04/24.04 及更高版本,传统的基于套接字/监听的配置可能不再受支持,我们可以通过以下方式恢复旧的行为:
systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket
重启 libvirt
systemctl restart libvirtd
3.7 配置安全策略
禁用 libvirt 的 AppArmor 配置文件
ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd
apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
安装 bridge-utils
apt-get install -y bridge-utils
3.8 配置网络
Hypervisor 和管理服务器不必位于同一子网中
3.8.1 为基本网络配置网桥
我们将 cloudbr1 配置为不含 IP 地址的普通网桥
修改 /etc/netplan/
下的 yaml 文件,修改前先备份避免配置错误无法使用
例如50-cloud-init.yaml
network:
version: 2
ethernets:
ens33: {}
ens33.200: {}
bridges:
cloudbr0:
interfaces:
- ens33
addresses:
- 192.168.10.41/23
routes:
- to: default
via: 192.168.11.1
nameservers:
addresses:
- 233.5.5.5
- 114.114.114.114
parameters:
stp: false
forward-delay: 0
cloudbr1:
interfaces:
- ens33.200
dhcp4: false
parameters:
stp: false
forward-delay: 0
应用配置
netplan apply
3.8.2 为高级网络配置网桥
在高级网络模式中,每个 hypervisor 宿主机通常至少有两个物理接口。我们将使用 ens33 接口连接到名为cloudbr0
的桥接器,使用未标记(原生)VLAN 进行 hypervisor 管理。此外,我们配置第二个接口用于与名为cloudbr1
的桥接器连接,以处理公共和客户流量。这次我们没有应用任何 VLAN——CloudStack 将在实际使用过程中根据需要添加 VLAN。
修改 /etc/netplan/01-KVM-config.yaml
network:
version: 2
ethernets:
ens33: {}
ens34: {}
bridges:
cloudbr0:
addresses:
- 192.168.10.41/23
dhcp4: false
routes:
- to: default
via: 192.168.11.1
nameservers:
addresses:
- 233.5.5.5
- 114.114.114.114
interfaces:
- ens33
parameters:
stp: true
cloudbr1:
dhcp4: false
interfaces:
- ens34
parameters:
stp: true
4 参考链接
Apache CloudStack on x86_64 with Ubuntu and KVM - Install Guide