8. 使用实例管理容量

仅在 AWX 的 Openshift 和 Kubernetes (K8S) 部署中可以使用扩展网格,并且可以通过在集群中动态添加或删除节点来实现,这可以通过 AWX 用户界面的 **实例** 资源来实现,而无需运行安装脚本。

实例充当网格拓扑中的节点。自动化网格允许您扩展自动化的范围。您启动作业的位置和 ansible-playbook 运行的位置可能在不同的位置。

Site A pointing to Site B and dotted arrows to two hosts from Site B

自动化网格可用于

  • 遍历复杂的网络拓扑

  • 将执行能力(运行 ansible-playbook 的机器)更靠近您的目标主机

节点(控制、跳跃和执行实例)通过 Receptor 相互连接,形成一个虚拟网格。

Control node pointing to hop node, which is pointing to two execution nodes.

8.1. 先决条件

  • Red Hat Enterprise Linux (RHEL) 或 Debian 操作系统。使一台与 Red Hat 系列操作系统兼容的机器联机(例如 RHEL 8 和 9)或 Debian 11。这台机器需要一个静态 IP 或一个 AWX 集群可以访问的可解析 DNS 主机名。如果定义了 listener_port,则机器还需要一个可用的开放端口来建立入站 TCP 连接(例如 27199)。

    通常,机器的 CPU 内核和内存越多,可以同时调度到该机器上运行的作业就越多。有关容量的更多信息,请参见 AWX 容量确定和作业影响

  • 将运行安装包以设置远程节点的系统需要安装集合 ansible.receptor

    • 如果机器可以访问互联网

    ansible-galaxy install -r requirements.yml
    

    requirements.yml 文件中安装 Receptor 集合依赖项将始终如一地检索其中指定的 Receptor 版本,以及将来可能需要的任何其他集合依赖项。

  • 要从 AWX 用户界面管理实例,您必须具有系统管理员或系统审计员权限。

8.2. 常用拓扑

实例构成相互通信的设备网络。它们是自动化网格的构建块。这些构建块充当网格拓扑中的节点。有几种类型的实例

节点类型

描述

控制

运行持久化 Ansible Automation Platform 服务的节点,并将作业委托给混合节点和执行节点

混合

运行持久化 Ansible Automation Platform 服务并执行作业的节点(不适用于基于操作符的安装)

跳跃

仅用于在网格之间中继

执行

运行从控制节点传递的作业的节点(从用户的 Ansible 自动化提交的作业)

8.2.1. 简单拓扑

扩展作业容量的方法之一是创建一个独立的执行节点,可以将其添加到 AWX 的 Kubernetes 部署中一起运行。这些机器将不会成为 AWX Kubernetes 集群的一部分。集群中运行的控制节点将通过 Receptor 连接并向这些机器提交工作。这些机器在 AWX 中注册为类型“执行”实例,这意味着它们仅用于运行 AWX 作业,而不是像控制节点那样分派工作或处理 Web 请求。

可以添加跳跃节点以位于 AWX 的控制平面和独立执行节点之间。这些机器将不会成为 AWX Kubernetes 集群的一部分,并且它们将在 AWX 中注册为节点类型“跳跃”,这意味着它们将仅处理来自不同或更严格网络中无法访问的节点的入站和出站流量。

下面是一个带有两个执行节点的 AWX 任务 Pod 示例。到执行节点 2 的流量流经一个在它和控制平面之间设置的跳跃节点。

AWX task pod with a hop node between the control plane of AWX and standalone execution nodes.

以下是用于在简单拓扑中配置每个节点的示例值

实例类型

主机名

侦听端口

来自控制节点的对等节点

对等节点

控制平面

awx-task-65d6d96987-mgn9j

n/a

n/a

[跳跃节点]

跳跃节点

awx-hop-node

27199

True

[]

执行节点

awx-example.com

n/a

False

[跳跃节点]

8.2.2. 网状拓扑

网格入口是一个允许远程节点入站连接到控制平面的功能。当在不允许入站流量的受限网络环境中创建远程节点时,这尤其有用。

Mesh ingress architecture showing the peering relationship between nodes.

以下是用于在网格入口拓扑中配置每个节点的示例值

实例类型

主机名

侦听端口

来自控制节点的对等节点

对等节点

控制平面

awx-task-65d6d96987-mgn9j

n/a

n/a

[跳跃节点]

跳跃节点

awx-mesh-ingress-1

27199

True

[]

执行节点

awx-example.com

n/a

False

[跳跃节点]

为了为 AWX 创建网格入口,请参阅 AWX 运算符文档的 网格入口 章节,了解有关设置此类拓扑的信息。最后一步是创建远程执行节点并将执行节点添加到实例组,以便在作业执行中使用它。用于运行 playbook 的任何执行环境镜像都需要对您的远程执行节点可用。您在 playbook 中使用的所有内容也需要从此远程执行节点访问。

Job template using the instance group with the execution node to run jobs.

8.3. 添加实例

要在 AWX 中创建实例

  1. 从 AWX UI 的左侧导航菜单中单击 **实例**。

  2. 在实例列表视图中,单击 **添加** 按钮,将打开创建新实例窗口。

Create a new instance form.

实例有一些可以配置的属性

  • 在 **主机名** 字段中输入实例的完全限定域名(可 ping 的 DNS)或 IP 地址(必填)。此字段等效于 API 中的 hostname

  • 可选地为实例输入 **描述**

  • **实例状态** 字段是自动填充的,指示它正在安装,并且无法修改

  • 可选地指定 Receptor 要侦听传入连接的 **侦听端口**。这是远程机器上用于建立入站 TCP 连接的开放端口。此字段等效于 API 中的 listener_port

  • 从 **实例类型** 字段中的选项中选择,以指定要创建的类型。由于基于操作符的安装不支持混合节点,因此只能创建执行和跳跃节点。此字段等效于 API 中的 node_type

  • 在 **对等节点** 字段中,选择您希望新实例向其连接的对等节点主机名。

  • 在 **选项** 字段中
    • 选中 **启用实例** 复选框以使其可用于在执行节点上运行的作业。

    • 选中 **由策略管理** 复选框以允许策略指示如何分配实例。

    • 选中 **来自控制节点的对等节点** 复选框以允许控制节点自动对等此实例。如果启用了此选项或实例是对等节点,则需要设置侦听端口。

  1. 配置完属性后,单击 **保存** 以继续。

创建成功后,将打开其中一个已创建实例的详细信息。

Details of the newly created instance.

注意

后续步骤 4-8 旨在从任何可以 SSH 访问新创建实例的计算机上运行。

  1. 单击 **安装包** 字段旁边的下载按钮以下载包含文件的 tarball,以允许 AWX 对远程机器进行正确的 TCP 连接。

Instance details showing the Download button in the Install Bundle field of the Details tab.
  1. 从您下载的位置解压缩下载的 tar.gz 文件。安装包包含 TLS 证书和密钥、证书颁发机构和正确的 Receptor 配置文件。为了方便这些文件位于远程机器上的正确位置,安装包包含一个 install_receptor.yml playbook。该 playbook 需要 Receptor 集合,可以通过以下方式获取

ansible-galaxy collection install -r requirements.yml
  1. 在运行 ansible-playbook 命令之前,请在 inventory.yml 文件中编辑以下字段

  • ansible_user 用于指定运行安装的用户名

  • ansible_ssh_private_key_file 用于指定用于连接实例的私钥文件名

---
all:
  hosts:
    remote-execution:
      ansible_host: <hostname>
      ansible_user: <username> # user provided
      ansible_ssh_private_key_file: ~/.ssh/id_rsa

inventory.yml 文件的内容充当模板,包含在网状拓扑中安装和配置接收器节点期间应用的角色的变量。您可以修改某些其他字段,或完全替换文件以应对高级场景。有关每个变量的更多信息,请参阅角色变量

  1. 保存文件以继续。

  2. 在您要更新其网状拓扑的机器上运行以下命令

ansible-playbook -i inventory.yml install_receptor.yml

等待几分钟,让定期的 AWX 任务对新实例进行健康检查。您可以随时通过选择节点并从其详细信息页面点击**运行健康检查**按钮来运行健康检查。一旦实例端点或页面报告实例的“就绪”状态,即可在此机器上运行作业!

  1. 要查看同一拓扑中的其他实例或关联对等节点,请点击**对等节点**选项卡。

"Peers" tab showing two peers.

要将对等节点与您的节点关联,请点击**关联**按钮以打开一个合格对等实例的对话框。

Instances available to peer with the example hop node.

执行节点可以与跳跃节点或其他执行节点建立对等关系。跳跃节点只能与执行节点建立对等关系,除非您从**选项**字段中选中**来自控制节点的对等节点**复选框。

注意

如果您关联或取消关联对等节点,则系统会通知您从对等节点详细信息视图重新运行安装包(拓扑查看器 具有下载链接)。

Notification to re-run the installation bundle due to change in the peering.

您可以通过点击实例页面上的**移除**或通过 API 设置实例node_state = deprovisioning来移除实例。删除后,会弹出一个消息,通知您可能需要重新运行安装包以确保已移除的内容不再连接。

  1. 要查看更新后的拓扑的图形表示,请参阅本指南的拓扑查看器部分。

8.4. 管理实例

点击左侧导航菜单中的**实例**以访问实例列表。

List view of instances in AWX

实例列表显示拓扑中的所有当前节点以及相关详细信息

  • 主机名

  • **状态**指示节点的状态

    • **已安装**: 已成功安装和配置但尚未通过定期健康检查的节点

    • **就绪**: 可用于运行作业或在网状拓扑上的节点之间路由流量的节点。这取代了网状拓扑中之前使用的“健康”节点状态

    • **预配中**: 正在添加到当前网状拓扑中的节点,但正在等待作业安装所有软件包(目前尚不支持,并且可能会在将来的版本中发生更改)

    • **取消预配**: 正在从当前网状拓扑中移除的节点,并且正在完成其上当前正在运行的作业

    • **不可用**: 未通过最近一次健康检查的节点,表示连接或接收器存在问题

    • **预配失败**: 预配期间失败的节点(目前尚不支持,并且可能会在将来的版本中发生更改)

    • **取消预配失败**: 取消预配期间失败的节点(目前尚不支持,并且可能会在将来的版本中发生更改)

  • **节点类型**指定节点是控制节点、跳跃节点、执行节点还是混合节点(不适用于基于操作员的安装)。有关更多详细信息,请参阅节点

  • **容量调整**允许您调整节点中的分支数

  • **已用容量**指示已使用了多少容量

  • **操作**允许您启用或禁用实例以控制是否可以向其分配作业

从此页面,您可以添加、移除或对节点运行健康检查。使用实例旁边的复选框选择要移除或对其运行健康检查的实例。当按钮呈灰色时,表示您没有该特定操作的权限。请联系您的管理员以授予您所需的访问级别。如果您能够移除实例,则会收到确认提示,如下所示

Prompt for deleting instances in AWX

注意

即使实例处于活动状态并且作业正在其上运行,您仍然可以移除它。AWX 将尝试等待此节点上运行的任何作业完成,然后再实际移除它。

点击**移除**以确认。

如果对实例运行健康检查,则在详细信息页面的顶部会显示一条消息,指示健康检查正在进行中。

Health check for instances in AWX

点击**重新加载**以刷新实例状态。

注意

健康检查是异步运行的,即使刷新后,实例状态也可能需要长达一分钟才能更新。健康检查后,状态可能会或可能不会发生变化。如果健康检查任务当前正在运行,则在详细信息页面的底部,上次已知健康检查日期和时间戳旁边会显示一个计时器/时钟图标。

Health check for instance still in pending state.

此健康检查示例显示节点“one”上出现错误的状态更新

Health check showing an error in one of the instances.

8.5. 使用自定义 Receptor CA

有关详细信息,请参阅 AWX 运营商文档自定义 Receptor CA

8.6. 为默认 EE 使用私有镜像

有关详细信息,请参阅 AWX 运营商文档来自私有注册表的默认执行环境

8.7. 故障排除

如果在设置实例时遇到问题,请参阅以下故障排除技巧。

8.7.1. 事实缓存无法工作

确保执行节点上的系统时区与 AWX 上的settings.TIME_ZONE(默认为“UTC”)匹配。事实缓存依赖于比较工件文件的修改时间,并且这些修改时间不区分时区。因此,执行节点的时区与 AWX 的时区设置匹配至关重要。

要将系统时区设置为 UTC

ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime

8.7.2. 权限被拒绝错误

作业可能会失败并出现以下错误或类似错误

"msg":"exec container process `/usr/local/bin/entrypoint`: Permission denied"

对于基于 RHEL 的机器,这可能是由于系统上启用了 SELinux 造成的。您可以传递这些extra_settings容器选项以覆盖 SELinux 保护

DEFAULT_CONTAINER_RUN_OPTIONS = ['--network', 'slirp4netns:enable_ipv6=true', '--security-opt', 'label=disable']