SaltStack - Salt cloud模块使用完全指南

您也可以参考在Github上维护的这一份技术资料:Using Salt Cloud

salt-cloud Command Line Reference - salt-cloud命令使用说明

使用Salt在云平台中配置虚拟机。

Synopsis - 概要

salt-cloud -m /etc/salt/cloud.map

salt-cloud -m /etc/salt/cloud.map NAME

salt-cloud -m /etc/salt/cloud.map NAME1 NAME2

salt-cloud -p PROFILE NAME

salt-cloud -p PROFILE NAME1 NAME2 NAME3 NAME4 NAME5 NAME6

Description - 描述

Salt Cloud是用于通过简洁受控的配置文件和配置映射系统在各种公共云上置备虚拟机的管理系统。

Options - 配置选项

通用选项

  • –version

打印正在运行的Salt软件版本。

  • –versions-report

显示程序的依赖关系和版本号,然后退出。

  • -h, --help

帮助信息。

  • -c CONFIG_DIR, --config-dir=CONFIG_dir

Salt配置文件存放目录的位置。 该目录包含Salt master和Minions的配置文件。 大多数系统上的默认位置是/etc/salt。

Execution Options - 执行模块选项

  • -L LOCATION, --location=LOCATION

指定要连接到的区域。

  • -a ACTION, --action=ACTION

执行特定于此云服务商的平台管理操作。 此参数需要指定一个或多个实例的名称。

  • -f , --function=

执行那些针对特定的云服务商软件的管理功能,这些功能函数一般不适用于管理虚机实例。 此参数要求指定一个provider提供者(例如 nova)。

  • -p PROFILE, --profile=PROFILE

选择一个配置文件以从中构建指定的云主机VMs。 必须在参数指定的配置文件中定义VMs的配置文件。

  • -m MAP, --map=MAP

指定要使用的map映射文件。 如果不带任何其他选项,则此选项将创建所有映射的VMs。 如果命名的VM已经存在,则将被跳过。

  • -H, --hard

指定映射文件时,默认行为是确保创建映射文件中指定的所有VMs。 如果设置了–hard选项,则将销毁在映射文件中未指定的已配置云平台上存在的所有VMs。 请注意,这可能是破坏性的操作,应谨慎使用。

  • -d, --destroy

传递虚拟机的名称以进行销毁,salt-cloud将在配置的云平台中搜索指定的名称并销毁虚拟机。 请注意,这是破坏性操作,应谨慎使用。 可以与-m选项一起使用,以指定要删除的VM的映射。

  • -P, --parallel

通常在构建许多云主机实例时,它们是按顺序依次执行的。 -P 选项则会为每个云虚拟机的构建创建一个独立的工作进程,从而允许一次构建出大量的云主机。

请注意,某些云平台服务商的系统似乎不太适合这种大量的虚拟机创建。 创建一大组VMs时,请先仔细了解云平台服务商的功能支持情况。

  • -u, --update-bootstrap

更新salt-bootstrap为最新的稳定发行版。

  • -y, --assume-yes

在所有的需要确认的问题中,都提供一个yes的默认回复。

  • -k, --keep-tmp

在执行deploy.sh脚本完成后,不要清除/tmp下的临时数据。

  • –show-deploy-args

在返回的数据中包含部署minions使用的选项。

  • –script-args=SCRIPT_ARGS

在部署VM实例时,传递给bootstrap脚本使用的参数选项。

Query Options - 查询选项

  • -Q, --query

执行查询并返回有关在已配置的云平台上运行的节点的一些信息。

  • -F, --full-query

执行查询并打印出有关所有云主机的所有可用信息。 可以与 -m 一起使用,仅显示有关指定映射的信息。

  • -S, --select-query

执行查询并打印出有关所有云主机的选定信息。 可以与 -m 一起使用,以仅显示有关指定映射的信息。

  • –list-providers

显示已加入配置的云平台的列表。

  • –list-profiles

New in version 2014.7.0.

显示已配置的profiles配置文件列表。 传入云平台provider参数则可以查看与其相关的profiles配置文件,例如digitalocean,或传入 all 以列出所有已配置的profiles配置文件。

Cloud Providers Listings - 云平台列表选项

  • –list-locations=LIST_LOCATIONS

显示已配置的云平台providers中可用的位置区域的列表。 传递给云平台期望使用的位置选项值,如"linode",或传递参数值"all"以列出所有已配置云平台中的位置区域信息。

  • –list-images=LIST_IMAGES

显示已配置的云平台中可用的镜像列表。 传递给云平台期望使用的镜像,如"linode",或传递"all"以列出所有已配置云平台服务商的镜像资源。

  • –list-sizes=LIST_SIZES

显示已配置的云平台中可用配置规格的列表。 传递期望使用的规格给云平台,如"AWS",或传递"all"以列出所有已配置的云平台上可用的云主机配置规格。

Cloud Credentials - 云平台身份凭据配置参数

  • –set-password=

    配置云平台服务商的密码凭据并将其保存到keyring密钥环。 可以在有或没有驱动程序的情况下指定PROVIDER,例如:"–set-password bob rackspace"或更具体的"–set-password bob rackspace:openstack"(已弃用!)

Output Options - 输出信息的配置选项

  • –out

传入一个替代的outputter,用于输出展示返回的数据。 该outputter可以是以下任何可用的outputters之一:

highstate, json, key, overstatestage, pprint, raw, txt, yaml,以及很多其它可选用的。

某些outputters仅针对从特定功能返回的数据进行格式化。 如果使用的outputters不支持处理传递给它的数据,则Salt将退回到使用pprint outputter,并使用Python pprint标准库模块显示返回数据。

注意:如果使用--out=json,则可能还需要同时使用--static。 如果没有static选项,则每个minion都会输出一个单独的JSON字符串,这会使JSON输出整体上无效。 这是由于在整体上的输出器使用产生失迭代所致。 因此,如果要将其发送到JSON解析器时,也请使用--static

  • –out-indent OUTPUT_INDENT, –output-indent OUTPUT_INDENT

在输出中打印以空格提供的缩进。 负值表示禁用缩进。 仅适用于支持缩进的outputters输出程序。

  • –out-file=OUTPUT_FILE, –output-file=OUTPUT_FILE

输出到外部文件。

  • –out-file-append, –output-file-append

将输出信息追加到外部文件。

  • –no-color

禁止使用彩色显示输出信息。

  • –force-color

强制使用彩色渲染输出的信息。

注意:使用彩色输出时,颜色代码如下:

green表示成功,red表示失败,blue表示更改和成功,yellow表示预期的将来配置更改。

  • –state-output=STATE_OUTPUT, –state_output=STATE_OUTPUT

覆盖配置的minion输出设置中的state_output值。 取值为’full’, ‘terse’, ‘mixed’, ‘changes’ 或 'filter’之一。 默认值:‘none’。

  • –state-verbose=STATE_VERBOSE, –state_verbose=STATE_VERBOSE

覆盖为minion输出配置的state_verbose值。 设置为True或False。 默认值:none。

使用示例

使用指定的profiles配置文件创建出名为 web1, web2, db1, 和 db2的四个虚机 :

salt-cloud -p fedora_rackspace web1 web2 db1 db2

读取映射文件并创建其中指定的所有VMs:

salt-cloud -m /path/to/cloud.map

读取映射文件且并行创建其中指定的所有VMs,执行以下操作:

salt-cloud -m /path/to/cloud.map -P

删除映射文件中指定的所有VMs:

salt-cloud -m /path/to/cloud.map -d

删除那些在映射文件中没有指定的VMs:

salt-cloud -m /path/to/cloud.map -H

显示在映射文件中指定的所有VMs的状态:

salt-cloud -m /path/to/cloud.map -Q

See also: salt-cloud(7) salt(7) salt-master(1) salt-minion(1)

Salt Cloud basic usage - Salt Cloud的基本用法

Salt Cloud 需要至少配置好一个云平台providerProfile才可以运行。

Creating a VM - 创建一个虚机

使用salt cloud创建一个虚机, 使用命令:

salt-cloud -p <profile> name_of_vm

假定有一个配置好的profile文件,像下面这样:

fedora_rackspace:
    provider: my-rackspace-config
    image: Fedora 17
    size: 256 server
    script: bootstrap-salt

然后, 使用命令创建一个名为 fedora_http_01 的虚机:

salt-cloud -p fedora_rackspace fedora_http_01

Destroying a VM - 销毁一个虚机

销毁一个使用salt-cloud创建的虚时时:

salt-cloud -d name_of_vm

例如,删除在上面刚报建的虚时:

salt-cloud -d fedora_http_01

VM Profiles - 定义虚机的配置文件

Salt cloud在profile配置文件中配置虚拟机。 profile配置文件默认为/etc/salt/cloud.profiles,并且是yaml配置形式。 声明配置文件的语法很简单:

fedora_rackspace:
    provider: my-rackspace-config
    image: Fedora 17
    size: 256 server
    script: bootstrap-salt

应该注意的是,script选项默认为bootstrap-salt,通常不需要指定。 本文档中的其他示例将不会显示script选项。

需要声明一些关键key信息,并且这些信息可以根据云服务商程序进行更改。 也可以插入许多其他参数:

centos_rackspace:
  provider: my-rackspace-config
  image: CentOS 6.2
  size: 1024 server
  minion:
    master: salt.example.com
    append_domain: webs.example.com
    grains:
      role: webserver

image参数值需要从可用的镜像列表中选择。同样地, 虚机配置规格也必须从给定的规格列表中选取。 使用下面命令获取一份可用的虚机镜像列表和配置规格列表:

salt-cloud --list-images openstack
salt-cloud --list-sizes openstack

可以在Salt Cloud的主配置文件中指定一些参数,然后将其应用于所有的云主机profiles配置文件。 例如,如果仅使用单个的云服务提供商,则可以在Salt cloud配置文件中声明provider选项。

Multiple Configuration Files

除了/etc/salt/cloud.profiles之外,还可以在与cloud.profiles.d/*.conf匹配的任何文件中指定配置文件,它是相对于profiles配置文件的子目录(以上述配置文件为例) 。 这样可以执行更可扩展的配置,并且可以与各种配置管理工具以及版本控制系统很好地配合使用。

Larger Example

rhel_ec2:
  provider: my-ec2-config
  image: ami-e565ba8c
  size: t1.micro
  minion:
    cheese: edam

ubuntu_ec2:
  provider: my-ec2-config
  image: ami-7e2da54e
  size: t1.micro
  minion:
    cheese: edam

ubuntu_rackspace:
  provider: my-rackspace-config
  image: Ubuntu 12.04 LTS
  size: 256 server
  minion:
    cheese: edam

fedora_rackspace:
  provider: my-rackspace-config
  image: Fedora 17
  size: 256 server
  minion:
    cheese: edam

cent_linode:
  provider: my-linode-config
  image: CentOS 6.2 64bit
  size: Linode 512

cent_gogrid:
  provider: my-gogrid-config
  image: 12834
  size: 512MB

cent_joyent:
  provider: my-joyent-config
  image: centos-7
  size: g4-highram-16G

Cloud Map File - 云管理的映射文件

创建虚拟机时,存在许多可用的选项。 可以直接从配置文件和命令行执行中使用它们,或者可以创建更复杂的map file映射文件。映射文件允许创建多个虚拟机,并与特定的配置文件相关联。映射文件被设计为仅运行一次,以使用salt-cloud创建出更为复杂的云主机使用场景。

映射文件具有一个简单的内容格式,需要先指定一个profile配置文件,然后从该配置文件中创建一个虚拟机列表:

fedora_small:
  - web1
  - web2
  - web3
fedora_high:
  - redis1
  - redis2
  - redis3
cent_high:
  - riak1
  - riak2
  - riak3

可以调用该映射文件以部署所有这些虚拟机。 使用-m选项从salt-cloud命令调用map文件:

$ salt-cloud -m /path/to/mapfile

同样地,像直接使用profile配置文件创建虚机一样,可以为映射文件传递-P选项来并行创建虚拟机:

$ salt-cloud -m /path/to/mapfile -P

注意:由于GoGrid API中的限制,无法使用GoGrid驱动程序并行配置虚机实例。 Map文件可与GoGrid一起使用,但不支持使用-P参数来并行创建GoGrid实。

也可以使用--hard选项强制执行映射文件以管控云平台资源的整体状态。 当使用hard选项时,任何实际存在但却未在映射文件中定义的vms都将被销毁:

$ salt-cloud -m /path/to/mapfile -P -H

请谨慎处理此参数,这非常危险! 实际上,它是如此危险,以至于要使用它,必须在master的配置文件中显式启用它。

enable_hard_maps: True

在映射文件中可以使用grains参数以及minion的配置选项:

fedora_small:
  - web1:
      minion:
        log_level: debug
      grains:
        cheese: tasty
        omelet: du fromage
  - web2:
      minion:
        log_level: warn
      grains:
        cheese: more tasty
        omelet: with peppers

在映射文件中指定的数据项,将会覆盖掉原profile配置文件中同名的数据项:

fedora_small:
  - web1:
      size: t2.micro
  - web2:
      size: t2.nano

从Salt 2017.7.0开始,嵌套元素将被合并,并且可以单独指定嵌套中的元素,而不必为每个top level数据元素重复完整的定义。 在此示例中,在继承磁盘和网络配置的设备参数时,为每个VMware实例分配了单独的MAC:

nyc-vm:
  - db1:
      devices:
        network:
          Network Adapter 1:
            mac: '44:44:44:44:44:41'
  - db2:
      devices:
        network:
          Network Adapter 1:
            mac: '44:44:44:44:44:42'

映射文件还可以使用在各类查询操作中:

$ salt-cloud -m /path/to/mapfile -Q
{'ec2': {'web1': {'id': 'i-e6aqfegb',
                     'image': None,
                     'private_ips': [],
                     'public_ips': [],
                     'size': None,
                     'state': 0}},
         'web2': {'Absent'}}

或者,和删除选项一起使用:

$ salt-cloud -m /path/to/mapfile -d

The following virtual machines are set to be destroyed:
  web1
  web2

Proceed? [N/y]

Warning:在命令行上使用map file指定节点时,不支持具体指定到一个或多个节点的名称。 当联合使用map file和--destroy参数时,记住这一点尤其重要; salt-cloud将忽略任何与映射文件不直接相关的参数。 当在同时使用map file和–destroy时,映射文件中的每个节点都将被删除! Maps文件没有提供任何有用的信息来实现只销毁单个节点,因此不应将此技术用于销毁一个映射文件中节点的子集。

Setting up New Salt Masters - 配置新的Salt Masters

很容易使用映射文件定义并创建出一个新的Salt master :

fedora_small:
  - web1:
      make_master: True
  - web2
  - web3

注意,在上面这样的映射文件中引导启动的所有的minions都会直接受管理于一同新创建的Salt-master。

使任何一个被引导创建的minion都接受引导启动的新salt-master管控,而该新创建的salt-master却是接受local master的管理时,则需要像下面这样:

fedora_small:
  - web1:
      make_master: True
      minion:
        master: <the local master ip address>
        local_master: True
  - web2
  - web3

上面的映射文件的意思是,受新创建的salt-master管理的minions,也同样地,是在local master的管理之下。

再看一个例子:

fedora_small:
  - web1:
      make_master: True
  - web2
  - web3:
      minion:
        master: <the local master ip address>
        local_master: True

在上面的这个例子中,web3这个minion节点被设置为受local master的管理,而不响应新引导启动的master。

Using Direct Map Data - 直接使用映射文件的内容数据

当使用Salt模块直接调用CloudClient(特别是云执行和runner运行模块)时,可以传入映射文件的内容,而不是映射文件位置的路径。

通常,在使用这些模块时,使用以下方式传递映射文件的路径:

salt-run cloud.map_run /path/to/cloud.map

使用 map_data 参数可以直接传递映射文件的内容:

salt-run cloud.map_run map_data='{"centos7": [{"saltmaster": {"minion": \
    {"transport": "tcp"}, "make_master": true, "master": {"transport": \
    "tcp"}}}, {"minion001": {"minion": {"transport": "tcp"}}}]}'

Cloud Actions - 云管理的操作命令

当创建出虚拟机后,可以对它执行许多管理操作。 在所有云平台服务商中都可以使用"reboot"操作,但是所有其他的操作都是特定于某些云平台的。 为了执行这些操作,您可以在命令行中指定它,提供需要执行操作命令的VMs的名称:

$ salt-cloud -a reboot vm_name
$ salt-cloud -a reboot vm1 vm2 vm2

或者是,你可以使用一个映射文件把所有需要执行管理操作命令的虚机都包含在里面:

$ salt-cloud -a reboot -m /path/to/mapfile

下面是 salt-cloud 支持使用的一个操作命令列表:

all providers:
    - reboot
ec2:
    - start
    - stop
joyent:
    - stop
linode:
    - start
    - stop

查看更多salt-cloud行为的另一个有用参考是 Salt Cloud Feature Matrix

Cloud Functions - 云管理的功能函数

除了不对特定实例执行操作之外,云功能函数与云操作命令的工作方式几乎相同,因此不需要指定计算机名称。 但是,由于它们在特定的云平台服务商上执行操作,因此必须指定该云平台服务商provider。

$ salt-cloud -f show_image ec2 image=ami-fd20ad94

共有三种通用的salt-cloud 函数,这些功能函数对于收集基于云平台服务商有关实例的基础信息非常有用:

  • list_nodes:返回有关给定provider的实例的一些常规信息。
  • list_nodes_full:返回有关给定provider的实例的所有信息。
  • list_nodes_select:返回有关给定provider的实例的选定信息。
$ salt-cloud -f list_nodes linode
$ salt-cloud -f list_nodes_full linode
$ salt-cloud -f list_nodes_select linode

另一个对于理解salt-cloud比较有帮助的参考资料是 Salt Cloud Feature Matrix

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章