SALT AS A CLOUD CONTROLLER - 将Salt用作云平台控制器

SALT AS A CLOUD CONTROLLER

在Salt 0.14.0中,引入了先进的云控制系统,允许使用Salt直接管理私有云虚拟机。该系统通常称为Salt Virt

Salt Virt系统已经存在并集成安装在Salt系统内,这意味着除了设置Salt之外,不需要部署额外的代码。

注意: 使用salt virt功能,需要预先安装好libvirt python模块和certtool二进制文件。

Salt Virt的主要设计目标是促进交付一个非常快速和简单的云设施。云可以扩展,且功能齐全。 Salt Virt能够设置和管理复杂的虚拟机网络,有强大的映像和磁盘管理功能,以及使用和不使用共享存储的虚拟机迁移支持。

这意味着Salt Virt可用于从刀片中心和SAN创建云,但也可以在没有单个共享存储系统的情况下从一大堆Linux桌面创建云。 Salt Virt既可以从真正的商用硬件创建云,也可以支持专用硬件的强大功能。

SETTING UP HYPERVISORS

配置虚拟机管理程序的第一步包括安装正确的软件并设置虚拟机管理程序的网络接口。

INSTALLING HYPERVISOR SOFTWARE

Salt Virt虽然是设计为与虚拟化管理程序无关的,但目前唯一完全实现的管理程序是通过libvirt管理的KVM。

虚拟化管理程序所需的软件是libvirt和kvm。 对于高级功能,请安装libguestfs或qemu-nbd。

注意:Libguestfs和qemu-nbd允许在启动虚机系统之前挂载虚拟机映像,并执行一些预配置管理和配置一个salt minion。

下面这个sls将为虚拟机管理程序设置所需的软件,并设置libvirt pki密钥。

注意:使用的软件包名称和设置是特定于Red Hat平台的,不同平台将需要不同的软件包名称。

libvirt:
  pkg.installed: []
  file.managed:
    - name: /etc/sysconfig/libvirtd
    - contents: 'LIBVIRTD_ARGS="--listen"'
    - require:
      - pkg: libvirt
  virt.keys:
    - require:
      - pkg: libvirt
  service.running:
    - name: libvirtd
    - require:
      - pkg: libvirt
      - network: br0
      - libvirt: libvirt
    - watch:
      - file: libvirt

libvirt-python:
  pkg.installed: []

libguestfs:
  pkg.installed:
    - pkgs:
      - libguestfs
      - libguestfs-tools

HYPERVISOR NETWORK SETUP

虚拟机管理程序需要运行网桥来为虚拟机提供网络设备,下面这个公式将在虚拟机管理程序上建立一个标准网桥,然后将网桥连接到eth0:

eth0:
  network.managed:
    - enabled: True
    - type: eth
    - bridge: br0

br0:
  network.managed:
    - enabled: True
    - type: bridge
    - proto: dhcp
    - require:
      - network: eth0

VIRTUAL MACHINE NETWORK SETUP

Salt Virt附带了一个系统来对要部署的虚拟机使用的网络接口进行建模; 默认情况下,为已部署的虚拟机创建单个接口,并将其桥接到br0。 要使用默认网络设置,请确保虚拟机管理程序上存在名为br0的网桥接口,并桥接到活动网络设备。

注意:要在Salt Virt中使用更高级的网络配置,请阅读Salt Virt Networking文档。

LIBVIRT STATE

部署基于libvirt的云的挑战之一是libvirt证书的分发。 这些证书允许虚拟机迁移。 Salt附带了一个用于自动部署这些证书的系统。 Salt管理签名授权密钥,并为master服务器上的libvirt客户端生成密钥,使用证书颁发机构对其进行签名,并使用pillar分发它们。 这是通过libvirt状态管理的。 只需在minion上执行此公式,以确保证书到位并且是最新的:

注意:上面的公式中就包括设置libvirt密钥所需的调用。

libvirt_keys:
  virt.keys

GETTING VIRTUAL MACHINE IMAGES READY

Salt Virt,要求提供虚拟机映像,因为这些映像不是即时生成的。 根据底层平台生成的这些虚拟机映像有很大不同。

可以使用KVM手动创建虚拟机映像并通过安装程序运行,但不建议使用这个办法,因为它太依赖于手动并且容易出错。

虚拟机生成应用程序可用于许多平台:

kiwi: (openSUSE, SLES, RHEL, CentOS)

https://suse.github.io/kiwi/

vm-builder:

https://wiki.debian.org/VMBuilder

参见:vmbuilder-formula

一旦虚拟机映像可用,将它们提供给Salt Virt的最简单方法是将它们放在Salt文件服务器中。 只需将镜像复制到/srv/salt中,它就可以被Salt Virt使用了。

出于演示的目的,我们将使用一个文件名为centos.img镜像。

EXISTING VIRTUAL MACHINE IMAGES

许多现有的Linux发行版提供了可与Salt Virt一起使用的虚拟机映像。 请注意,这些镜像均不受SALTSTACK的直接支持。

CENTOS

这些镜像是为OpenNebula准备的,但和Salt Virt一起使用时也不存在问题,只需要原始的qcow镜像文件: http://wiki.centos.org/Cloud/OpenNebula

FEDORA LINUX

可以在这里找到Fedora Linux的镜像: https://alt.fedoraproject.org/cloud

OPENSUSE

http://download.opensuse.org/repositories/openSUSE:/Leap:/42.1:/Images/images

(look for JeOS-for-kvm-and-xen variant)

SUSE

https://www.suse.com/products/server/jeos

UBUNTU LINUX

Images for Ubuntu Linux can be found here: http://cloud-images.ubuntu.com/

USING SALT VIRT

通过设置虚拟机管理程序并准备好虚拟机映像,Salt可以使用virt runner开始发布云管理命令。

首先运行Salt Virt hypervisor info命令:

salt-run virt.host_info

这将查询正在运行的虚拟机管理程序的统计信息并显示有用的信息,例如cpu的数量和内存量。

还可以在所有管理程序节点上列出所有VM及其当前状态:

salt-run virt.list

现在虚拟机管理程序可用,并且可以配置虚拟机。 virt.init用于创建一个新的虚拟机:

salt-run virt.init centos1 2 512 salt://centos.img

Salt Virt runner现在将自动选择虚拟机管理程序以部署新虚拟机。使用salt://假定CentOS虚拟机映像已经位于master服务器上Salt文件服务器的根目录中。当克隆镜像时(即从文件服务器下载到本地),虚拟化管理程序minion上的目标目录由virt:images配置选项确定;默认情况下,这位于/srv/salt-images/

当使用virt.init初始化VM时,使用cp.cache_file将映像复制到管理程序,并将使用minion进行挂载和初始配置,这包括在新机器上设置预先验证的密钥。只有当在使用seed.apply的默认参数在镜像上找不到一个minion时才会安装minion。

注意:启动VM的最大瓶颈就是发生在需要安装Salt Minion时。确保源VM映像已安装Salt将极大地加速虚拟机部署。

你还可以通过使用绝对镜像路径直接调用virt执行模块来在特定的minion上部署映像。这对于测试来说非常方便:

salt 'hypervisor*' virt.init centos1 2 512 image=/var/lib/libvirt/images/centos.img

现在已经准备好了新的VM,可以通过virt.query命令看到它:

salt-run virt.query

此命令将返回有关所有虚拟机监控程序和相应虚拟机的数据。

既然新VM已经启动,它应该联系Salt Master,执行一个test.version命令可以显示新VM是否正在运行。

QEMU COPY ON WRITE SUPPORT

对于快速镜像克隆,你可以使用qcow磁盘映像格式。 将enable_qcow标志和.qcow2映像路径传递给virt.init:

salt 'hypervisor*' virt.init centos1 2 512 image=/var/lib/libvirt/images/centos.qcow2 enable_qcow=True start=False

请注意,在克隆之后尝试过快地启动qcow镜像时会导致竞争,其中libvirt可能会尝试在镜像复制完成之前启动虚机。 因此,建议将start=False传递给virt.init

另外需要知道的是,如果不是先复制一份副本然后将基于这个副本保存你所有的变更,则不得修改原始的基础镜像。 请参阅qemu-img rebase用法文档。

MIGRATING VIRTUAL MACHINES

Salt Virt完全支持虚拟机迁移的操作,在上面的公式中使用libvirt状态可以实现迁移。

需要准备一些东西来支持迁移操作。 许多操作系统在最初设置时打开了防火墙,需要打开防火墙指定端口以允许libvirt和kvm交叉通信和执行迁移任务。 在基于Red Hat的虚拟机管理程序上,需要在虚拟机管理程序上打开16514端口:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 16514 -j ACCEPT

注意:关于更详细的各Linux发布版本上设置Salt防火墙通信规则的方法,请参见Opening the Firewall up for Salt

Salt还需要打开virt:tunnel选项。 此标志告诉Salt通过libvirt TLS隧道安全地运行迁移任务并使用端口16514。没有使用virt:tunnel时,libvirt会在运行迁移任务时尝试绑定到一个随机端口。

要打开virt:tunnel,只需将其应用于master配置文件中:

virt:
    tunnel: True

更新master配置后,重新启动master服务器并发送一个对minions的调用以刷新pillar获取更改:

salt \* saltutil.refresh_modules

现在,可以运行迁移任务了! 要迁移VM,只需运行Salt Virt迁移命令:

salt-run virt.migrate centos <new hypervisor>

VNC CONSOLES

虽然默认情况下未启用,但Salt Virt还可以设置VNC控制台,以便打开远程可视控制台。 使用virt.init创建新VM时,请传递enable_vnc=True参数,以便为新VM配置vnc控制台。

一个virt.query查询中的信息将会显示出特定vms的vnc控制台端口:

centos
  CPU: 2
  Memory: 524288
  State: running
  Graphics: vnc - hyper6:5900
  Disk - vda:
    Size: 2.0G
    File: /srv/salt-images/ubuntu2/system.qcow2
    File Format: qcow2
  Nic - ac:de:48:98:08:77:
    Source: br0
    Type: bridge

Graphics:vnc - hyper6:5900是我们要找的信息。 首先,名为5900的端口需要在虚拟机管理程序的防火墙中是可访问的。 端口打开后,就可以通过vncviewer客户端工具轻松打开虚机的控制台了:

vncviewer hyper6:5900

默认情况下,这些端口上没有设置VNC安全性,建议保持防火墙运行并强制使用SSH隧道来访问这些VNC接口。 请记住,访问VNC接口的活动可以被访问同一VNC接口的任何其他用户查看,登录的任何其他用户也可以与虚拟机上的登录用户一起执行操作命令。

CONCLUSION - 结束

现在,有了Salt Virt的支持,只需在新的裸机上运行上述状态即可无缝添加新的虚拟机管理程序,这些机器将立即可供Salt Virt管理和使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值