New in version 2015.8.4.
注
本教程假定您已掌握Salt的基本知识。 要了解这些知识可以查看Salt Walkthrough。
本教程还假设您对Salt Proxy Minions有基本的了解。 如果您不熟悉Salt的Proxy Minion系统,请阅读Salt Proxy Minion文档和Salt Proxy Minion端到端示例教程。
本教程做出的第三个假设是,您对ESXi主机有基本的了解。 您可以在VMware官方的各种资源上了解有关ESXi主机的更多信息。
Salt的ESXi Proxy Minion允许将VMware ESXi主机视为一个独立的Salt Minion,而无需在ESXi主机上安装Salt Minion。
由于ESXi主机不一定可以在能够承载Python堆栈的操作系统上运行,因此ESXi主机不能直接运行常规的Salt Minion。 因此,Salt的Proxy Minion功能使您可以指定另一台计算机来承载proxy代理进程,以“proxies”从Salt Master到ESXi主机的通信。 Master服务器不知道或不在乎ESXi目标不是“真实的” Salt Minion。
Salt的文档的Proxy Minion部分中可以找到有关Proxy Minions的更深入的概念性介绍。
Salt的ESXi Proxy Minion已添加到Salt的2015.8.4版本中。
注 请注意,ESXi Proxy Minion的某些功能可能取决于ESXi主机附带的许可证类型。
例如,某些服务仅可用于使用VMware vSphere Enterprise或Enterprise Plus许可证来设置服务状态或策略,而其他服务可用于Standard许可证。 ntpd服务仅限于Enterprise Plus许可证,而ssh可通过标准许可证使用。
请参阅“vSphere Comparison”页面以了解更多信息。
通过Proxy Minion操纵ESXi主机需要运行Proxy Minion进程的计算机具有ESXCLI软件包(及其所有依赖项)和pyVmomi Python库。
ESXi Proxy Minion使用VMware的API在主机上执行任务,就好像它是常规的Salt Minion。 为了访问已在ESXi主机上运行的API,ESXi主机必须已经设置好用于登录到主机的用户名和密码。 用户名通常是root
。 在Salt可以通过VMware的API访问ESXi主机之前,必须在主机上设置默认密码。
必须在运行proxy进程的设备上安装pyVmomi Python 库 。可以使用pip来安装 pyVmomi :
pip install pyVmomi
注
pyVmomi 6.0版在某些Python版本上存在SSL错误处理方面的问题。 如果使用的是pyVmomi 6.0版,则运行proxy minion进程的计算机必须具有Python 2.6,Python 2.7.9或更高版本。 这是由于pyVmomi 6.0中的上游依赖关系,Python 2.7至2.7.8版本不支持。 如果运行代理进程的Python版本不在支持的范围内,则需要安装pyVmomi的早期版本。 有关更多信息,请参见问题#29537。
根据上面的说明,要安装比PyPi当前列出的版本更早的pyVmomi版本,请运行以下命令:
pip install pyVmomi==5.5.0.2014.1.1
5.5.0.2014.1.1版本是原始ESXi Proxy Minion所针对的已知稳定版本。
当前,用于ESXi Proxy Minion的功能中约有三分之一需要将ESXCLI软件包安装在运行Proxy Minion进程的计算机上。
ESXCLI软件包也称为VMware vSphere CLI或vCLI。 VMware提供了适用于vSphere 5.5和vSphere 6.0的vCLI软件包安装说明。
一旦所有必需的依赖项都已就绪并且安装了vCLI软件包,就可以通过运行以下命令来检查是否可以连接到ESXi主机:
esxcli -s <host-location> -u <username> -p <password> system syslog config get
如果连接成功,则说明ESXCLI已成功安装在您的系统上。 您应该看到与ESXi主机的syslog配置有关的输出。
在一些地方,需要设置各种配置值,以使ESXi Proxy Minion正常连接和运行。
在将要运行Proxy Minon进程的计算机上,必须有一个proxy代理配置文件。 该文件应位于/etc/salt/
目录中,并且应命名为proxy
。 如果默认情况下没有该文件,请创建它。
该文件应包含Salt代理将连接到的Salt Master的位置信息。
proxy代理配置文件的示例:
# /etc/salt/proxy
master: <salt-master-location>
Proxy minions从Salt的Pillar那里获取配置。 每个代理都必须在Pillar中有一个配置段,并在Pillar top-file文件中有一个与Proxy ID相匹配的引用。 与ESXi主机进行通信时,pillar配置至少应如下所示:
proxy:
proxytype: esxi
host: <ip or dns name of esxi host>
username: <ESXi username>
passwords:
- first_password
- second_password
- third_password
其他一些可选设置是协议和端口。 这些也可以添加到pillar配置中。
proxytype
键值对非常关键,因为它告诉Salt从Salt的安装层次结构中的proxy
目录或Salt Master的/srv/salt/_proxy
加载哪个接口(例如,如果您创建了自己的代理模块 )。 要使用ESXi Proxy Moduole模块,请将其设置为esxi
。
ESXi主机的位置,ip/dns。 Required。
username 用于登录 ESXi 主机, 例如 root。 Required。
用于尝试登录ESXi主机的密码列表。此列表中至少需要包含一个密码。
Proxy代理集成功能将尝试按顺序列出的密码。通过这种方式进行配置,以便您可以通过vsphere.update_host_password
执行模块功能或通过esxi.password_present
状态功能获得常规密码和ESXi主机正在更新的密码。这样,更改密码后,您无需重新启动proxy minion,而只需选择列表中提供的新密码即可。然后,您可以随意更改pillar,以将该密码移到最前面并撤消未使用的密码。
使用密码列表的用例和理由:您是第一次设置ESXi主机,并且该主机带有默认密码。您知道您将在初始设置期间将此密码从默认密码更改为新密码。如果只有一个密码选项,并且具有更改密码的状态设置,则在Pillar和Proxy Minion中更新密码生效之前,任何在密码更改后运行的远程执行命令或状态将无法在主机上运行。
这个功能使您可以使用任意数量的潜在后备密码。
注
当主机上的密码更改为可能的密码列表中的一个时,密码列表越靠下,返回单个命令所花费的时间就越长。 这是由于pyVmomi登录系统的性质决定的。 我们必须等待第一次尝试失败之后才能尝试列表中的下一个密码。
当proxy minion第一次启动时,这种情况尤其如此,甚至更慢。 如果正确的密码不是列表中的第一个密码,则
test.version
最多可能需要一分钟才能获取到salt的版本(例如:2018.3.4)。完成初始授权后,对命令的响应将会快一点。为了避免较长的等待时间,SaltStack建议将正确的密码移至列表的顶部,并尽早重新启动proxy minion服务。
如果ESXi主机未使用默认协议,则将此参数值设置为可用的备用协议。 默认值为https
。
如果ESXi主机未使用默认端口,则将此值设置为备用端口。 默认值为443。
下面是一个在启动Proxy Minion进程之前需要进行的所有基本配置的示例,包括Proxy Config File,Pillar Top File和任何单独的Proxy Minion Pillar文件。
在此示例中,我们假设要连接两个ESXi主机。 因此,我们将创建两个Proxy Minion配置文件,每个ESXi主机一个配置。
Proxy Config File:
# /etc/salt/proxy
master: <salt-master-location>
Pillar Top File:
# /srv/pillar/top.sls
base:
'esxi-1':
- esxi-1
'esxi-2':
- esxi-2
针对第一个 ESXi host 主机 esxi-1 的Pillar Config File:
# /srv/pillar/esxi-1.sls
proxy:
proxytype: esxi
host: esxi-1.example.com
username: 'root'
passwords:
- bad-password-1
- backup-bad-password-1
针对第二个 ESXi host 主机 esxi-2 的Pillar Config File:
# /srv/pillar/esxi-2.sls
proxy:
proxytype: esxi
host: esxi-2.example.com
username: 'root'
passwords:
- bad-password-2
- backup-bad-password-2
一旦所有正确的配置文件到位,就可以开始启动proxy代理进程了!
- 首先,确保您的Salt Master正在运行。
- 为Proxy Minion进程和ID提供一个名称(需要与在“Configuration”部分中创建的配置文件名称相匹配),以debug模式启动第一个Salt Proxy。
salt-proxy --proxyid='esxi-1' -l debug
- 在Salt Master上接受 esxi-1 Proxy Minion 的认证密钥 :
# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
esxi-1
Rejected Keys:
#
# salt-key -a esxi-1
The following keys are going to be accepted:
Unaccepted Keys:
esxi-1
Proceed? [n/Y] y
Key for minion esxi-1 accepted.
- 重复第二个Salt Proxy,这一次,我们将以守护程序的形式运行代理进程,作为示例。
salt-proxy --proxyid='esxi-2' -d
- 在Salt Master上接受 esxi-2 Proxy Minion 的认证密钥
# salt-key -L
Accepted Keys:
esxi-1
Denied Keys:
Unaccepted Keys:
esxi-2
Rejected Keys:
#
# salt-key -a esxi-1
The following keys are going to be accepted:
Unaccepted Keys:
esxi-2
Proceed? [n/Y] y
Key for minion esxi-1 accepted.
- 检查和观察你的 Proxy Minions 是否可以正常响应:
# salt 'esxi-*' test.version
esxi-1:
True
esxi-2:
True
现在,您已经配置好了 Proxy Minions,并使它们成功响应了test.version
查询,我们可以开始通过Salt对ESXi主机执行管理命令。
了解此特定代理的工作原理非常重要,要通过Proxy Minion对ESXi主机开始运行远程执行和状态命令,需要注意几个重要的方面: vSphere Execution Module, ESXi Execution Module 以及 ESXi State Module。
Salt.modules.vsphere是一个标准的Salt执行模块,负责ESXi Proxy Minion的大部分工作。 模块中几乎每个函数都使用凭据(username
和 password
)和目标主机host
参数。 如果未传递凭据和主机,则Salt通过pyVmomi
或ESXCLI
对本地计算机运行命令。 如果需要,可以在安装了适当版本的pyVmomi
和ESXCLI
的任何计算机上运行此模块中的功能,并且该计算机将通过网络进行连接并与ESXi主机通信。
您会注意到,vSphere模块中的大多数功能都需要host
, username
和 password
。 这些参数包含在Pillar文件中,并通过已运行的代理进程传递给函数。 执行命令时不需要提供这些参数。 有关示例,请参见下面的“Running Remote Execution Commands”段落。
为了将上面“Configuration”部分中设置的Pillar信息传递到vSphere Execution Module中的函数调用,salt.modules.esxi执行模块充当vSphere执行模块功能与代理进程之间的“中介” 。
“中介程序”采用Pillar文件中指定的身份验证凭据,并将它们传递给vSphere执行模块功能所需的host
, username
, password
以及可选的protocol
和port
选项。
如果函数采用更多的位置或关键字作为参数,则可以将其附加到调用中。 正是这种中介程序通过代理与ESXi主机进行通信,安排从ESXi Proxy Minion的Pillar配置部分提取凭据和主机名信息。
由于存在中介程序,要查找可用于与ESXi主机接口的功能的文档,您需要查找salt.modules.vsphere而不是salt.modules.esxi。
要运行Salt Master的命令以通过ESXi Proxy Minion对ESXi主机执行命令,请使用esxi.cmd <vsphere-function-name>
语法来调用vSphere执行模块中的函数。 各种vsphere执行模块功能所需的args和kwargs都必须在kwarg-type中传递。 例如:
salt 'esxi-*' esxi.cmd system_info
salt 'exsi-*' esxi.cmd get_service_running service_name='ssh'
ESXi状态模块的功能类似于其他状态模块。 ESXi执行模块提供的“shim”中介会传递必要的host
, username
, password
凭据,因此不需要在该状态下提供这些选项。 除此之外,状态文件的写入和执行就像其他所有Salt状态一样。 有关ESXi状态功能,请参见salt.modules.esxi状态。
以下状态文件是一个示例,说明如何配置ESXi主机的各个部分,包括启用SSH,上传SSH密钥,coredump网络配置,syslog,ntp,启用VMotion,重置主机密码等。
# /srv/salt/configure-esxi.sls
configure-host-ssh:
esxi.ssh_configured:
- service_running: True
- ssh_key_file: /etc/salt/ssh_keys/my_key.pub
- service_policy: 'automatic'
- service_restart: True
- certificate_verify: True
configure-host-coredump:
esxi.coredump_configured:
- enabled: True
- dump_ip: 'my-coredump-ip.example.com'
configure-host-syslog:
esxi.syslog_configured:
- syslog_configs:
loghost: ssl://localhost:5432,tcp://10.1.0.1:1514
default-timeout: 120
- firewall: True
- reset_service: True
- reset_syslog_config: True
- reset_configs: loghost,default-timeout
configure-host-ntp:
esxi.ntp_configured:
- service_running: True
- ntp_servers:
- 192.174.1.100
- 192.174.1.200
- service_policy: 'automatic'
- service_restart: True
configure-vmotion:
esxi.vmotion_configured:
- enabled: True
configure-host-vsan:
esxi.vsan_configured:
- enabled: True
- add_disks_to_vsan: True
configure-host-password:
esxi.password_present:
- password: 'new-bad-password'
通过ESXi Proxy Minion调用状态,就像在常规Minion上一样。 例如:
salt 'esxi-*' state.sls configure-esxi test=true
salt 'esxi-*' state.sls configure-esxi
以下是在Salt官网上可以查阅的一些相关配置资料: