Salt Cloud现在是Salt基础软件中的一部分。它被合并作为Salt version 2014.1.0。
在Ubuntu上,使用以下命令安装Salt Cloud:
sudo add-apt-repository ppa:saltstack/salt
sudo apt-get update
sudo apt-get install salt-cloud
如果在macOS上使用Salt Cloud,则必须安装curl-ca-bundle
。 当前,此软件包无法通过brew
获得,但可以通过MacPorts使用:
sudo port install curl-ca-bundle
Salt Cloud依赖于apache-libcloud
。 Libcloud可以通过pip install apache-libcloud
安装。
当完成了Salt的开发环境安装工作后,同时也就启用了对Salt Cloud功能的开发支持,只要确保按上面的段落安装了apache-libcloud
。
请参考这份Salt开发环境的安装指导材料: Installing Salt for development。
可以在Salt Cloud配置文件中设置许多核心配置选项和一些对虚拟机配置生效的全局选项。 默认情况下,此文件位于/etc/salt/cloud
。
当salt cloud通过-P
参数以并行模式运行时,您可以通过使用正整数值指定pool_size
参数来控制线程池大小。
默认情况下,线程池大小将设置为salt cloud管理的VMs数量。
pool_size: 10
在此文件中设置了默认的minion配置。 Salt-cloud创建的minions从此文件获取其配置。 此处可以使用在Configuring the Salt Minion中找到的几乎所有参数。
minion:
master: saltmaster.example.com
特别是,如果端口未设置为默认端口时,则此位置将指定salt master及其监听端口的位置。
与大多数其他设置类似,Minion配置设置在配置文件之间继承。 例如,如上所述,master的设置可能包含在主要的 cloud
配置文件中,但是其他设置可以放置在provider, profile或map映射配置文件中:
ec2-web:
size: t1.micro
minion:
environment: test
startup_states: sls
sls_list:
- web
Salt cloud创建新的Minon时,它可以将grain信息自动添加到Minion配置文件中,以标识最初用于定义它的来源。
生成的grain信息将类似于以下内容:
grains:
salt-cloud:
driver: ec2
provider: my_ec2:ec2
profile: ec2-web
可以通过cloud配置文件中的enable_cloud_grains:'False'
选项来禁用salt-cloud grain的生成。
与云平台交互的特定数据在此处设置。
云平台服务商provider的配置设置可以存在于多个地方。 第一个是在/etc/salt/cloud
中:
# /etc/salt/cloud
providers:
my-aws-migrated-config:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
云平台服务商provider的配置数据也可以位于/etc/salt/cloud.providers
或任何与/etc/salt/cloud.providers.d/*.conf
匹配的文件中。 这些位置中的任何位置的所有文件都将被解析为云服务商provider的数据。
继续使用上面的示例配置:
# /etc/salt/cloud.providers
# or could be /etc/salt/cloud.providers.d/*.conf
my-aws-config:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
注意:
/etc/salt/cloud.provider.d/
中的Salt Cloud provider配置不应指定providers
的启动密钥。
同一别名块中也可以有多个云配置块。 例如:
production-config:
- id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
- user: example_user
apikey: 123984bjjas87034
driver: rackspace
但是,使用此配置方法需要更改profile文件配置块。 云平台服务商provider的别名需要附加provider的key/value设置,如以下示例所示:
rhel_aws_dev:
provider: production-config:ec2
image: ami-e565ba8c
size: t1.micro
rhel_aws_prod:
provider: production-config:ec2
image: ami-e565ba8c
size: High-CPU Extra Large Instance
database_prod:
provider: production-config:rackspace
image: Ubuntu 12.04 LTS
size: 256 server
请注意,由于存在多个条目,因此必须在上面的示例production-config:ec2
中明确说明provider的别名和名称。
此数据与salt-cloud
二进制文件的--list-location
,--list-images
和--list-sizes
交互,需要使用云平台provider作为参数。 使用的参数应为配置的云平台服务商的别名。 如果云平台服务商的别名具有多个条目,则应使用<provider-alias>:<provider-name>
。
为了提供更加可扩展的配置,将--providers-config
(默认为/etc/salt/cloud.providers
)添加到了cli解析器中。 它允许按文件添加provider的配置。
可以使用pillar配置云平台providers。 该功能仅在云模块内部时使用。 您可以设置一个名为cloud
的变量,其中包含您的profile配置文件、provider程序和map映射文件,以将该信息传递到云服务器,而不必将完整配置复制到每个minion。 在您的pillar文件中,您将需要使用以下内容:
cloud:
ssh_key_name: saltstack
ssh_key_file: /root/.ssh/id_rsa
update_cachedir: True
diff_cache_events: True
providers:
my-openstack:
driver: openstack
region_name: ORD
cloud: mycloud
profiles:
ubuntu-openstack:
provider: my-openstack
size: ds512M
image: CentOS 7
script_args: git develop
maps:
my-dev-map:
ubuntu-openstack:
- dev-test01
- dev-test02
- dev-test03
- dev-test04
my-prd-map:
ubuntu-openstack:
- prd-web01
- prd-web02
minion:
id: custom-minion-id-app1-stack1-frontend
grains:
roles:
- webserver
deployment: datacenter4-openstack
- prod-db01
- prod-db02
要将Salt Cloud与Scaleway一起使用,您需要获取访问密钥和API令牌。 API令牌是与您的Scaleway帐户关联的唯一标识符。 要检索访问密钥和API令牌,请登录Scaleway控制面板,打开帐户名上的下拉菜单,然后单击“我的凭据”链接。
如果您没有API令牌,则可以通过单击右上角的“创建新令牌”按钮来创建一个。
my-scaleway-config:
access_key: 15cf404d-4560-41b1-9a0c-21c3d5c4ff1f
token: a7347ec8-5de1-4024-a5e3-24b77d1ba91d
driver: scaleway
注意:在使用此提provider配置的云配置文件中,provider必填字段的语法为
provider: my-scaleway-config
。
Rackspace 云平台需要两个配置参数, user
和 apikey
:
my-rackspace-config:
user: example_user
apikey: 123984bjjas87034
driver: rackspace
注意:在使用此provider程序配置的云配置文件中,provider必填字段的语法为
provider: my-rackspace-config
。
配置使用Amazon AWS云服务时,有一组配置参数需要设置 id
, key
, keyname
, securitygroup
和 private_key
:
my-aws-quick-start:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
my-aws-default:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: default
private_key: /root/test.pem
driver: ec2
注意:在使用此provider配置的cloud配置文件中,provider必填字段的语法将为
provider: my-aws-quick-start
或provider: my-aws-default
。
Linode 云服务只需要配置一个 API key,但是也需要同时提供默认的root用户密码信息:
my-linode-config:
apikey: asldkgfakl;sdfjsjaslfjaklsdjf;askldjfaaklsjdfhasldsadfghdkf
password: F00barbaz
ssh_pubkey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKHEOLLbeXgaqRQT9NBAopVz366SdYc0KKX33vAnq+2R user@host
ssh_key_file: ~/.ssh/id_ed25519
driver: linode
密码字符串需要至少8个字符,且包含有大小写字母和数字。
注意:在cloud profile配置文件中使用该provider服务时,配置项的设置语法是
provider: my-linode-config
Joyent 云服务需要使用三个配置参数: username
和 password
用于登录Joyent system, 以及该Joyent账号所使用的 SSH 私钥文件。
my-joyent-config:
user: fred
password: saltybacon
private_key: /root/joyent.pem
driver: joyent
注意:在cloud profile配置使用该provider时, 配置参数的使用语法是
provider: my-joyent-config
当需要使用Salt Cloud 管理 GoGrid 云服务时, 请先登录 GoGrid web 管理平台并创建一个 API key。点击 "My Account" 并切换进入 API Keys 标签页。
apikey
和 sharedsecret
参数需要被设置,以启用对 GoGrid 云服务管理接口的支持:
my-gogrid-config:
apikey: asdff7896asdh789
sharedsecret: saltybacon
driver: gogrid
注意:在cloud profile配置使用该provider时, 配置参数的使用语法是
provider: my-gogrid-config
将Salt用于管理OpenStack时请使用由openstack-infra团队管理的shade https://docs.openstack.org/shade/latest/驱动程序。
可以使用/etc/openstack/clouds.yml
文件和os-client-config https://docs.openstack.org/os-client-config/latest/配置该驱动程序。
myopenstack:
driver: openstack
region_name: RegionOne
cloud: mycloud
或者是,也可以直接把认证信息配置在 cloud provider 配置中:
myopenstack:
driver: openstack
region_name: RegionOne
auth:
username: 'demo'
password: secret
project_name: 'demo'
auth_url: 'http://openstack/identity'
这两种方法都支持使用供应商https://docs.openstack.org/os-client-config/latest/user/vendor-support.html配置选项。
有关更多信息,请参阅Openstack Cloud Driver Docs。
使用 Salt 管理 DigitalOcean 云服务需要使用一个 client_key
和一个 api_key
参数。 在DigitalOcean的web网站的 "My Settings" 部分, 在API Access 标签页中有详情说明。
my-digitalocean-config:
driver: digitalocean
personal_access_token: xxx
location: New York 1
注意:在cloud profile配置使用该provider时, 配置参数的使用语法是
provider: my-digital-ocean-config
使用 Salt 管理 Parallels 云服务需要使用 user
, password
和 URL
参数。 这些可以从你的云服务商处获得。
my-parallels-config:
user: myuser
password: xyzzy
url: https://api.cloud.xmission.com:4465/paci/v1.0/
driver: parallels
注意:在cloud profile配置使用该provider时, 配置参数的使用语法是
provider: my-parallels-config
使用 Salt 管理 Proxmox 云服务需要使用 user
, password
, 和 URL
配置参数。 这些可以从你的云主机上获取。 PAM 或 PVE 用户都可以使用。
my-proxmox-config:
driver: proxmox
user: saltcloud@pve
password: xyzzy
url: your.proxmox.host
注意:在cloud profile配置使用该provider时, 配置参数的使用语法是
provider: my-proxmox-config
lxc驱动程序使用saltify安装salt,并通过attach操作将lxc容器作为新的lxc minion。 我们将尽快通过SSH管理裸机操作。 您也可以通过此驱动程序销毁那些容器。
devhost10-lxc:
target: devhost10
driver: lxc
以及在 map file 映射文件中:
devhost10-lxc:
provider: devhost10-lxc
from_container: ubuntu
backing: lvm
sudo: True
size: 3g
ip: 10.0.3.9
minion:
master: 10.5.0.1
master_port: 4506
lxc_conf:
- lxc.utsname: superlxc
注意:在cloud profile配置使用该provider时, 配置参数的使用语法是
provider: devhost10-lxc
Saltify驱动程序是一种新的实验性驱动程序,旨在使用SSH将Salt安装在虚拟或裸机的远程计算机上。 该驱动程序对于配置已安装系统但未部署Salt的机器非常有用。 有关使用此驱动程序的更多信息以及配置示例,请参阅《Saltify入门指南》文档。
Vagrant驱动程序是一个新的实验性驱动程序,用于控制VagrantBox虚拟机并在其上安装Salt。 目标主机必须是运行中的salt minion,它是通过salt master使用salt-api进行控制的。 有关更多信息,请参见Vagrant入门。
从0.8.7开始,添加了扩展profiles配置文件和云提供商providers配置并避免重复的选项。 扩展功能适用于当前profile配置文件配置,但是对于云provider配置,仅适用于新语法和相应的配置文件,即/etc/salt/salt/cloud.providers
或/etc/salt/cloud.providers.d/*.conf
。
注意: 扩展云profile配置文件和provider提供程序不支持递归。 例如,可以使用第二个配置文件扩展配置文件,但第二个配置文件不能扩展第三配置文件。
同样,如果一个profile配置文件(或provider程序)正在扩展另一个配置文件,并且每个配置文件都包含值列表,则扩展配置文件中的列表将覆盖原始配置文件中的列表。 列表不是被合并在一起。
有关如何使用extends
扩展profiles配置的一些示例用法,考虑包含以下内容的/etc/salt/salt/cloud.profiles
:
development-instances:
provider: my-ec2-config
size: t1.micro
ssh_username: ec2_user
securitygroup:
- default
deploy: False
Amazon-Linux-AMI-2012.09-64bit:
image: ami-54cf5c3d
extends: development-instances
Fedora-17:
image: ami-08d97e61
extends: development-instances
CentOS-5:
provider: my-aws-config
image: ami-09b61d60
extends: development-instances
上面的配置一旦解析,将生成以下配置文件数据:
[{'deploy': False,
'image': 'ami-08d97e61',
'profile': 'Fedora-17',
'provider': 'my-ec2-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'},
{'deploy': False,
'image': 'ami-09b61d60',
'profile': 'CentOS-5',
'provider': 'my-aws-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'},
{'deploy': False,
'image': 'ami-54cf5c3d',
'profile': 'Amazon-Linux-AMI-2012.09-64bit',
'provider': 'my-ec2-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'},
{'deploy': False,
'profile': 'development-instances',
'provider': 'my-ec2-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'}]
下面是一些关于如何使用 extends
扩展cloud providers 配置的示例, 参考 /etc/salt/salt/cloud.providers
的内容:
my-develop-envs:
- id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
location: ap-southeast-1
availability_zone: ap-southeast-1b
driver: ec2
- user: myuser@mycorp.com
password: mypass
ssh_key_name: mykey
ssh_key_file: '/etc/salt/ibm/mykey.pem'
location: Raleigh
driver: ibmsce
my-productions-envs:
- extends: my-develop-envs:ibmsce
user: my-production-user@mycorp.com
location: us-east-1
availability_zone: us-east-1
上面的配置一经解析,将生成以下providers数据:
'providers': {
'my-develop-envs': [
{'availability_zone': 'ap-southeast-1b',
'id': 'HJGRYCILJLKJYG',
'key': 'kdjgfsgm;woormgl/aserigjksjdhasdfgn',
'keyname': 'test',
'location': 'ap-southeast-1',
'private_key': '/root/test.pem',
'driver': 'aws',
'securitygroup': 'quick-start'
},
{'location': 'Raleigh',
'password': 'mypass',
'driver': 'ibmsce',
'ssh_key_file': '/etc/salt/ibm/mykey.pem',
'ssh_key_name': 'mykey',
'user': 'myuser@mycorp.com'
}
],
'my-productions-envs': [
{'availability_zone': 'us-east-1',
'location': 'us-east-1',
'password': 'mypass',
'driver': 'ibmsce',
'ssh_key_file': '/etc/salt/ibm/mykey.pem',
'ssh_key_name': 'mykey',
'user': 'my-production-user@mycorp.com'
}
]
}