title: cloudstack + kvm部署实践 #标题tags: cloudstack #标签
date: 2021-02-26
categories: cloudstack # 分类

新工作需要用到cloudstack,故找些资料,视频等来学些cloudstack。

起初在B站上找到了老男孩高级架构师体系13期-143p视频资料,打算以此视频学习,但看过后发现视频被阉割过,讲的也一般,所以还是斥巨资买了大黄老师的课程——《cloudstack4.14安装部署与应用》视频教程。讲的知识点比较细,点赞!(内心OS:想在b站上白嫖一份学习资料,果然,便宜没好货)。

大黄老师只提供了一个ppt资料,而且我向来也有写博客的习惯,so… 这篇博客就出来了,我尽量将视频中提到的知识点,都在我的博客中展示出来。

cloudstack简介

CloudStack是一个开源的具有高可用性及扩展性的云计算平台。目前Cloudstack支持管理大部分主流的hypervisors,如KVM,XenServer,VMware,Oracle VM,Xen等。同时CloudStack是一个开源云计算解决方案。可以加速高伸缩性的公共和私有云(IaaS)的部署、管理、配置。使用CloudStack作为基础,数据中心操作者可以快速方便的通过现存基础架构创建云服务。

cloudstack概念架构

cloudstack   kvm部署实践 - 图1

  • 用户:通过网络访问属于“我”的虚拟机、存储空间、管理“我”的个人模板。
  • 管理员:部署配置,管理账户,监控资源,安排作业,排除故障。
  • 开发人员:开发计费、监控、统计报表等功能模块,定制图形界面、工作流。

cloudstack部署架构

cloudstack   kvm部署实践 - 图2

上图中的各个组件介绍如下:

  • Regions:为了提高云的可靠性,可以选择将资源分为多个地理区域。区域是CloudStack部署中最大的可用组织单位。一个区域由几个可用性zones组成,其中每个zone大致相当于一个数据中心。每个Regions均由其在一个zone中运行的管理服务器集群控制。regions中的zones通常相隔非常近。Regions 是用于提供容错和灾难恢复的有用技术。
  • Zone:Zone 对应于现实中的一个数据中心。
  • Pod:Pod 对应着一个机架。同一个 pod 中的机器在同一个子网(网段)中。
  • Cluster:Cluster 是多个主机组成的一个集群。同一个 cluster 中的主机有相同的硬件,相同的 Hypervisor,和共用同样的存储。同一个 cluster 中的虚拟机,可以实现无中断服务地从一个主机迁移到另外一个上。
  • Host:Host 就是运行虚拟机(VM)的主机。
  • Primary storage:一级存储与 cluster 关联,它为该 cluster 中的主机的全部虚拟机提供磁盘卷。一个 cluster 至少有一个一级存储,且在部署时位置要临近主机以提供高性能。
  • Secondary storage:二级存储与 zone 关联,它存储模板文件,ISO 镜像和磁盘卷快照。
  • 模板:可以启动虚拟机的操作系统镜像,也包括了诸如已安装应用的其余配置信息。
  • ISO 镜像:包含操作系统数据或启动媒质的磁盘镜像。
  • 磁盘卷快照:虚拟机数据的已储存副本,能用于数据恢复或者创建新模板。

即从包含关系上来说,一个regions包含多个zone,一个 zone 包含多个 pod,一个 pod 包含多个 cluster,一个 cluster 包含多个 host。

cloudstack和kvm一起部署的架构

cloudstack   kvm部署实践 - 图3

如上所述:在每个kvm的宿主机上都需要部署agent程序。

cloudstack跟vsphere一起部署的架构

cloudstack   kvm部署实践 - 图4

如果部署vmware的产品就必须部署vcenter server。

cloudstack部署实践

关于这部分内容,请阅读官方文档

主要是介绍cloudstack支持的存储协议、架构模式、机器配置等建议。

cloudstack和openstack比较

难易度 适合规模 参考资料 是否开源 市场占有率
cloudstack 组件少,较易 小、中、大 较少
openstack 组件多,较难 中、大 较多

部署cloudstack

环境准备

OS 主机名 IP rules services explain
cenots 7.7 management 192.168.20.2 管理节点 chronyd、cloudstack-management、mariadb、nginx 用于管理整个cloudstack,最少2c4g
cenots 7.7 kvm1 192.168.20.3 计算节点 kvm 用于运行租户创建的虚拟机,建议4c4g
cenots 7.7 nfs 192.168.20.4 存储节点 nfs 提供主存储、二级存储,最少2g1c,一块100G磁盘
cenots 7.7 l3switch 192.168.20.5 路由器 提供路由角色,建议1g1c,至少两张网卡

注:explain列中的g表示内存大小,c表示CPU核心数。

大家不要好奇l3switch是干啥的,之所以需要这个角色,是因为我们安装cloudstack后创建的虚机,需要通过此节点充当路由器,从而可以让VM可以连通外网。但在生产中,是不需要这么配置的,需要和网络管理员协调沟通虚机所用网络,然后在物理三层交换机上进行网关配置。

另外,计算节点需开启CPU虚拟化功能,如下:

cloudstack   kvm部署实践 - 图5

注:为了防止官方版本更新迭代,后续找不到文章中用到的包,所以放在百度网盘一份,提取码:1233。

系统初始化

系统初始化这一小节,如果没有特别说明,均需在所有节点执行。

修改主机名

  1. # 根据实际情况设置主机名
  2. $ hostnamectl set-hostname management
  3. $ hostnamectl set-hostname kvm1
  4. $ hostnamectl set-hostname nfs
  5. $ hostnamectl set-hostname l3switch
  6. # 主机名更改后,执行下面命令生效
  7. $ bash
  8. source /etc/profile

关闭防火墙及selinux

在生产环境中,建议防火墙放行内网网段即可。selinux设置为permissive模式。(视频资料中说selinux设置为disable会有问题,具体待验证。)

  1. # 关防火墙
  2. $ systemctl stop firewalld && systemctl disable firewalld
  3. # 关selinux
  4. setenforce 0
  5. sed -i 's#^SELINUX=.*#SELINUX=permissive#g' /etc/selinux/config
  6. sed -i 's#^SELINUX=.*#SELINUX=permissive#g' /etc/sysconfig/selinux

配置时间同步

  1. # management节点配置时间同步服务端
  2. $ cat > /etc/chrony.conf << EOF
  3. bindcmdaddress 0.0.0.0
  4. server ntp.aliyun.com iburst
  5. allow 192.168.20.0/24
  6. driftfile /var/lib/chrony/drift
  7. makestep 1.0 3
  8. rtcsync
  9. logdir /var/log/chrony
  10. EOF
  11. # 重启chronyd
  12. systemctl enable chronyd && systemctl restart chronyd
  13. # 其余节点同步management时间
  14. $ mv /etc/chrony.conf{,.bak}
  15. cat > /etc/chrony.conf << EOF
  16. server 192.168.20.2 iburst
  17. driftfile /var/lib/chrony/drift
  18. makestep 1.0 3
  19. rtcsync
  20. logdir /var/log/chrony
  21. EOF
  22. # 重启chronyd
  23. systemctl enable chronyd && systemctl restart chronyd

配置yum源

这一步主要是将默认的国外yum源配置为国内阿里的yum,如果你有自己内网的yum源服务器,请跳过此步骤。

  1. # 更换为阿里云源
  2. $ mkdir /etc/yum.repos.d/bak
  3. mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
  4. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  5. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  6. cat > /etc/yum.repos.d/cloudstack.repo << 'EOF'
  7. [cloudstack]
  8. name=cloudstack
  9. baseurl=http://download.cloudstack.org/centos/$releasever/4.15/
  10. enabled=1
  11. gpgcheck=0
  12. EOF

配置nfs服务

此步骤在nfs节点执行。

  1. $ yum -y install nfs-utils
  2. cat >> /etc/exports << EOF
  3. /export/secondary *(rw,async,no_root_squash,no_subtree_check)
  4. /export/primary *(rw,async,no_root_squash,no_subtree_check)
  5. EOF
  6. # 格式化并挂载磁盘
  7. mkfs.xfs /dev/sdb
  8. mkdir /export/
  9. mount /dev/sdb /export/
  10. # 设置开机自动挂载
  11. # 根据我的运维经验来讲,不建议将非系统盘使用 /etc/fstab 文件来进行自动挂载
  12. # 防止因磁盘损坏而无法开机
  13. # 建议写入 rc.local 文件,并赋予其执行权限
  14. # rc.local 文件是系统正常启动后执行的一个文件,不会因为磁盘损坏而无法开机
  15. $ echo 'mount /dev/sdb/ /export/' >> /etc/rc.local
  16. $ chmod +x /etc/rc.local
  17. # 创建共享目录
  18. mkdir /export/{primary,secondary}
  19. # 设置nfs固定端口(默认使用随机端口,如果内网放行了整个网段,可不配置)
  20. $ cat >> /etc/sysconfig/nfs << EOF
  21. LOCKD_TCPPORT=32803
  22. LOCKD_UDPPORT=32769
  23. MOUNTD_PORT=892
  24. RQUOTAD_PORT=875
  25. STATD_PORT=662
  26. STATD_OUTGOING_PORT=2020
  27. EOF
  28. # 启动nfs
  29. systemctl enable rpcbind nfs
  30. systemctl start rpcbind nfs

其他任意节点确保可查看到共享目录:

  1. $ showmount -e 192.168.20.4
  2. Export list for 192.168.20.4:
  3. /export/primary *
  4. /export/secondary *

安装cloudstack-management

安装mariadb

关于mariadb的优化和高可用性,不在这里展开介绍,这里的目的是能用就行。

  1. # 安装数据库
  2. $ yum -y install mariadb mariadb-server mysql-connector-python
  3. # 定义数据库配置文件
  4. $ cat > /etc/my.cnf.d/cloustack.cnf << EOF
  5. [mysqld]
  6. bind-address = 192.168.20.2
  7. innodb_rollback_on_timeout=1
  8. innodb_lock_wait_timeout=600
  9. max_connections=350
  10. log-bin=mysql-bin
  11. binlog-format = 'ROW'
  12. EOF
  13. # 启动数据库
  14. $ systemctl enable mariadb && systemctl start mariadb
  15. # 运行mysql_secure_installation命令,对数据库进行安全初始化
  16. $ mysql_secure_installation
  17. NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
  18. SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
  19. In order to log into MariaDB to secure it, we'll need the current
  20. password for the root user. If you've just installed MariaDB, and
  21. you haven't set the root password yet, the password will be blank,
  22. so you should just press enter here.
  23. Enter current password for root (enter for none): # 默认密码为空,直接回车即可
  24. OK, successfully used password, moving on...
  25. Setting the root password ensures that nobody can log into the MariaDB
  26. root user without the proper authorisation.
  27. Set root password? [Y/n] y # 按“回车” 设置密码
  28. New password: # 第一次输入密码
  29. Re-enter new password: # 再次输入密码
  30. Password updated successfully!
  31. Reloading privilege tables..
  32. ... Success!
  33. Remove anonymous users? [Y/n] # 回车
  34. Normally, root should only be allowed to connect from 'localhost'. This
  35. ensures that someone cannot guess at the root password from the network.
  36. Disallow root login remotely? [Y/n] n # 测试,为了方便,输入 n,不禁止root从远程登录
  37. ... skipping.
  38. # 接下来的所有提示,直接回车即可。

安装cloudstack-management

  1. # 下载rpm包(如果下载较慢,请使用windows下的多线程工具,如NDM等先下载到本地,再上传至服务器)
  2. $ wget http://download.cloudstack.org/centos/7/4.14/cloudstack-common-4.14.0.0-1.el7.x86_64.rpm
  3. $ wget http://download.cloudstack.org/centos/7/4.14/cloudstack-management-4.14.0.0-1.el7.x86_64.rpm
  4. # 安装
  5. $ yum -y install cloudstack-common-4.14.0.0-1.el7.x86_64.rpm \
  6. cloudstack-management-4.14.0.0-1.el7.x86_64.rpm

导入数据库

  1. # 可通过 cloudstack-setup-databases --help 查看其他命令选项及其含义
  2. $ cloudstack-setup-databases cloud:123.com@192.168.20.2 --deploy-as=root:123.com
  3. # cloud:123.com:表示执行成功后,mysql数据库将创建一个密码为123.com的cloud用户供管理节点使用。
  4. # 192.168.20.2:指定数据库地址,可增加 :port ,指定端口,默认端口为3306。
  5. # --deploy-as:指定你本次使用哪个数据库用户导入数据

输出如下信息,表示数据库初始化成功:

cloudstack   kvm部署实践 - 图6

启动manager server

  1. # 第一次启动请这样启动
  2. $ cloudstack-setup-management
  3. # 执行后将输出如下信息,则表示启动成功:
  4. Starting to configure CloudStack Management Server:
  5. Configure Firewall ... [OK]
  6. Configure CloudStack Management Server ...[OK]
  7. CloudStack Management Server setup is Done!
  8. # 后续启动方式请使用
  9. $ systemctl restart cloudstack-management

访问dashboard

访问management的8080端口,可以看到如下界面,则表示management安装成功(默认用户名/密码:admin/password):

cloudstack   kvm部署实践 - 图7

上传系统虚机镜像

cloudstack默认依赖几个虚机运行,当cloudstack添加区域后,他将自动启动相关虚机,所以还需要将镜像导入到二级存储中。

  1. # management节点执行即可(需要先将二级存储挂载到本地)
  2. $ mkdir -p /mnt/secondary
  3. mount 192.168.20.4:/export/secondary/ /mnt/secondary/
  4. # 下载镜像文件
  5. $ wget http://download.cloudstack.org/systemvm/4.14/systemvmtemplate-4.14.0-kvm.qcow2.bz2
  6. # 上传至二级存储
  7. /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
  8. -m /mnt/secondary -f systemvmtemplate-4.14.0-kvm.qcow2.bz2 -h kvm -F

输出如下,则表示上传成功:

cloudstack   kvm部署实践 - 图8

  1. # 镜像上传成功后,management节点即可卸载掉挂载点了
  2. $ umount /mnt/secondary/

配置计算节点

注:此步骤只需在计算节点上执行。

修改网络配置

主要是生成一个网桥设备,以便VM都可以连接到此网桥。

  1. # 备份源网卡配置文件
  2. $ cp /etc/sysconfig/network-scripts/ifcfg-ens33{,_$(date +%F_%H).bak}
  3. # 修改网卡配置文件
  4. cat > /etc/sysconfig/network-scripts/ifcfg-ens33 << EOF
  5. TYPE=Ethernet
  6. DEVICE=ens33
  7. ONBOOT=yes
  8. BRIDGE=cloudbr0
  9. EOF
  10. cat > /etc/sysconfig/network-scripts/ifcfg-cloudbr0 << EOF
  11. DEVICE=cloudbr0
  12. TYPE=Bridge
  13. ONBOOT=yes
  14. BOOTPROTO=static
  15. IPADDR=192.168.20.3
  16. GATEWAY=192.168.20.1
  17. DNS1=223.5.5.5
  18. EOF
  19. # 修改完成后,务必检查是否修改正确,网卡名称、IP地址与你的实际环境是否一致
  20. # 确认无误后,重启网络服务
  21. $ systemctl restart network

安装cloudstack-agent

  1. # 下载rpm包(如果下载较慢,请使用windows下的多线程工具,如NDM等先下载到本地,再上传至服务器)
  2. $ wget http://download.cloudstack.org/centos/7/4.14/cloudstack-common-4.14.0.0-1.el7.x86_64.rpm
  3. $ wget http://download.cloudstack.org/centos/7/4.14/cloudstack-agent-4.14.0.0-1.el7.x86_64.rpm
  4. # 安装cloustack-agent
  5. $ yum -y install cloudstack-agent-4.14.0.0-1.el7.x86_64.rpm \
  6. cloudstack-common-4.14.0.0-1.el7.x86_64.rpm

确认加载kvm模块

  1. $ lsmod | grep kvm # 输出如下,则表示已加载
  2. kvm_intel 183621 0
  3. kvm 586948 1 kvm_intel
  4. irqbypass 13503 1 kvm

修改libvirt默认配置

  1. # 修改vnc默认监听地址
  2. $ sed -i 's/^#vnc_listen =.*/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf
  3. # 指定cloudstack-management地址
  4. $ MGR_IP=192.168.20.2 # 将其替换为你的实际manager地址。
  5. $ sed -i "s/host=.*/host=${MGR_IP}/g" /etc/cloudstack/agent/agent.properties
  6. # 重启libvirt
  7. $ systemctl restart libvirtd

启动cloudstack-agent并加入开机自启

  1. $ systemctl start cloudstack-agent && systemctl enable cloudstack-agent

旧版本的一些配置

在网上参考资料也好,还是看官方文档,都提到了下面这些配置,但买的大黄老师的课程,讲解的是无需进行如下配置,最后验证也是可以成功的,但不知道配置的话,有没有什么副作用。(我这里只是记录下,但没有进行下面的配置哦!)

  1. $ vim /etc/libvirt/libvirtd.conf
  2. listen_tls = 0
  3. listen_tcp = 1
  4. tcp_port = "16509"
  5. auth_tcp = "none"
  6. mdns_adv = 0
  7. $ vim /etc/sysconfig/libvirtd
  8. LIBVIRTD_ARGS="--listen"
  9. # 重启libvirt
  10. $ systemctl restart libvirtd

规划cloustack网络

在cloudstack中,提供了两种网络:基本网络和高级网络。这篇博文将基于基本网络进行配置,如果要配置高级网络,那么这篇博文不用继续往下看了,移步即可。

基本网络

基本网络模式采用传统扁平网络,与现有网络完美兼容,其网络通信拓扑如下:

cloudstack   kvm部署实践 - 图9

基础网络模式只提供了简单的网络模型,管理网络、来宾网络、存储网络、V-Route(只提供了DNS、dhcp,并不提供网关服务)等。

高级网络

高级网络模式中,每个租户获得一个或多个来宾网络,每个网络属于独立的VLAN,由虚拟路由器为这些来宾网络提供网关服务。

虚拟路由器(系统虚拟机提供)在高级网络中十分重要,它将成为租户私有网络与公共网络之间的接口,并未租户私有网络提供各种网络服务,包括NAT、静态NAT、DHCP、DNS、Load Balancing、Port Forwording、Firewalls、Site-to-Site 虚拟专用网、VPC等。

高级网络架构图如下:

cloudstack   kvm部署实践 - 图10

两种不同的网络,对来宾网络(Guest Network)采用的隔离方式不同,在基本模式下,采用安全组(Security Group)方式进行隔离;而在高级网络中,采用VLAN方式进行隔离。

具体网络规划

角色 网络
management 192.168.20.2
kvm1 192.168.20.3
nfs 192.168.20.4
l3swith 192.168.20.5、192.168.30.1
保留 192.168.20.11-192.168.20.40
虚拟机(guest) 192.168.30.0/24

创建zone

登录到cloudstack-management的管理控制台,进行如下操作,以便添加第一个zone:

1、网络选择基本的:
cloudstack   kvm部署实践 - 图11

2、配置区域

cloudstack   kvm部署实践 - 图12

cloudstack   kvm部署实践 - 图13

网络方案介绍:

  • DefaultSharedNetworkOfferingWithSGService:带有安全组的网络方案,推荐选择此选项。
  • DefaultSharedNetworkOffering:不带安全组功能。
  • DefaultSharedNetscalerEIPandELBNetworkOffering:如果你在CLOUDSTACK内安装了Citrix NetScaler应用,并且你需要Elastic IP和Elastic Load Balancing这些功能的话,那就选择这个选项。EIP 和ELB技术在安全组启用的情况下,可以提供1:1的NAT映射和负载均衡功能。此功能需要citrix硬件支持,一般很少用。
  • QuickCloudNoServices:表示什么都不用,新增选项,不建议使用。

3、配置网络

cloudstack   kvm部署实践 - 图14

4、配置提供点名称并设置网络相关信息

其中,提供点名称为自定义,其余信息,按照之前的网络规划填写即可。

cloudstack   kvm部署实践 - 图15

5、设置来宾网络

cloudstack   kvm部署实践 - 图16

6、自定义集群名称

cloudstack   kvm部署实践 - 图17

7、添加计算节点

cloudstack   kvm部署实践 - 图18

8、配置主存储

cloudstack   kvm部署实践 - 图19

9、配置二级存储

cloudstack   kvm部署实践 - 图20

10、启动资源域

激动人心的时刻到了,这一步,将检验你之前所有的操作是否正确。

cloudstack   kvm部署实践 - 图21

卡在这里时间会长一些,只要没报错,你就接着等下去。

cloudstack   kvm部署实践 - 图22

11、启用资源域

谢天谢地,终于看到了激动人心的画面:

cloudstack   kvm部署实践 - 图23

验证cloudstack可用性

至此,你必须保证下面的任意资源都为“UP” 状态,如下:

cloudstack   kvm部署实践 - 图24

1、资源域状态为“Enabled”

cloudstack   kvm部署实践 - 图25

2、提供点状态

cloudstack   kvm部署实践 - 图26

3、群集状态

cloudstack   kvm部署实践 - 图27

4、主机状态必须为 “Up”
cloudstack   kvm部署实践 - 图28

5、主存储
cloudstack   kvm部署实践 - 图29

6、二级存储

cloudstack   kvm部署实践 - 图30

7、系统VM必须正常

cloudstack   kvm部署实践 - 图31

至此,可以说你的集群完全可用了,但虚拟路由器现在数量为 “0”,当我们创建第一个实例后,虚拟路由器就被创建了。

启动实例

现在,我们就来启动一个实例进行验证。需要自行准备一张系统盘。最好是centos的。附:centos镜像下载链接

注册ISO

注册ISO镜像支持两种方式,一种是从本地上传,一种是从一个URL主机,为了速度考虑,建议自行准备http服务器,然后配置为文件服务器,进行注册ISO(本地上传功能不靠谱)。

1、安装nginx

任意节点安装即可,既然博文开头规划在了management节点,那就在这个节点吧。

  1. # 安装nginx
  2. $ yum -y install nginx
  3. # 配置为文件服务器,修改location规则如下
  4. location / {
  5. autoindex on;
  6. autoindex_exact_size off;
  7. autoindex_localtime on;
  8. }
  9. # 启动nginx
  10. $ nginx
  11. # 上传镜像文件至网页根目录,必须保证有如下文件
  12. ll /usr/share/nginx/html/CentOS-7.0-1406-x86_64-DVD.iso
  13. -rw-r--r--. 1 root root 4148166656 7 31 2020 /usr/share/nginx/html/CentOS-7.0-1406-x86_64-DVD.iso
  14. # 验证下载链接是否有效
  15. $ wget http://192.168.20.2/CentOS-7.0-1406-x86_64-DVD.iso

可以看到在正常下载即可:

cloudstack   kvm部署实践 - 图32

2、定义允许哪些网络可以访问二级存储

cloudstack   kvm部署实践 - 图33

3、重启cloudstack-management生效

  1. # management节点重启服务
  2. $ systemctl restart cloudstack-management

重启后,需要稍等片刻,待8080端口在监听,才可以继续访问控制台:

  1. $ ss -lntp | grep 8080
  2. LISTEN 0 50 [::]:8080 [::]:* users:(("java",pid=26909,fd=31))

4、注册ISO

访问控制台,进行如下操作:

cloudstack   kvm部署实践 - 图34

查看镜像上传进度:

cloudstack   kvm部署实践 - 图35

自行刷新页面,直至完成:

cloudstack   kvm部署实践 - 图36

稍等片刻,看到镜像状态如下,则表示成功:

cloudstack   kvm部署实践 - 图37

创建实例

1、指定资源池、主机等信息

cloudstack   kvm部署实践 - 图38

2、选择iso镜像

cloudstack   kvm部署实践 - 图39

3、选择计算方案

先使用默认的即可(1c1g):

cloudstack   kvm部署实践 - 图40

4、选择磁盘方案

这里我们参考阿里云的,来个40G的磁盘。

cloudstack   kvm部署实践 - 图41

5、设置关联性

这里我们直接跳过,关于关联性,将在其他博文中介绍。

cloudstack   kvm部署实践 - 图42

6、设置安全组

先使用默认安全组。

cloudstack   kvm部署实践 - 图43

7、添加秘钥

暂不添加。

cloudstack   kvm部署实践 - 图44

8、启动VM

cloudstack   kvm部署实践 - 图45

9、创建VM失败解决办法

  1. # 点击创建虚机前,实时监控日志
  2. $ tailf /var/log/cloudstack/management/management-server.log

抓取到的日志信息如下:

cloudstack   kvm部署实践 - 图46

按照上面的日志信息提示,就是可用的计算主机上没有足够的内存或CPU来运行虚机了。如果出现此问题,可以先销毁此实例,然后重新创建虚机。但在选择计算方案时,就选择精简配置吧,如下:

10、进入虚机控制台

webvnc是通过cloudstack中的Console Proxy VM虚机访问到我们的虚机的,而我们必须要保证可以和Console Proxy VM虚机中的下面这个IP可以通信:

cloudstack   kvm部署实践 - 图47

我这里vmware中所有虚机都是使用vm8网卡的nat模式,所以我在本地电脑上的vm8网卡配置了两个IP,如下:

cloudstack   kvm部署实践 - 图48

window单块网卡配置两个IP可以参考 win10系统同一网卡使用多个IP地址的设置方法

这样,我们电脑的vm8网卡就和cloudstack中的来宾网络处于同一个广播域了,就可以通过webvnc访问到虚机,如下:

cloudstack   kvm部署实践 - 图49

出现如下页面,则可以和正常一样装系统了:

cloudstack   kvm部署实践 - 图50

11、取消附加ISO

当装完系统后,重启VM,默认还会进入装系统的界面,我们需要进行如下操作,才可以正常使用虚机,如下(需在VM关机状态下执行):

cloudstack   kvm部署实践 - 图51

配置三层交换机——l3switch

至此,你的虚机虽然装好了,但是还无法上外网,我们需要用到文章开头定义的l3switch主机,给虚机充当网关角色,具体配置如下:

  1. # l3switch 节点上执行
  2. # 确保有两块网卡,并且此主机可以上外网
  3. $ ifconfig
  4. ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  5. inet 192.168.20.5 netmask 255.255.255.0 broadcast 192.168.20.255
  6. inet6 fe80::9d11:9782:385:9544 prefixlen 64 scopeid 0x20<link>
  7. ether 00:0c:29:13:7d:b9 txqueuelen 1000 (Ethernet)
  8. RX packets 733 bytes 58319 (56.9 KiB)
  9. RX errors 0 dropped 0 overruns 0 frame 0
  10. TX packets 221 bytes 28469 (27.8 KiB)
  11. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  12. ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  13. ether 00:0c:29:13:7d:c3 txqueuelen 1000 (Ethernet)
  14. RX packets 410 bytes 24600 (24.0 KiB)
  15. RX errors 0 dropped 0 overruns 0 frame 0
  16. TX packets 61 bytes 9926 (9.6 KiB)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  18. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  19. inet 127.0.0.1 netmask 255.0.0.0
  20. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  21. loop txqueuelen 1000 (Local Loopback)
  22. RX packets 32 bytes 2592 (2.5 KiB)
  23. RX errors 0 dropped 0 overruns 0 frame 0
  24. TX packets 32 bytes 2592 (2.5 KiB)
  25. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  26. # 定义ens37网卡IP
  27. $ cat > /etc/sysconfig/network-scripts/ifcfg-ens37 << EOF
  28. TYPE=Ethernet
  29. PROXY_METHOD=none
  30. BROWSER_ONLY=no
  31. BOOTPROTO=static
  32. IPADDR=192.168.30.1
  33. PREFIX=24
  34. DNS1=223.5.5.5
  35. DEFROUTE=yes
  36. IPV4_FAILURE_FATAL=no
  37. NAME=ens37
  38. DEVICE=ens37
  39. ONBOOT=yes
  40. EOF
  41. # 启动ens37
  42. $ ifup ens37
  43. # 确定IP已配置成功
  44. $ ip a show ens37
  45. 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  46. link/ether 00:0c:29:13:7d:c3 brd ff:ff:ff:ff:ff:ff
  47. inet 192.168.30.1/24 brd 192.168.30.255 scope global noprefixroute ens37
  48. valid_lft forever preferred_lft forever
  49. inet6 fe80::20c:29ff:fe13:7dc3/64 scope link
  50. valid_lft forever preferred_lft forever

注:ens37的网卡IP应该是定义的guest网络的网关地址,需要和虚机的网关地址对应,如下:

cloudstack   kvm部署实践 - 图52

开启路由转发功能

  1. # l3switch节点需要开启路由转发功能才能充当网关
  2. $ echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
  3. # 刷新生效
  4. $ sysctl -p
  5. net.ipv4.ip_forward = 1

虚拟机进行ping测试

分别ping网关、公网dns、公网域名,均可ping通,则表示网络配置无误,如下:

cloudstack   kvm部署实践 - 图53

重新初始化cloudstack-managent

如果在部署过程中,cloudstac-management出现解决不了的错误,可以通过如下步骤,重新初始化cloudstack-managent。

  1. # 删库
  2. $ mysql -uroot -p123.com
  3. drop database cloud;
  4. drop database cloud_usage;
  5. # 初始化数据库
  6. $ cloudstack-setup-databases cloud:123.com@192.168.20.2 --deploy-as=root:123.com
  7. # 启动management
  8. $ cloudstack-setup-management

删除zone流程

具体删除zone流程如下:

  • 停止并删除在host下运行的实例(包括系统虚拟机);
  • 删除主存储、二级存储;
  • 删除host;
  • 删除cluster;
  • 删除物理网络;
  • 删除pod;
  • 删除zone;

删除zone、pod、和storage时注意先后顺序,如果顺序错误某处错误,可能会有意料之外的问题。

关闭cloudtack的流程

具体流程如下:

  • 禁用zone;
  • 停止所有正在运行的实例(包括系统VM);
  • 关闭所有host;
  • 关闭所有物理机;