Skip to content

Latest commit

 

History

History
329 lines (254 loc) · 15.4 KB

16-5.Esxi-Proxy-Minion.md

File metadata and controls

329 lines (254 loc) · 15.4 KB

ESXi Proxy Minion

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”页面以了解更多信息。

Dependencies

通过Proxy Minion操纵ESXi主机需要运行Proxy Minion进程的计算机具有ESXCLI软件包(及其所有依赖项)和pyVmomi Python库。

ESXi Password

ESXi Proxy Minion使用VMware的API在主机上执行任务,就好像它是常规的Salt Minion。 为了访问已在ESXi主机上运行的API,ESXi主机必须已经设置好用于登录到主机的用户名和密码。 用户名通常是root。 在Salt可以通过VMware的API访问ESXi主机之前,必须在主机上设置默认密码。

pyVmomi

必须在运行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所针对的已知稳定版本。

ESXCLI

当前,用于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配置有关的输出。

Configuration

在一些地方,需要设置各种配置值,以使ESXi Proxy Minion正常连接和运行。

Proxy Config File

在将要运行Proxy Minon进程的计算机上,必须有一个proxy代理配置文件。 该文件应位于/etc/salt/目录中,并且应命名为proxy。 如果默认情况下没有该文件,请创建它。

该文件应包含Salt代理将连接到的Salt Master的位置信息。

proxy代理配置文件的示例:

# /etc/salt/proxy

master: <salt-master-location>

Pillar Profiles

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

proxytype键值对非常关键,因为它告诉Salt从Salt的安装层次结构中的proxy目录或Salt Master的/srv/salt/_proxy加载哪个接口(例如,如果您创建了自己的代理模块 )。 要使用ESXi Proxy Moduole模块,请将其设置为esxi

host

ESXi主机的位置,ip/dns。 Required。

username

username 用于登录 ESXi 主机, 例如 root。 Required。

passwords

用于尝试登录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服务。

protocol

如果ESXi主机未使用默认协议,则将此参数值设置为可用的备用协议。 默认值为https

port

如果ESXi主机未使用默认端口,则将此值设置为备用端口。 默认值为443。

Example Configuration Files

下面是一个在启动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

Starting the Proxy Minion

一旦所有正确的配置文件到位,就可以开始启动proxy代理进程了!

  1. 首先,确保您的Salt Master正在运行。
  2. 为Proxy Minion进程和ID提供一个名称(需要与在“Configuration”部分中创建的配置文件名称相匹配),以debug模式启动第一个Salt Proxy。
salt-proxy --proxyid='esxi-1' -l debug
  1. 在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.
  1. 重复第二个Salt Proxy,这一次,我们将以守护程序的形式运行代理进程,作为示例。
salt-proxy --proxyid='esxi-2' -d
  1. 在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.
  1. 检查和观察你的 Proxy Minions 是否可以正常响应:
# salt 'esxi-*' test.version
esxi-1:
    True
esxi-2:
    True

Executing Commands

现在,您已经配置好了 Proxy Minions,并使它们成功响应了test.version查询,我们可以开始通过Salt对ESXi主机执行管理命令。

了解此特定代理的工作原理非常重要,要通过Proxy Minion对ESXi主机开始运行远程执行和状态命令,需要注意几个重要的方面: vSphere Execution Module, ESXi Execution Module 以及 ESXi State Module。

vSphere Execution Module

Salt.modules.vsphere是一个标准的Salt执行模块,负责ESXi Proxy Minion的大部分工作。 模块中几乎每个函数都使用凭据(usernamepassword)和目标主机host参数。 如果未传递凭据和主机,则Salt通过pyVmomiESXCLI对本地计算机运行命令。 如果需要,可以在安装了适当版本的pyVmomiESXCLI的任何计算机上运行此模块中的功能,并且该计算机将通过网络进行连接并与ESXi主机通信。

您会注意到,vSphere模块中的大多数功能都需要host, usernamepassword。 这些参数包含在Pillar文件中,并通过已运行的代理进程传递给函数。 执行命令时不需要提供这些参数。 有关示例,请参见下面的“Running Remote Execution Commands”段落。

ESXi Execution Module

为了将上面“Configuration”部分中设置的Pillar信息传递到vSphere Execution Module中的函数调用,salt.modules.esxi执行模块充当vSphere执行模块功能与代理进程之间的“中介” 。

“中介程序”采用Pillar文件中指定的身份验证凭据,并将它们传递给vSphere执行模块功能所需的host, username, password以及可选的protocolport选项。

如果函数采用更多的位置或关键字作为参数,则可以将其附加到调用中。 正是这种中介程序通过代理与ESXi主机进行通信,安排从ESXi Proxy Minion的Pillar配置部分提取凭据和主机名信息。

由于存在中介程序,要查找可用于与ESXi主机接口的功能的文档,您需要查找salt.modules.vsphere而不是salt.modules.esxi

Running Remote Execution Commands

要运行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 State Module

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

Relevant Salt Files and Resources

以下是在Salt官网上可以查阅的一些相关配置资料: