使用Salt在云平台中配置虚拟机。
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
Salt Cloud是用于通过简洁受控的配置文件和配置映射系统在各种公共云上置备虚拟机的管理系统。
- --version
打印正在运行的Salt软件版本。
- --versions-report
显示程序的依赖关系和版本号,然后退出。
- -h, --help
帮助信息。
- -c CONFIG_DIR, --config-dir=CONFIG_dir
Salt配置文件存放目录的位置。 该目录包含Salt master和Minions的配置文件。 大多数系统上的默认位置是/etc/salt。
- -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脚本使用的参数选项。
- -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配置文件。
- --list-locations=LIST_LOCATIONS
显示已配置的云平台providers中可用的位置区域的列表。 传递给云平台期望使用的位置选项值,如"linode",或传递参数值"all"以列出所有已配置云平台中的位置区域信息。
- --list-images=LIST_IMAGES
显示已配置的云平台中可用的镜像列表。 传递给云平台期望使用的镜像,如"linode",或传递"all"以列出所有已配置云平台服务商的镜像资源。
- --list-sizes=LIST_SIZES
显示已配置的云平台中可用配置规格的列表。 传递期望使用的规格给云平台,如"AWS",或传递"all"以列出所有已配置的云平台上可用的云主机配置规格。
-
--set-password=
配置云平台服务商的密码凭据并将其保存到keyring密钥环。 可以在有或没有驱动程序的情况下指定PROVIDER,例如:"--set-password bob rackspace"或更具体的"--set-password bob rackspace:openstack"(已弃用!)
- --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 需要至少配置好一个云平台provider和Profile才可以运行。
使用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
销毁一个使用salt-cloud创建的虚时时:
salt-cloud -d name_of_vm
例如,删除在上面刚报建的虚时:
salt-cloud -d fedora_http_01
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
选项。
除了/etc/salt/cloud.profiles
之外,还可以在与cloud.profiles.d/*.conf
匹配的任何文件中指定配置文件,它是相对于profiles配置文件的子目录(以上述配置文件为例) 。 这样可以执行更可扩展的配置,并且可以与各种配置管理工具以及版本控制系统很好地配合使用。
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
创建虚拟机时,存在许多可用的选项。 可以直接从配置文件和命令行执行中使用它们,或者可以创建更复杂的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文件没有提供任何有用的信息来实现只销毁单个节点,因此不应将此技术用于销毁一个映射文件中节点的子集。
很容易使用映射文件定义并创建出一个新的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。
当使用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"}}}]}'
当创建出虚拟机后,可以对它执行许多管理操作。 在所有云平台服务商中都可以使用"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。
除了不对特定实例执行操作之外,云功能函数与云操作命令的工作方式几乎相同,因此不需要指定计算机名称。 但是,由于它们在特定的云平台服务商上执行操作,因此必须指定该云平台服务商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 。