CloudStack部署

Apache CloudStack™ 是一个开源软件系统,旨在部署和管理大型虚拟机网络,作为一个高可用性、高可扩展性的基础设施即服务(IaaS)云计算平台。

运行管理服务器和 MySQL 数据库的机器必须满足以下要求。同样的机器也可以用来提供主存储和二级存储,例如通过本地磁盘和 NFS。管理服务器可以安装在虚拟机中。

  • 操作系统:
    • Preferred: CentOS/RHEL 7.2+ or Ubuntu 16.04(.2) or higher
  • 64位 x86 CPU (多个核心性能更好)
  • 4 GB 内存
  • 250 GB 本地磁盘 (更大的容量性能更佳;推荐 500GB)
  • 至少一块网卡
  • 静态分配的 IP 地址
  • 通过 hostname 命令返回的完全合格的域名

主机是云服务以来宾虚拟形式运行的地方 机器。每个主机都是一台满足以下条件的机器 要求:

  • 必须支持 HVM(启用 Intel-VT 或 AMD-V)。
  • 64 位 x86 CPU(内核越多,性能越好)
  • 需要硬件虚拟化支持
  • 4 GB 内存
  • 36 GB 本地磁盘
  • 至少 1 个 NIC
  • 应用于虚拟机管理程序软件的最新修补程序
  • 当你部署 CloudStack 时,hypervisor 主机不能有任何 VM 已在运行
  • 集群中的所有主机都必须是同构的。CPU 必须为 相同的 type、count 和 feature 标志。

配置软件包存储库

bash

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

高级网络模式

公共流量
网段子网掩码网关
192.168.10.51-192.168.10.80255.255.254.0192.168.11.1
提供点Pod
网段子网掩码网关
192.168.23.51-192.168.23.100255.255.255.0192.168.23.2

操作系统版本 Ubuntu 22.04.4 LTS,CloudStack 版本 4.18.2.5 LTS。

主机名IP备注
cs-mgmt1192.168.0.201管理节点
cs-agent1192.168.10.41MySQL,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 镜像:包含操作系统数据或启动媒质的磁盘镜像。
    • 磁盘卷快照:虚拟机数据的已储存副本,能用于数据恢复或者创建新模板。
  1. 以 root 用户登录到操作系统

  2. 检查主机名是否为完全合格的域名 (FQDN)

    bash

    hostname --fqdn

    输出应显示为完全合格的域名,例如:management1.lab.example.org。 如果返回的结果不符合此要求,请通过编辑 /etc/hosts 文件进行修正。

  3. 确保主机可以访问互联网

    bash

    ping cloudstack.apache.org
  4. 启用 NTP 服务以进行时间同步

    NTP 服务用于同步云服务器的时间。如果时间不同步,可能会导致意外问题。

    安装 chrony

    bash

    apt install -y chrony

bash

apt install -y cloudstack-management

bash

apt install -y mysql-server

编辑 MySQL 配置,创建/etc/mysql/conf.d/cloudstack.cnf文件添加这些配置。 max_connections参数应设置为 350 乘以正在部署的 Management Server 的数量。

bash

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

bash

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

配置后重启数据库

bash

systemctl restart mysql.service

设置 MySQL 密码

sql

mysql -u root
mysql> create user 'root'@'%' identified by 'root';
mysql> grant all privileges on *.* to 'root'@'%' with grant option;
mysql> flush privileges;

返回第一个 Management Server 的 shell

cloudstack-setup-databases 脚本用于创建 cloudstack 数据库(cloud、cloud_usage)、创建用户(cloud)、授予用户权限以及为首次启动管理服务器准备表。

以下命令在数据库上创建 cloud 用户

bash

cloudstack-setup-databases cloud:123456@192.168.10.41 --deploy-as=root:root

cloud:123456:表示执行成功后,mysql 数据库将创建一个密码为 123456 的 cloud 用户供管理节点使用。

高可用在其他节点不添加–deploy-as参数

此脚本完成后,会看到 CloudStack 已成功初始化数据库的提示

image-20241122133950725

现在数据库已经设置好了,你可以完成管理服务器操作系统的配置了。这个命令将会设置iptables(防火墙规则)、sudoers(用户权限)并启动管理服务器。

bash

cloudstack-setup-management

image-20241122125128491

现在可以访问 http://192.168.0.201:8080/

默认用户名/密码:admin/password

安装 nfs-utils 软件包

bash

apt install -y nfs-kernel-server

在管理服务器主机上创建两个目录,分别用于主存储和二级存储。例如

bash

mkdir -p /data/export/{primary,secondary}

配置 NFS 导出,编辑/etc/exports。以 rw、async、no_root_squash、no_subtree_check 配置 NFS 共享。

插入以下行。

bash

echo '/data/export  *(rw,async,no_root_squash,no_subtree_check)' >> /etc/exports

应用导出配置

bash

exportfs -a

自启动 rpcbind 和 nfs 服务

bash

systemctl enable rpcbind
systemctl enable nfs-kernel-server

在管理服务器(192.168.0.201)上,为二级存储创建挂载点。 例如:

bash

mkdir -p /mnt/secondary

将二级存储挂载到 Management Server 上。将 以下示例 NFS 服务器名称和 NFS 与您自己的路径共享路径。

bash

mount -t nfs 192.168.10.41:/data/export/secondary /mnt/secondary

在 Management Server 上,运行以下一个或多个命令以检索和解压缩 系统 VM 模板。

此过程需要本地文件系统上大约 5 GB 的可用空间,每次运行最多需要 30 分钟。

bash

# 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 重启后报错

bash

umount /mnt/secondary
rmdir /mnt/secondary

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 或内存相关的错误。

  • 在单个集群内,主机必须运行相同版本的操作系统发行版。
  • 集群内的所有主机必须是同构的。CPU 必须具有相同的类型、数量和功能特性。
  • 必须支持 HVM(启用了 Intel-VT 或 AMD-V)。
  • 64 位 x86 CPU(核心数越多性能越好)。
  • 至少 4 GB 内存。
  • 至少 1 个网卡(NIC)。

在部署 CloudStack 时,虚拟机管理程序主机上不得有任何已经运行的实例。这些实例将会被 CloudStack 销毁。

在配置主机以承载 CloudStack Agent 和运行 KVM 实例之前,请完成以下步骤:

  1. 以 root 用户登录到操作系统

  2. 检查主机名是否为完全合格的域名 (FQDN)

    bash

    hostname --fqdn

    输出应显示为完全合格的域名,例如:kvm1.lab.example.org。 如果返回的结果不符合此要求,请通过编辑 /etc/hosts 文件进行修正。

  3. 确保主机可以访问互联网

    bash

    ping www.cloudstack.org
  4. 启用 NTP 服务以进行时间同步

    NTP 服务用于同步云服务器的时间。如果时间不同步,可能会导致意外问题。

  5. 安装 NTP 服务

    bash

    apt install -y chrony
  6. 在每个虚拟机管理程序主机上重复所有这些步骤

CloudStack 使用一个代理来管理主机上的 KVM 实例。该代理与管理服务器通信,并控制主机上的所有实例。

根据您的发行版,您可能需要为 CloudStack 添加相应的软件包存储库。

安装 agent

bash

apt install -y cloudstack-agent

CloudStack 使用 libvirt 来管理实例。因此,正确配置 libvirt 至关重要。libvirt 是 cloudstack-agent 的依赖项,应该已经安装。

当主机被添加时,CloudStack 会自动对 agent 和 libvirt 进行基本配置。如果您计划自动化部署和配置 KVM 主机,这一点尤为重要。

为避免对实例的潜在安全攻击,我们需要关闭 libvirt 监听不安全的 TCP 端口。当主机被添加到 CloudStack 时,CloudStack 会自动设置云密钥库和证书。我们还需要关闭 libvirt 尝试使用多播 DNS 广告功能。这两个设置都位于 /etc/libvirt/libvirtd.conf 文件中。

设置以下参数:

bash

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 文件。

取消注释以下行:

text

LIBVIRTD_ARGS="--listen"

对于 Ubuntu 20.04/22.04/24.04 及更高版本,传统的基于套接字/监听的配置可能不再受支持,我们可以通过以下方式恢复旧的行为:

bash

systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket

重启 libvirt

bash

systemctl restart libvirtd

禁用 libvirt 的 AppArmor 配置文件

bash

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

bash

apt-get install -y bridge-utils

Hypervisor 和管理服务器不必位于同一子网中

我们将 cloudbr1 配置为不含 IP 地址的普通网桥

修改 /etc/netplan/下的 yaml 文件,修改前先备份避免配置错误无法使用

例如50-cloud-init.yaml

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

应用配置

bash

netplan apply

在高级网络模式中,每个 hypervisor 宿主机通常至少有两个物理接口。我们将使用 ens33 接口连接到名为cloudbr0的桥接器,使用未标记(原生)VLAN 进行 hypervisor 管理。此外,我们配置第二个接口用于与名为cloudbr1的桥接器连接,以处理公共和客户流量。这次我们没有应用任何 VLAN——CloudStack 将在实际使用过程中根据需要添加 VLAN。

修改 /etc/netplan/01-KVM-config.yaml

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

Installation overview

Apache CloudStack on x86_64 with Ubuntu and KVM - Install Guide

相关内容