Documentation

7. 安装 Ansible Tower

通过选择适合不同模式并对清单文件进行修改,可以以不同的方式安装 Tower 以满足您的具体要求。如需了解与基于 OpenShift 的部署相关的信息,请参阅 OpenShift Deployment and Configuration

7.1. Tower 安装场景

可使用以下场景之一安装 Tower:

单机

  • 作为一个集成安装:
    • 这是一个单一的 Tower 机器安装 - web 前端、REST API 后端和数据库都安装在一台机器上。这是 Tower 的标准安装。它还会从您的 OS 厂商仓库中安装 PostgreSQL,并将 Tower 服务配置为将其用作数据库。

  • 使用外部数据库(2 个可用选项):
    • 带有远程 DB 配置的 Tower:这会在一台机器上安装 Tower 服务器,并将它配置为使用一个远程的 PostgreSQL 10 实例作为它的数据库。这个远程 PostgreSQL 可以是您自己管理的服务器,也可由 云服务商(如 Amazon RDS)提供。

    • 带有使用 playbook 安装的远程 PostgreSQL 的Tower:这会在一台机器上安装 Tower 服务器,并通过 playbook 安装程序(由 Tower 管理)安装远程 PostgreSQL 数据库。

注解

1). Tower 将不会为它使用的数据库配置复制或故障转移功能,但 Tower 应该可以和已有的复制机制一起工作。2). 数据库服务器应该位于同一个网络或同一个数据中心以使 Tower 服务器具有高性能。

用于传统 Tower 安装的设置:

  • pg_sslmode 控制 PostgreSQL 客户端的 SSL 功能,例如 Tower 服务器如何连接到数据库。它的默认值是 prefer,如果数据库服务器提供 SSL,客户端将使用它。您还可以将其设置为 verify-full 来完全验证证书信任以强制实现 SSL。

  • 用户使用 web_server_ssl_certweb_server_ssl_key 提供 Tower UI 和 API 的 web 服务器上要安装的证书和密钥。它们必须同时提供,或同时不提供。如果没有提供,会在安装时生成一个自签发(不受信任)的证书。

  • postgres_use_ssl (true/false) - 控制 PostgreSQL 服务器是否会被配置为需要 SSL。这只会对内部/嵌入的数据库(例如,Tower 安装脚本正在执行数据库服务器部署时)产生影响。它对外部数据库没有影响。

  • postgres_ssl_certpostgres_ssl_key - 在 postgres_use_ssl 为 true 时必须提供。这些证书应该具有与 Tower 节点用来连接到数据库服务器的主机名匹配的 CN(或通配符、主题备用名称等等)。

对于基于 OpenShift 的部署,请参考 OpenShift Deployment and Configuration

高可用性多机器集群

Tower 可以以一个高可用性集群的形式安装。在这个模式下,会安装并激活多个 Tower 节点。任何节点都可以接收 HTTP 请求,所有节点都可以执行作业。

  • 集群的 Tower 环境需要有一个外部的数据库(2 个可用选项):
    • 带有远程 DB 配置的 Tower:这会在一台机器上安装 Tower 服务器,并将它配置为使用一个远程的 PostgreSQL 实例作为它的数据库。这个远程 PostgreSQL 可以是您自己管理的服务器,也可由 云服务商(如 Amazon RDS)提供。

    • 带有使用 playbook 安装的远程 PostgreSQL 的Tower:这会在一台机器上安装 Tower 服务器,并通过 playbook 安装程序(由 Tower 管理)安装远程 PostgreSQL 数据库。

  • 有关配置集群设置的详情,请参考 集群

注解

在集群设置中运行需要 Tower 使用外部的数据库,PostgreSQL 必须在一个不是主(primary)或(secondary)tower 节点的机器上安装。在一个冗余设置中,远程 PostgreSQL 版本要求是 PostgreSQL 10

7.2. 设置清单(Inventory)文件

在编辑清单(inventory)文件时,您必须记住以下几点:

  • 清单文件的内容应该在 ./inventory 中定义,并由 ./setup.sh 安装程序 playbook 引用。

  • 安装和升级:如果需要使用外部数据库,您必须确保清单文件中的数据库部分被正确设置。在运行设置脚本前,编辑此文件以添加外部数据库信息。

  • 升级现有集群:当升级集群时,您可能需要重新配置集群以忽略现有的实例或实例组。从清单文件中删除这些实例或实例组不足以从集群中删除它们。除了在清单文件中删除它们以外,在开始升级前,请参阅 deprovision instances or instance groups 的内容进行需要的操作。否则,忽略的实例或实例组将继续与集群通信,这可能会导致 tower 服务在升级过程中出现问题。

  • 集群安装:如果您要创建集群设置,则必须使用所有实例的主机名或 IP 地址替换 localhost。所有节点/实例都必须能够使用这个主机名或 IP 地址访问其他节点。换句话说,您不能在其中一个节点上使用 localhost ansible_connection=local *并且*所有节点都应该使用相同的主机名格式。

    因此,这将*不能*工作:

    [tower]
    localhost ansible_connection=local
    hostA
    hostB.example.com
    172.27.0.4
    

    需要使用以下格式:

    [tower]
    hostA
    hostB
    hostC
    

    或者

    hostA.example.com
    hostB.example.com
    hostC.example.com
    

    或者

    [tower]
    172.27.0.2
    172.27.0.3
    172.27.0.4
    
  • 所有标准安装:当执行安装时,您必须在清单文件中提供所需的密码。

注解

对安装过程所做的更改现在需要填写清单文件中的所有密码字段。它们应该和以下类似:。它们应该和以下类似:

admin_password='' <-- Tower 本地 admin 密码

pg_password='' <---- 在 /etc/tower/conf.d/postgres.py 中

警告

不要在 pg_password 中使用特殊字符, 因为它可能导致设置失败。

清单文件示例

  • 置备新节点:当置备新节点时,将节点添加到清单文件,确保所有密码都包含在清单文件中。

  • 升级一个节点:当升级时,将清单文件与当前版本进行比较。推荐即使在升级时,也在清单文件中保存密码。

单节点清单文件示例

[tower]
localhost ansible_connection=local

[database]

[all:vars]
admin_password='password'

pg_host=''
pg_port=''

pg_database='awx'
pg_username='awx'
pg_password='password'

警告

不要在 pg_password 中使用特殊字符, 因为它可能导致设置失败。

多节点集群清单文件示例

[tower]
clusternode1.example.com
clusternode2.example.com
clusternode3.example.com

[database]
dbnode.example.com

[all:vars]
ansible_become=true

admin_password='password'

pg_host='dbnode.example.com'
pg_port='5432'

pg_database='tower'
pg_username='tower'
pg_password='password'

警告

不要在 pg_password 中使用特殊字符, 因为它可能导致设置失败。

现有外部数据库清单文件外部

[tower]
node.example.com ansible_connection=local

[database]

[all:vars]
admin_password='password'
pg_password='password'


pg_host='database.example.com'
pg_port='5432'

pg_database='awx'
pg_username='awx'

警告

不要在 pg_password 中使用特殊字符, 因为它可能导致设置失败。

需要安装外部数据库的清单文件示例

[tower]
node.example.com ansible_connection=local


[database]
database.example.com

[all:vars]
admin_password='password'
pg_password='password'

pg_host='database.example.com'
pg_port='5432'

pg_database='awx'
pg_username='awx'

警告

不要在 pg_password 中使用特殊字符, 因为它可能导致设置失败。

一旦进行了必要的修改,就可以运行 ./setup.sh

注解

需要对远程机器的 root 访问权限。在 Ansible 中,可以通过以下不同方式实现:

  • ansible_user=root ansible_ssh_pass="your_password_here" inventory host or group variables

  • ansible_user=root ansible_ssh_private_key_file="path_to_your_keyfile.pem" inventory host or group variables

  • ANSIBLE_BECOME_METHOD='sudo' ANSIBLE_BECOME=True ./setup.sh

  • ANSIBLE_SUDO=True ./setup.sh(只适用于 Ansible 2.7)

DEFAULT_SUDO Ansible 配置参数在 Ansible 2.8 中被删除,这会导致使用 ANSIBLE_SUDO=True ./setup.sh 进行权限升级的方法无法正常工作。如需了解关于 become 插件的更多信息,请参考 Understanding Privilege Escalationlist of become plugins

7.3. Setup Playbook

注解

Ansible Tower 3.0 简化了安装过程,它不再需要运行 ./configure/。使用老版本的用户需要根据 v.2.4.5 (或更老版本) 文档中的内容进行操作。Tower 文档可以通过 http://docs.ansible.com/ 获得。

Tower 的设置(setup)playbook 脚本使用 inventory 文件,它通过 Tower 安装程序 tarball 被解包到的目录中的 ./setup.sh 运行。

root@localhost:~$ ./setup.sh

设置脚本使用以下参数:

  • -h -- 显示帮助信息并退出

  • -i INVENTORY_FILE -- 到 Ansible 清单文件的路径(默认: inventory

  • -e EXTRA_VARS -- 使用 key=value 或 YAML/JSON 设置额外的 Ansible 变量(例如, -e bundle_install=false 强制在线安装)

  • -b -- 在安装时执行数据库备份

  • -r -- 在安装时执行数据库恢复(除非通过 EXTRA_VARS 提供了一个非默认的路径,使用默认的恢复路径。如下所示)

./setup.sh -e 'restore_backup_file=/path/to/nondefault/location' -r

注解

请注意,在 Tower 3.0.0 和 3.0.1 中发现了一个会阻止正确系统备份和恢复的问题。

如果您需要备份或恢复 Tower v3.0.0 或 v3.0.1 安装,请使用 v3.0.2 安装程序进行。

在使用适当参数调用 ./setup.sh 后,Tower 会按照配置在适当的机器上进行安装。设置脚本使用 ansible.com 中的软件仓库提供的 RPM 或 Deb 软件包安装 Tower。

当设置完成后,使用网页浏览器访问 Tower 服务器并出现 Tower 登录界面。您的 Tower 服务器可从端口 80(http://tower.company.com/)访问,但会被重定向到端口 443,因此端口 443 需要可以被访问。

Login form

如果 Tower 安装失败,且您已购买了 Ansible Tower 的有效许可证,请通过红帽客户门户网站 https://access.redhat.com/ 联络 Ansible。

7.4. 更改密码

安装完成后,如果需要通过 SSH 登录到 Tower 实例,默认的 admin 密码会在提示符后提供。您可以使用以下命令(以 root 用户或 AWX 用户)更改该密码:

awx-manage changepassword admin

之后,您输入的新密码将作为 Web UI 中的 admin 密码使用。