CloudStack简介
CloudStack是一个开源的具有高可用性及扩展性的云计算平台,功能和OpenStack类似,因OpenStack需单独部署的组件很多,所以CloudStack较OpenStack来说部署相对容易。
目前Cloudstack支持管理大部分主流的hypervisors,如KVM,XenServer,VMware,Oracle VM,Xen等。同时CloudStack是一个开源云计算解决方案。可以加速高伸缩性的公共和私有云(IaaS)的部署、管理、配置。使用CloudStack作为基础,数据中心操作者可以快速方便的通过现存基础架构创建云服务。
cloudstack层级概念:
Regions:为了提高云的可靠性,可以选择将资源分为多个地理区域。区域是CloudStack部署中最大的可用组织单位。一个区域由几个可用性zones组成,其中每个zone大致相当于一个数据中心。每个Regions均由其在一个zone中运行的管理服务器集群控制。regions中的zones通常相隔非常近。Regions 是用于提供容错和灾难恢复的有用技术。
Zone:Zone 对应于现实中的一个数据中心。
Pod:Pod 对应着一个机架。同一个 pod 中的机器在同一个子网(网段)中。
Cluster:Cluster 是多个主机组成的一个集群。同一个 cluster 中的主机有相同的硬件,相同的 Hypervisor,和共用同样的存储。同一个 cluster 中的虚拟机,可以实现无中断服务地从一个主机迁移到另外一个上。
Host:Host 就是运行虚拟机(VM)的主机,也就是Hypervisor
从层级上来说,一个regions包含多个zone,一个 zone 包含多个 pod,一个 pod 包含多个 cluster,一个 cluster 包含多个 host。
CloudStack存储概念:
CloudStack存储按用途分为主存储(Primary Storage)和二级存储(Secondary Storage),主存储用来存储虚拟机的卷,二级存储用来存放虚拟机的模板,ISO镜像和快照。
Primary storage:一级存储与 cluster 关联,它为该 cluster 中的主机的全部虚拟机提供磁盘卷。一个 cluster 至少有一个一级存储,且在部署时位置要临近主机以提供高性能。CloudStack支持共享存储和分布式存储类型,如:NFS、glusterFS、Ceph等。
Secondary storage:二级存储与 zone 关联,它存储模板文件,ISO 镜像和磁盘卷快照,一个数据中心的模板文件可以给多个Pod使用,这是二级存储的设计意义。
CloudStack其他概念:
模板:可以启动虚拟机的操作系统镜像。
系统模板:CloudStack中的系统虚拟机,用于执行系统任务,如处理KVM、vmware、Xen、网络任务,系统模板需要导入到二级存储中,CloudStack会自动管理系统模板的启停。
ISO 镜像:包含操作系统数据或启动媒质的磁盘镜像。
磁盘卷快照:虚拟机数据的已储存副本,能用于数据恢复或者创建新模板。
网络设置:复杂的概念,一般选择使用基础网络,有需要的参考官方文档
http://docs.cloudstack.apache.org/projects/archived-cloudstack-administration/zh_CN/latest/networking_and_traffic.html
部署CloudStack
小规模的演示环境部署,为了更好的理解CloudStack,建议对下面的功能分别单独部署。
环境说明
演示全部使用Centos 7 2009 minimal进行安装,共4个服务器。
1. Managemant Server:CloudStack管理服务器,安装CloudStack管理程序,理解为Vmware用来管理Vsphere的VCSA。本次只部署单节点。CloudStack Managemant支持HA部署参考:http://docs.cloudstack.apache.org/en/4.18.0.0/conceptsandterminology/choosing_deployment_architecture.html#multi-node-management-server
2. NFS Server:用于提供一级存储和二级存储,使用NFS协议。
3. Image Server:用于CloudStack的IOS和模板文件的镜像下载。CloudStack使用HTTP的形式访问镜像服务器下载和注册ISO或者模板文件。
4. KVM Server:计算节点,使用KVM
前三个服务器可以使用虚拟机,为了保证性能的正常,建议KVM计算节点使用实体机,实在没有的话也可以用虚拟机。但是需要开启虚拟机内虚拟化。
查看是否支持虚拟化:
grep -E '(vmx|svm)' /proc/cpuinfo显示 0 代表未开启
开启方式各个虚拟化平台的不一样,vmware Vsphere需 ssh 进入Console后
vi /etc/vmware/config
修改vhv.enable = "TRUE"
重启Vsphere后开启 reboot
配置规划
hostname | ip | cpu/mem | disk |
---|---|---|---|
cs-mgt01 | 10.101.7.21 | 4c/8g | 100G |
cs-nfs | 10.101.7.23 | 2c/2g | 200G |
cs-is | 10.101.7.30 | 2c/2g | 100G |
cs-kvm01 | 10.101.7.31 | 8c/16g | 100G |
准备工作
Centos清华镜像
https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
使用yum 安装cloudstack,过程很慢,为了安装过程更加顺畅,减少等待时间,建议对cloudstack rpm包和系统模板先行下载
cloudstack rpm:
http://cloudstack.apt-get.eu/centos/7/4.18/
cloudstack systemvm:
http://cloudstack.apt-get.eu/systemvm/4.18/
需要的文件有management(mgt需要)、common(mgt、kvm都需要)、agent(kvm需要)、systemvmtemplate(mgt需要)
具体需要下载的链接如下:
http://cloudstack.apt-get.eu/centos/7/4.18/cloudstack-management-4.18.0.0-1.el7.x86_64.rpm
http://cloudstack.apt-get.eu/centos/7/4.18/cloudstack-common-4.18.0.0-1.el7.x86_64.rpm
http://cloudstack.apt-get.eu/centos/7/4.18/cloudstack-agent-4.18.0.0-1.el7.x86_64.rpm
http://cloudstack.apt-get.eu/systemvm/4.18/systemvmtemplate-4.18.0-kvm.qcow2.bz2
CloudStack 各服务器部署
-
Centos安装(全部)
安装过程略
-
初始化(全部):
- 更换国内源
cp /etc/yum.repos.d/CentOS-Base.repo CentOS-Base.repo_bak curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 阿里镜像源 yum install epel-release.noarch -y curl -o /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo # 下载阿里epel镜像源 yum clean all yum makecache yum update
- 关闭selinux和firewall
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0 systemctl stop firewalld.service systemctl disable firewalld.service
- 添加各节点hosts
vi /etc/hosts
添加
10.101.7.21 cs-mgt01 10.101.7.23 cs-nfs 10.101.7.30 cs-is 10.101.7.31 cs-kvm01
4.安装wget net-tools
yum install -y wget net-tools
-
配置nfs服务器(cs-nfs)
为了减少来回切换服务器,先进行nfs服务器的nfs服务配置
# 安装nfs服务 yum install -y nfs-utils # 创建两个共享文件夹 mkdir -p /export/{primary,secondary} # 共享配置 cat >> /etc/exports << EOF /export/secondary *(rw,async,no_root_squash,no_subtree_check) /export/primary *(rw,async,no_root_squash,no_subtree_check) EOF # 启动nfs systemctl enable rpcbind nfs systemctl start rpcbind nfs exportfs -a 重新加载 # 后面可以使用showmount命令在其他节点查看共享是否成功: showmount -e 10.101.7.23
-
配置CloudStack Managemant服务器(cs-mgt01)
- 安装数据库
可以使用mysql或者mariadb,这里直接用yum 安装mariadb
yum install -y mariadb mariadb-server
- 修改my.cnf
vi /etc/my.cnf [mysqld] innodb_rollback_on_timeout=1 innodb_lock_wait_timeout=600 max_connections=350 log-bin=mysql-bin binlog-format = 'ROW'
max_connections 一台Managemant设置为350,2台HA设置为700,类推
- 设置自启动
systemctl start mariadb systemctl enable mariadb
- 初始化设置密码
mysql_secure_installation
- 导入CloudStack yum源
cat > /etc/yum.repos.d/cloudstack.repo << 'EOF' [cloudstack] name=cloudstack baseurl=http://cloudstack.apt-get.eu/centos/7/4.18/ enabled=1 gpgcheck=0 EOF yum makecache
- YUM 安装 CloudStack
看一下CloudStack源中的版本
yum list cloudstack-management --showduplicates
为了不受版本因素影响到安装的成功率,指定安装4.18.0.0
将前面下载好的systemvmtemplate 文件传入 /root/ 目录
Managemant、common 两个rpm文件传入 /var/cache/yum/x86_64/7/cloudstack/packages/ 目录然后执行
yum install -y cloudstack-management-4.18.0.0
- 导入CloudStack数据库(123456换成你设置的mysql密码)
cloudstack-setup-databases cloud:cloud@localhost --deploy-as=root:123456
输出一系列的OK表示成功
- 初始化cloudstack-management
cloudstack-setup-management
- 启动cloudstack-management
systemctl start cloudstack-management
- 访问Management dashboard(需等待服务启动完成,约1到2分钟)
http://10.101.7.21:8080/
默认用户名/密码:admin/password,登录框左下角可以选择语言
management排障有关
systemctl status cloudstack-management #查看状态
netstat -tunlp|grep 8080 #查看8080端口进程
/var/log/cloudstack/management/management-server.log #日志路径
- 上传系统模板
首先需要挂载nfs共享路径
# 建立一个挂载文件夹 mkdir -p /mnt/secondary/ mount -t nfs 10.101.7.23:/export/secondary /mnt/secondary #导 入kvm系统模板 /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \ -m /mnt/secondary -f /root/systemvmtemplate-4.18.0-kvm.qcow2.bz2 -h kvm -F
- 导入成功后即可取消挂载点,防止management重启后报错
umount /mnt/secondary rmdir /mnt/secondary
- 安装数据库
-
配置计算节点KVM服务器(cs-kvm01)
计算节点需要先配置一个桥接网卡,用来使计算节点下的VM桥接到网络中,网卡名称需要为cloudbr0
- 配置桥接网卡
# 新建桥接网卡 cat > /etc/sysconfig/network-scripts/ifcfg-cloudbr0 << EOF DEVICE=cloudbr0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=10.101.7.31 PREFIX=24 GATEWAY=10.101.7.1 DNS1=119.29.29.29 EOF # 修改网卡配置文件,桥接到cloudbr0上,eno1是我的物理网卡名称,输入 ip a 查看自己的网卡名称,如ens160 cat > /etc/sysconfig/network-scripts/ifcfg-eno1 << EOF TYPE=Ethernet DEVICE=eno1 ONBOOT=yes BRIDGE=cloudbr0 EOF #重启网络,可能需要重启2次 systemctl restart network
- 计算节点也需要导入CloudStack yum源
cat > /etc/yum.repos.d/cloudstack.repo << 'EOF' [cloudstack] name=cloudstack baseurl=http://cloudstack.apt-get.eu/centos/7/4.18/ enabled=1 gpgcheck=0 EOF yum makecache
- YUM 安装 CloudStack Agent
将前面下载好的Agent、common 两个rpm文件传入 /var/cache/yum/x86_64/7/cloudstack/packages/ 目录
然后执行yum install -y cloudstack-agent-4.18.0.0
- 修改libvirt默认配置
#修改vnc默认监听地址 sed -i 's/^#vnc_listen =.*/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf # 指定cloudstack-management地址 sed -i "s/host=.*/host=10.101.7.21/g" /etc/cloudstack/agent/agent.properties # 指定CPU模式 sed -i "/host=.*/a \guest.cpu.mode=host-model" /etc/cloudstack/agent/agent.properties # 重启libvirt systemctl restart libvirtd # agent自启动 systemctl start cloudstack-agent && systemctl enable cloudstack-agent
关于KVM中 VM CPU型号的说明
默认agent.properties配置的CPU模式是QEMU,由QEMU模拟CPU,实际使用中发现windows server2016是安装不了的,故需要修改agent.properties配置文件变更CPU模式
vi /etc/cloudstack/agent/agent.properties
修改为
guest.cpu.mode=host-model实机可以修改为
guest.cpu.mode=host-passthrough
guest.cpu.features=vmxCloudStack CPU模式有几种可以选择
custom:自定义,指定/usr/share/libvirt/cpu_map.xml 中的型号
host-model:主机模式,将识别为和主机最接近的CPU型号,在迁移时有很好的兼容性。
host-passthrough:主机直通,提供最佳性能,但只能迁移到cpu型号一样的主机上。官方的一些示例:
自定义:
guest.cpu.mode=custom
guest.cpu.model=SandyBridge主机模式:
guest.cpu.mode=host-model主机直通
guest.cpu.mode=host-passthrough
guest.cpu.features=vmx
-
配置Image Server服务器(cs-is)
镜像文件HTTP服务器,可以由其他节点兼任
- 安装nginx
yum -y install nginx
- 编辑 nginx 配置文件
vi /etc/nginx/nginx.conf
在access_log /var/log/nginx/access.log main一行后加上
autoindex on;# 显示目录 autoindex_exact_size on;# 显示文件大小 autoindex_localtime on;# 显示文件时间
清空 /usr/share/nginx/html 目录
cd /usr/share/nginx/html rm -rf *
- 启动nginx
systemctl enable nginx systemctl start nginx
- 浏览器访问
传入linux或者windows的iso、qcow2镜像文件到/usr/share/nginx/html目录
访问 http://10.101.7.30/ 查看
Management dashboard配置
访问http://10.101.7.21:8080/
使用默认admin登录后进入资源域配置,添加一个core域
类型选择 基本
Zone 信息
名称一般填写数据中心名称,如没有内部DNS可以和上面的DNS填写一样的,虚拟化系统选择KVM,网络方案默认带安全组
物理网络默认即可
Pod页
一般对应机架,预留系统IP地址是给系统模板VM使用的,5个就差不多了
来宾网络
来宾网络是实例虚拟机使用的地址区间,系统模板VM还是会占用几个,所以不要分的太小
集群名称
添加主机
添加一级存储
协议选择 nfs
服务器填写 IP,也可以是域名,如果你有轮询等高可用的话
路径是nfs服务器的共享路径,可以在mgt服务器使用 showmount -e 10.101.7.23 查看
添加二级存储
提供程序选择 nfs
服务器填写 IP,也可以是域名,如果你有轮询等高可用的话
路径是nfs服务器的共享路径
启动资源域,等待返回成功
等待主存储和二级存储资源数据出现
等待系统VM启动完成
全局设置
搜索 secstorage.allowed.internal.sites
定义允许哪些网络可以访问二级存储,不限制填写 0.0.0.0/0
最大来宾数
默认是50,真实环境很可能会满
修改完后重启cloudstack-management生效
systemctl restart cloudstack-management
注册ISO和模板
看一下HTTP镜像服务器
访问 http://10.101.7.30/ 查看镜像是否已经可以访问
注册iso
Managemant会下载此镜像到二级存储中,当显示Successfully Installed,即可以使用iso创建vm
依上再注册一个windows的iso
创建实例VM
添加实例,然后启动虚拟机
VM状态页
操作栏,查看控制台可以进入vm控制台
web控制台
Windows 虚拟机
Windows server 2016安装时需注意上面提到的cpu mode,修改后即可以使用iso镜像进行安装。
实际使用中,如果没有在安装时分配足够的磁盘,只有C盘,我们还需要挂载数据卷,如:D盘、E盘,这时需要创建新卷
创建后附加此卷到VM
然后你会发现怎么都找不到添加的磁盘,有KVM虚拟化经验的会知道,是因为没有scsi驱动,需要安装virtio-win的驱动
下载地址 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
把下载后的驱动挂载或者传入VM,安装,本次使用的是最新的 virtio-win-0.1.229
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.229-1/virtio-win-0.1.229.iso
安装后磁盘管理即可发现磁盘,操作连接 联机、初始化、分配卷标,即可正常使用
资源管理器
至此,CloudStack 4.18.0 演示环境部署完成
复盘
演示环境:
一个Managemant服务器负责Hypervisor、VM、存储的管理和调度
一个NFS共享服务器负责提供一级和二级存储
一个KVM服务器负责计算
一个HTTP服务器负责提供ISO和模板镜像用来下载注册,任一节点都可兼任
后续如果还想深入的话,方向也就容易理解了:
- 扩展管理节点,实现高可用HA,也就是最少两个Managemant热活
- 扩展计算节点,多个Hypervisor实现资源池,热迁移
- 扩展存储节点,使用分布式存储,如:glusterFS、Ceph
甚至于裸机性能足够时,使用超融合架构,管理、计算、存储一体。
排障
-
系统虚拟机和虚拟路由器无法启动.
现象:cloudstack Command failed due to Internal Server Error/(s-1-VM) Command failed due to Internal Server Error解决办法:删除系统vm和虚拟路由器,系统会自动重建
-
KVM下Windows系统性能拉跨,安装后C盘无法加载为SCSI驱动
创建Windows系统实例时,按正常的方式,先上传ISO或者模板,在选择操作系统类型时,按常规的2008,2016选择时,安装系统时,CloudStack为了让安装过程顺利,系统磁盘的默认格式是IDE,性能很弱,就算后续进入桌面后,手动安装了virtio驱动,C盘也不会更换为SCSI驱动,需要变更ISO或模板的操作系统类型为 Windows PV,PV模式根磁盘才会加载SCSI驱动。
所以系统盘使用SCSI驱动有两种方式,以windows 2016为例
第一种方式:IOS镜像操作系统类型选择为windows 2016,正常安装系统,进入系统后打上virtio驱动,设备管理器中卸载IDE Controller控制器,正常关机,变更实例的操作系统类型为Windows PV,重启实例。如若不行,新尝试挂载一个卷第二种方式,注册一个virtio.ios,安装windows系统之前,直接选择ISO镜像或实例操作系统类型为Windows PV,安装过程中在磁盘界面,在管理界面取消附加的安装盘iso,然后附加virtio的iso,手动加载virtio.iso,选择scsi驱动安装,在重新附加安装盘iso,安装系统后根磁盘就是SCSI磁盘,当然还需要再安装一下virtio驱动包