CloudStack介绍
介绍见: CloudStack介绍
CloudStack安装
先决条件
- 至少两台(
cloudstack-management
和cloudstack-agent
)支持并启用了硬件虚拟化的计算机。 - 一个CentOS的7.5 x86_64的ISO安装文件
- 网关位于xxx.xxx.xxx.1的A / 24网络,该网络上不应该有DHCP,运行CloudStack的计算机都不会有动态地址。同样,这是为了简单起见。
环境准备
一套基本的CloudStack环境,包括一台CloudStack管理端(cloudstack-management),一个mysql数据库,若干台支持KVM虚拟化的计算节点(cloudstack-agent)以及一台用来做为二级存储的nfs服务器:
在实际生产中,mysql数据库和管理端都可能配备多台作为高可用,计算节点一般也是配置较高的物理服务器,但在实验环境,我们可以采用最小化安装模式
,把mysql,nfs和管理端安装在同一台虚拟机上,使用一台支持KVM虚拟化的虚拟机用来作为计算节点
我们的环境
本文使用两台虚拟机来搭建我们的环境,nfs,mysql和管理端都装在同一台虚拟机上,cloudstack-agent安装在一台开启了虚拟化支持的虚拟机上,部署架构如下:
定义
- 两台服务器的IP是:
- CloudStack管理端(cloudstack-management):172.18.193.1
- KVM虚拟化的计算节点(cloudstack-agent):172.18.193.2
CloudStack管理端
升级yum
1 | yum -y upgrade |
主机名
CloudStack要求正确设置主机名。如果您在安装中使用了默认选项,那么您的主机名当前设置为localhost.localdomain。为了测试这个,我们将运行:
1 | hostname --fqdn |
此时它可能会返回:
1 | localhost |
要纠正这种情况 - 我们将通过编辑/etc/hosts
文件来设置主机名,以便它遵循与此示例类似的格式:
1 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 |
修改完该文件后,重新启动网络:
1 | systemctl restart network |
现在使用hostname -fqdn
命令重新检查并确保它返回FQDN响应
设置SELinux
目前,要使CloudStack正常工作,SELinux必须设置为允许。我们希望为将来的引导配置它,并在当前运行的系统中对其进行修改。
要在运行的系统中将SELinux配置为允许,我们需要运行以下命令:
1 | setenforce 0 |
为了确保它保持在该状态,我们需要配置文件/etc/selinux/config
以反映许可状态,如下例所示:
1 | # This file controls the state of SELinux on the system. |
NTP安装
NTP配置是保持云服务器中所有时钟同步的必要条件。但是,默认情况下不安装NTP。所以我们将在此阶段安装和配置NTP。安装完成如下:
1 | yum -y install ntp |
实际的默认配置适用于我们的目的,因此我们只需要启用它并将其设置为在启动时启动,如下所示:
1 | systemctl enable ntpd |
配置CloudStack包存储库
我们需要将机器配置为使用CloudStack软件包存储库。
要添加CloudStack存储库,请创建/etc/yum.repos.d/cloudstack.repo
并插入以下信息。
1 | [cloudstack] |
NFS 安装
我们的配置将使用NFS进行主存储和二级存储。我们将继续为此目的设置两个NFS共享。我们首先安装nfs-utils。
1 | yum -y install nfs-utils |
我们现在需要配置NFS以提供两个不同的共享。这在/etc/exports
文件中相对容易处理。您应该确保它具有以下内容:
1 | /data/primary *(rw,async,no_root_squash,no_subtree_check) |
您将注意到我们在系统上指定了两个目录(尚未存在)。我们将继续使用以下命令创建这些目录并在其上适当地设置权限:
1 | mkdir -p /data/primary |
CentOS 7.x版本默认使用NFSv4。NFSv4要求域设置在所有客户端上匹配。在我们的示例中,域是cloud.priv,因此请确保取消注释/etc/idmapd.conf
中的域设置并设置如下:
1 | Domain = cloud.priv |
现在,您需要在/etc/sysconfig/nfs
文件的底部添加配置值(或者仅取消注释并设置它们)
1 | LOCKD_TCPPORT=32803 |
现在我们需要禁用防火墙,这样它就不会阻止连接
1 | systemctl stop firewalld |
我们现在需要配置nfs服务以在启动时启动,并通过执行以下命令实际在主机上启动它:
1 | systemctl enable rpcbind |
重新启动nfs
1 | systemctl restart nfs |
测试nfs服务端是否能访问
在 agent端执行showmount -e 172.18.193.1
管理服务器安装
数据库安装和配置
我们将首先安装MySQL并配置一些选项,以确保它与CloudStack一起运行良好。
首先,由于CentOS 7不再提供MySQL二进制文件,我们需要添加一个存储库:
1 | wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm |
通过运行以下命令进行安装:
1 | yum -y install mysql-server |
现在安装了MySQL,我们需要对/etc/my.cnf进行一些配置更改。具体来说,我们需要在[mysqld]部分添加以下选项:
1 | innodb_rollback_on_timeout=1 |
现在MySQL已正确配置,我们可以启动它并将其配置为在启动时启动,如下所示:
1 | systemctl enable mysqld |
MySQL连接器安装
使用官方MySQL软件包存储库安装Python MySQL连接器。/etc/yum.repos.d/mysql.repo
使用以下内容创建文件:
1 | [mysql-connectors-community] |
从MySQL导入GPG公钥:
1 | rpm --import http://repo.mysql.com/RPM-GPG-KEY-mysql |
安装mysql-connector
1 | yum install mysql-connector-python |
安装管理服务器
我们现在要安装管理服务器。我们通过执行以下命令来做到这一点:
1 | yum -y install cloudstack-management |
当yum -y install cloudstack-management
命令不好使的时候,操作如下:
1 | wget http://download.cloudstack.org/centos/7/4.11/cloudstack-management-4.11.2.0-1.el7.centos.x86_64.rpm |
安装了应用程序本身后,我们现在可以设置数据库,我们将使用以下命令和选项执行此操作:
1 | cloudstack-setup-databases cloud:password@localhost --deploy-as=root |
完成此过程后,您应该看到“CloudStack has successfully initialized the database.”之类的消息。
既然已经创建了数据库,我们可以通过发出以下命令来设置管理服务器的最后一步:
1 | cloudstack-setup-management |
系统模板设置
CloudStack使用许多系统VM来提供访问虚拟机控制台,提供各种网络服务以及管理存储的各个方面的功能。当我们引导您的云时,此步骤将获取准备部署的系统映像。
现在我们需要下载系统VM模板并将其部署到我们刚刚挂载的共享。管理服务器包括用于正确操纵系统VMs映像的脚本。
1 | /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /data/secondary -u http://download.cloudstack.org/systemvm/4.11/systemvmtemplate-4.11.2-kvm.qcow2.bz2 -h kvm -F |
这就结束了我们的管理服务器的安装
CloudStack计算节点
升级yum
1 | yum -y upgrade |
配置网络
要将其配置为在您的环境中工作。由于我们指定在此环境中不存在DHCP服务器,因此我们将手动配置您的网络接口。
在继续之前,请确保安装了“brctl”并且可用:
1 | yum install bridge-utils -y |
通过控制台连接,您应该以root用户身份登录。我们将首先创建Cloudstack将用于网络的桥梁。创建并打开vi /etc/sysconfig/network-scripts/ifcfg-cloudbr1
并添加以下设置:
IP寻址 - 在本文档中,我们假设您将拥有一个用于CloudStack实施的/24网络。这可以是任何RFC 1918网络。
1 | DEVICE=cloudbr1 |
保存配置并退出。
打开vi /etc/sysconfig/network-scripts/ifcfg-em1
配置文件并按如下所示进行配置:
接口名称仅用作示例。将em1替换为您的默认以太网接口名称。
1 | DEVICE=em1 |
现在我们已经正确设置了配置文件,我们需要运行一些命令来启动网络:
1 | systemctl enable network |
请注意,如果您通过SSH连接,则会暂时(约5秒,具体取决于硬件)断开连接。如果断开连接,则配置中存在错误。
主机名
CloudStack要求正确设置主机名。如果您在安装中使用了默认选项,那么您的主机名当前设置为localhost.localdomain。为了测试这个,我们将运行:
1 | hostname --fqdn |
此时它可能会返回:
1 | localhost |
要纠正这种情况 - 我们将通过编辑vi /etc/hosts
文件来设置主机名,以便它遵循与此示例类似的格式:
1 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 |
修改完该文件后,重新启动网络:
1 | systemctl restart network |
现在使用hostname -fqdn
命令重新检查并确保它返回FQDN响应(如下:)
1 | hostname: invalid option -- 'q' |
设置SELinux
目前,要使CloudStack正常工作,SELinux必须设置为允许。我们希望为将来的引导配置它,并在当前运行的系统中对其进行修改。
要在运行的系统中将SELinux配置为允许,我们需要运行以下命令:
1 | setenforce 0 |
为了确保它保持在该状态,我们需要配置文件vi /etc/selinux/config
以反映许可状态,如下例所示:
1 | # This file controls the state of SELinux on the system. |
NTP安装
NTP配置是保持云服务器中所有时钟同步
的必要条件。但是,默认情况下不安装NTP。所以我们将在此阶段安装和配置NTP。安装完成如下:
1 | yum -y install ntp |
实际的默认配置适用于我们的目的,因此我们只需要启用它并将其设置为在启动时启动,如下所示:
1 | systemctl enable ntpd |
配置CloudStack包存储库(可不做该操作)
要添加CloudStack存储库,请创建vi /etc/yum.repos.d/cloudstack.repo
并插入以下信息.
1 | [cloudstack] |
KVM设置和安装
KVM是我们将要使用的虚拟机管理程序 - 您可以使用相同的步骤将其他KVM节点添加到您的CloudStack环境中。
安装节点服务器
1 | yum -y install cloudstack-agent |
当yum -y install cloudstack-agent
命令不好使的时候,操作如下:
1 | # 下载 |
我们有两个不同的KVM部分需要配置,libvirt
和QEMU
。
QEMU配置
KVM配置只在一个项目上相对简单。我们需要编辑QEMU VNC配置。这是通过编辑vi /etc/libvirt/qemu.conf
并确保以下行存在并取消注释来完成的。
1 | vnc_listen=0.0.0.0 |
Libvirt配置
CloudStack使用libvirt来管理虚拟机。因此,正确配置libvirt至关重要。Libvirt是云代理的依赖,应该已经安装。
为了实现实时迁移,libvirt必须监听不安全的TCP连接。我们还需要关闭libvirts尝试使用多播DNS广告。这两个设置都在
vi /etc/libvirt/libvirtd.conf
中设置以下参数:
1
2
3
4
5listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0在libvirtd.conf中打开“listen_tcp”是不够的,我们还要更改参数,我们还需要修改
vi /etc/sysconfig/libvirtd
:取消注释以下行:
1
LIBVIRTD_ARGS=-l
重启libvirt
1
systemctl restart libvirtd
设置agent主机的vi /etc/cloudstack/agent/agent.properties
1 | #Storage |
或者
1 | #Storage |
/etc/cloudstack/agent/agent.properties
中的内容可以手动在agent上面执行添加主机的命令。具体添加主机的命令可以在management
的日志中获得:
1 | cat /var/log/cloudstack/management/management-server.log | grep cloudstack-setup-agent |
比如我上面的例子,得到如下命令,并在agent上面执行:
1 | [root@kvm01 ~]# cloudstack-setup-agent -m 172.18.193.1 -z 1 -p 1 -c 1 -g 4b68fece-7efd-3f85-9450-e875eaa6fb29 -a -s --pubNic=cloudbr0 --prvNic=cloudbr0 --guestNic=cloudbr0 --hypervisor=kvm |
KVM配置完成
为了完整起见,您应该检查KVM在您的计算机上是否正常运行:
1
2
3
4
5
6lsmod | grep kvm
# 输出
kvm_intel 183705 47
kvm 615914 1 kvm_intel
irqbypass 13503 37 kvm
这就结束了我们对KVM的安装和配置,现在我们将使用CloudStack UI来实际配置我们的云。
CloudStack系统配置
访问地址:
1 | http://<management-server-ip-address>:8080/client |
如果管理服务器是全新的安装,那么会出现一个安装向导。在稍后的访问中,你将看到一个登录界面,,你需要通过用户名和密码登入来查看你的仪表盘。
1 | 用户名 -> 你账号的用户ID。默认用户名是admin。 |
CloudStack用户界面帮助云基础设施的用户查看和使用他们的云资源,包括虚拟机、模板和ISO、数据卷和快照、宾客网络,以及IP 地址。如果用户是一个或多个CloudStack项目的成员或管理员,用户界面能提供一个面向项目的视图。
选择”我以前是用过CloudStack,跳过此指南”按钮
选择“资源域”
选择“添加资源域”
选择“基本”网络,点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
1 | # 配置内容如下: |
点击”下一步”
点击“启动资源域”
成功后,先不启动资源域,我们可以先看下基础架构
此时系统VM为0
资源启动成功后,系统VM会出现2台
系统VM是不同于主机上创建的普通虚拟机的,他们是CloudStack云平台自带的用于完成自身的一些任务的虚拟机
。
- Secondary Storage VM:简称为SSVM,用于管理二级存储的相关操作,如模板跟镜像文件的上传与下载,快照,volumes的存放,第一次创建虚拟机时从二级存储拷贝模板到一级存储并且自动创建快照,每一个资源域可以有多个SSVM,当SSVM被删除或停止,它会自动被重建并启动。
- Console Proxy VM:用于在web 界面上展示控制台。
通过查看控制台
访问里面的虚拟机
CloudStack 虚拟机实例
虚拟机实例
默认的模板并没有被下载
修改全局设置secstorage.allowed.internal.sites
设置 ,二级存储ISO镜像和模板可以下载,IP网段
重启服务systemctl restart cloudstack-management
搭建http服务器-nginx
目的:注册ISO时需要填镜像的url,实时下载镜像,外网或者网速不是很好下载会很慢甚至下载失败,故搭建自己的http服务器以便在内网下载镜像,这样速度会快很多。
注 :在cloudstack-management管理服务器节点
搭建nginx
操作教程见:搭建http服务器-nginx
制作模板
注册ISO
接下来按步骤走,就可以创建出第一个虚拟机了。