“Hi,这是小5自学 CloudStack 相关知识的第6篇笔记。在学习时我们会需要对 CloudStack 进行快速部署以完成实操。本期将介绍快速部署的基础知识。”
摘要
- 概述
构建基础设施即服务 (IaaS) 云平台可能非常复杂,顾名思义,它们提供了大量的选项,这常常会让即使是经验丰富的管理员在初次接触云平台构建时感到困惑。本章旨在提供一套简明易懂的说明,帮助快速启动并运行 CloudStack。
* 仅用于构建 CloudStack 测试/演示云环境,其中已做出一些网络配置选择,以便能以最短的时间快速启动并运行。本章内容不能用于生产环境部署。
** 如果您没有物理服务器可供“测试”,可以使用例如 Oracle VirtualBox 6.1+。前提是您需要在实例设置的“系统”页面中启用“启用嵌套 VT-x/AMD-V”作为扩展功能。需要创建一个“Red Hat (64 位)”类型的实例,并分配 40GB 以上的磁盘空间。实例需要配备一个网卡,并将其桥接到笔记本电脑/台式机的网卡(桥接到无线网卡通常会导致连接问题,因此请避免这样做,而应桥接到有线网卡)。为了获得更好的网络性能,建议将适配器类型设置为“半虚拟化网络 (virtio-net)”(在实例设置中,选择“网络”部分,找到适配器 1,展开“高级”选项)。请确保实例上的网卡配置为混杂模式(在 VirtualBox 中,混杂模式选择“允许所有”或“允许实例”),以便它可以将 CloudStack 系统虚拟机的流量转发到网关。此外,请确保您已为演示目的分配了足够的内存(6GB 以上)和 CPU 核心(3 个以上)。
- 流程概述
本篇将重点介绍如何在 EL8 发行版上使用 KVM 构建 CloudStack 云,该云采用 NFS 存储和 VLAN 实现二层隔离(也可以使用扁平家庭网络),并且所有操作都在单个硬件(服务器/虚拟机)上完成。
KVM,即基于内核的虚拟机,是一种用于 Linux 内核的虚拟化技术。KVM 支持在具有硬件虚拟化扩展的处理器上进行原生虚拟化。
- 先决条件
1. 至少有一台支持并已启用硬件虚拟化的计算机。
2. 一个极简的 EL8 发行版,如:
Oracle Linux 8 – https://yum.oracle.com/oracle-linux-isos.html
Rocky Linux 8 – https://rockylinux.org/download
AlmaLinux 8 – https://almalinux.org/get-almalinux/
3. 一个网关地址为 xxx.xxx.xxx.1 的 /24 网络,该网络不需要 DHCP,运行 CloudStack 的所有计算机都不会使用动态地址。这样做是为了简化配置。
- 环境
操作系统
在硬件上安装首选的 EL8 发行版。默认设置通常可以满足本次安装需求,但请务必配置 IP 地址/参数,以便稍后可以从互联网安装所需的软件包。之后将根据需要更改网络配置。安装完成后,需要通过 SSH 访问服务器。
启动前最好先更新系统:
# dnf -y upgrade
配置网络
从 EL8 开始,必须使用网络管理器来配置所有网络接口。
我们将首先创建 Cloudstack 用于网络连接的桥接器。为避免远程(SSH)连接断开,您应该通过控制台/物理屏幕在本地登录服务器(或者将以下命令保存为脚本,然后通过远程 SSH 会话运行它)。
#create an "empty” bridge, add eth0 to the bridge, set static IP and reactivate the whole configuration
nmcli connection add type bridge con-name cloudbr0 ifname cloudbr0
nmcli connection modify eth0 master cloudbr0
nmcli connection up eth0
nmcli connection modify cloudbr0 ipv4.addresses '172.16.10.2/24' ipv4.gateway '172.16.10.1' ipv4.dns '8.8.8.8' ipv4.method manual && nmcli connection up cloudbr0
还可以选择安装网络工具:
# dnf install net-tools -y
现在配置文件已经正确设置好了,让我们重启一下:
# reboot
主机名
CloudStack 要求正确设置主机名。如果您在安装过程中使用了默认选项,则当前主机名设置为 localhost.localdomain。为了测试这一点,我们将运行以下命令:
# hostname --fqdn
此时它很可能会返回:
localhost
为了解决这个问题,我们将主机名设置为与以下示例类似的格式:
hostnamectl set-hostname server.local --static
修改完该文件后,请重启电脑:
# reboot
现在用以下命令重新检查主机名:
# hostname --fqdn
并确保它返回 FQDN 响应。
SELinux
理想情况下,SELinux 应设置为强制模式,并创建必要的 SELinux 策略以允许服务运行。但在本指南中,我们将 SELinux 设置为宽容模式。这样,我们就可以在无需担心 SELinux 策略的情况下安装和配置服务。
要在运行的系统中将 SELinux 配置为宽容模式,我们需要运行以下命令:
# setenforce 0
为了确保它保持这种状态,我们需要配置 /etc/selinux/config 文件以反映宽容状态,如下例所示:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
NTP (Chrony)
NTP 配置对于保持云服务器上所有时钟同步至关重要。但是,NTP 默认情况下并未安装。因此,我们将在此阶段安装并配置 NTP。安装步骤如下:
# dnf -y install chrony
默认配置完全满足我们的需求,所以我们只需要启用它并将其设置为开机启动,如下所示:
# systemctl enable chronyd
# systemctl start chronyd
配置 CloudStack 软件包仓库
需要配置机器以使用 CloudStack 软件包仓库。要添加 CloudStack 存储库,请创建 /etc/yum.repos.d/cloudstack.repo 并插入以下信息。
[cloudstack]
name=cloudstack
baseurl=http://download.cloudstack.org/centos/$releasever/4.22/
enabled=1
gpgcheck=0
NFS
我们的配置将使用 NFS 作为主存储和辅助存储。我们将为此设置两个 NFS 共享。首先,我们将安装 nfs-utils。
# dnf -y install nfs-utils
现在我们需要配置 NFS 以提供两个不同的共享。这在 /etc/exports 文件中进行配置。您应该确保该文件包含以下内容:
/export/secondary *(rw,async,no_root_squash,no_subtree_check)
/export/primary *(rw,async,no_root_squash,no_subtree_check)
您会注意到,我们指定了两个系统中尚不存在的目录。接下来,我们将使用以下命令创建这些目录并设置相应的权限:
# mkdir -p /export/primary
# mkdir /export/secondary
NFSv4 要求所有客户端的域设置必须一致。在本例中,域为“local”,因此请确保 /etc/idmapd.conf 中的域设置已取消注释,并按如下方式设置:
Domain = local
为了简化操作,我们需要禁用防火墙,以免它阻止连接。为此,只需使用以下两个命令:
# systemctl stop firewalld
# systemctl disable firewalld
现在我们需要配置 nfs 服务以在启动时自动运行,并通过执行以下命令在主机上实际启动它:
# systemctl enable rpcbind
# systemctl enable nfs-server
# systemctl start rpcbind
# systemctl start nfs-server
- 管理服务器安装
数据库安装和配置
我们将首先安装 MySQL 并配置一些选项,以确保它能与 CloudStack 良好运行。
# dnf -y install mysql-server
MySQL 安装完成后,我们需要对 `/etc/my.cnf.d/mysql-server.cnf` 文件进行一些配置更改。具体来说,我们需要在 `[mysqld]` 部分添加以下选项:
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log_bin=mysql-bin
binlog_format=ROW
现在 MySQL 已经配置完毕,我们可以启动它并将其配置为开机启动,具体步骤如下:
# systemctl enable mysqld
# systemctl start mysqld
安装
现在我们要安装管理服务器。我们通过执行以下命令来完成此操作:
# dnf -y install cloudstack-management
CloudStack 4.22 需要 Java 17 JRE。安装管理服务器会自动安装 Java 17,但最好明确确认 Java 17 是已选择/激活的版本(以防您之前已安装过其他 Java 版本):
$ alternatives --config java
应用程序安装完毕后,我们现在可以设置数据库了,我们将使用以下命令和选项来完成此操作:
# cloudstack-setup-databases cloud:password@localhost --deploy-as=root
该过程完成后,您应该会看到类似“CloudStack 已成功初始化数据库”的消息。
数据库创建完成后,我们可以通过执行以下命令来完成管理服务器的设置:
# cloudstack-setup-management
系统模板设置
CloudStack 使用多个系统虚拟机来提供访问实例控制台、提供各种网络服务以及管理存储各个方面的功能。
我们需要下载 systemVM 模板并将其部署到辅助存储。由于我们已经在 NFS 服务器上,因此将使用本地路径 (/export/secondary)。否则,您需要将辅助存储挂载到临时挂载点,并使用该挂载点而不是 /export/secondary 路径。执行以下脚本:
/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /export/secondary -u http://download.cloudstack.org/systemvm/4.22/systemvmtemplate-4.22.0-x86_64-kvm.qcow2.bz2 -h kvm -F
至此,管理服务器的配置就完成了。我们还需要配置 CloudStack,但会在虚拟机管理程序设置完成后再进行。
- KVM 设置和安装
安装
我们还把管理服务器用作计算节点,这意味着我们在设置管理服务器时已经完成了许多先决步骤。
安装 KVM 代理非常简单,只需一条命令即可,但之后我们需要配置一些东西。
# dnf -y install cloudstack-agent
KVM 配置
QEMU配置
我们需要编辑 QEMU VNC 配置。具体操作方法是编辑 /etc/libvirt/qemu.conf 文件,并确保以下行存在且未被注释掉。
vnc_listen=0.0.0.0
Libvirt 配置
CloudStack 使用 libvirt 来管理实例。因此,正确配置 libvirt 至关重要。Libvirt 是 cloud-agent 的依赖项,应该已经安装。
1. 即使我们只使用一台主机,也建议您执行以下步骤来熟悉一般要求。为了实现实时迁移,libvirt 必须监听不安全的 TCP 连接。我们还需要关闭 libvirt 尝试使用多播 DNS 广播的功能。这两个设置都在 `/etc/libvirt/libvirtd.conf` 文件中。设置以下参数:
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0
2. 仅仅在 libvirtd.conf 中启用“listen_tcp”是不够的,我们还需要修改参数,还需要修改 /etc/sysconfig/libvirtd。取消注释以下行:
#LIBVIRTD_ARGS="--listen"
从 EL8 开始,我们需要进行套接字掩码:
# systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket
3. 重启 libvirt
# systemctl restart libvirtd
KVM配置完成
为了确保万无一失,您应该检查 KVM 在您的机器上是否运行正常(您应该看到 kvm_intel 或 kvm_amd 模块显示为已加载):
# lsmod | grep kvm
kvm_intel 55496 0
kvm 337772 1 kvm_intel
kvm_amd # if you are in AMD cpu
至此,KVM 的安装和配置就完成了,接下来我们将使用 CloudStack UI 来实际配置我们的云平台。
- 配置
用户界面访问
要访问 CloudStack 的 Web 界面,只需将浏览器指向您机器的 IP 地址,例如http://172.16.10.2:8080/client。默认用户名是“admin”,默认密码是“password”。
设置区域(Zone)
区域是 CloudStack 中最大的组织实体——我们将创建一个区域。
点击“继续安装”继续 – 系统会提示您更改 root 管理员密码 – 请更改密码,然后点击“确定”。
此时会弹出一个新的区域向导。请选择“高级”(不要勾选“安全组”),然后单击“下一步”。
* 我们将配置一个高级区域,以便能够访问云的“管理”网络和“公共”网络——我们将使用相同的 CIDR(但使用不同的部分,即不同的 IP 地址范围)来访问“管理”(Pod)网络和“公共”网络——这在生产环境中是绝对不允许的——在本指南中,这样做仅用于测试目的!
区域详情
在此页面上,我们输入 DNS 服务器的位置。CloudStack 区分内部 DNS 和公共 DNS。内部 DNS 仅用于解析内部主机名,例如 NFS 服务器的 DNS 名称。公共 DNS 则提供给访客实例,用于解析公共 IP 地址。您可以为这两种类型的 DNS 服务器指定同一个服务器,但如果这样做,则必须确保内部 IP 地址和公共 IP 地址都能路由到该 DNS 服务器。在我们的具体案例中,我们不会为内部资源使用任何名称,并且我们会将它们设置为指向同一个外部资源,这样就无需额外配置名称服务器。
1. 名称 – 我们将把此名称设置为具有描述性的“Zone1”,用于我们的云平台。
2. IPv4 DNS 1 – 我们将为8.8.8.8我们的云设置此值。
3. IPv4 DNS 2 – 我们将为我们的云平台设置此项8.8.4.4。
4. 内部 DNS1 – 我们也会将其设置8.8.8.8为我们的云平台。
5. 内部 DNS2 – 我们也会将其设置8.8.4.4为我们的云平台。
6. 虚拟机管理程序——这将是此区域中使用的主要虚拟机管理程序。在本例中,我们将选择 KVM。
点击“下一步”继续。
物理网络
Cloudstack 支持多种网络隔离方法。默认的 VLAN 选项足以满足我们的需求。为了提升性能和/或安全性,Cloudstack 允许不同类型的流量通过连接到虚拟机管理程序的专用网卡传输。我们不会在此处进行任何更改,默认设置对于本次 Cloudstack 演示安装来说已经足够。
点击“下一步”继续。
公共流量
在正常的/公共云部署中,必须为此目的分配可公开访问的 IP 地址,但由于我们只是部署一个演示/测试环境,我们将使用本地网络的一部分(例如从 .11 到 .20 或其他可用范围)。
1. 网关 – 我们将使用172.16.10.1# 或您的物理网关地址,例如 192.168.1.1
2. 子网掩码 – 我们将使用255.255.255.0
3. VLAN/VNI – 此项留空
4. 起始 IP 地址 – 我们将使用172.16.10.11#(例如 192.168.1.11)
5. 结束 IP 地址 – 我们将使用172.16.10.20#(例如 192.168.1.20)
点击“添加”以添加范围。点击“下一步”继续。
Pod 配置
在这里,我们将为 CloudStack 的内部管理流量配置一个 IP 地址范围——CloudStack 会将此范围内的 IP 地址分配给系统虚拟机。这也将成为我们本地网络的一部分(即您本地家庭网络的不同部分,范围从 .21 到 .30),其余 IP 参数(子网掩码/网关)与公共流量使用的参数相同。
1. Pod 名称 – 我们将用于Pod1我们的云平台。
2. 预留系统网关 – 我们将使用172.16.10.1#(或您的物理网关地址,例如 192.168.1.1)
3. 预留系统子网掩码 – 我们将使用255.255.255.0
4. 开始使用预留系统 IP 地址 – 我们将使用172.16.10.21#(例如 192.168.1.21)
5. 保留系统 IP 地址结束 – 我们将使用172.16.10.30#(例如 192.168.1.30)
* 上述网络必须是管理网络的子网。
点击“下一步”继续。
访客流量
接下来,我们将为访客实例配置一系列 VLAN ID。通常 100-200的范围就足够了。
点击“下一步”继续。
集群 (Cluster)
一个 Pod 可以包含多个集群,一个集群也可以包含多个主机。我们将创建一个集群,并且需要为该集群命名。进入Cluster1。
点击“下一步”继续。
主机 (Host)
在这里,我们需要指定虚拟机管理程序主机的详细信息。在本例中,我们将管理服务器运行在与虚拟机管理程序相同的机器上。
1. 主机名——我们将使用 IP 地址,172.16.10.2因为我们没有设置 DNS 服务器进行名称解析。(这是您的本地服务器,请替换为正确的 IP 地址)
2. 用户名 – 我们将使用root
3. 密码 – 输入 root 用户的操作系统密码
点击“下一步”继续。
主存储
集群设置完成后,系统会提示您输入主存储信息。请在相应字段中输入以下值:
1. 名称 – 我们将使用Primary1
2. 范围(Scope ) —— 虽然两种范围可以,但我们这里使用Cluster“区域”范围。所有集群中的所有主机都可以访问此存储池。
3. 协议 – 我们将使用NFS
4. 服务器 – 我们将使用 IP 地址172.16.10.2(这是您的本地服务器,请替换为正确的 IP 地址)
5. 路径——我们将其定义/export/primary为我们正在使用的路径。
点击“下一步”继续。
二级存储
系统会提示您输入二级存储信息 – 请按如下方式填写:
1. 提供商 – 选择NFS
2. 名称 -Secondary1
3. NFS 服务器 – 我们将使用 IP 地址172.16.10.2(这是您的本地服务器,因此请替换为正确的 IP 地址)
4. 路径 – 我们将使用/export/secondary
点击“下一步”继续。
现在,点击“启动区域”,您的云服务应该会开始设置——设置可能需要几分钟才能完成。完成后,点击“启用区域”,您的区域即可使用。
至此,您的 Apache CloudStack 演示云已安装完毕。
要检查 CloudStack 安装的运行状况,请转到“基础架构”->“系统虚拟机”,并定期刷新用户界面。您应该看到“S-1-VM”和“V-2-VM”系统虚拟机(SSVM 和 CPVM)的状态分别为“运行中”和“代理状态”。
之后,您可以转到“镜像”->“模板”,点击名为“CentOS 5.5(64 位) 无 GUI (KVM)”的内置模板,然后点击“区域”选项卡,观察状态如何从几个百分点的下载进度逐渐变为完全下载,之后状态将显示为“下载完成”,“就绪”列将显示为“是”。完成这些步骤后,您就可以使用此模板部署实例了。
以上内容主要来自对 docs.cloudstack.apache.org 的学习,在此特别声明。