Bootstrapping Servers

Kolla-ansible 提供了在部署容器之前启动主机配置的支持,通过 bootstrap-servers 子命令实现。这包括对以下的支持

  • /etc/hosts 的自定义

  • 创建用户和组

  • Kolla 配置目录

  • 软件包的安装和删除

  • Docker 引擎的安装和配置

  • 禁用防火墙

  • 创建 Python 虚拟环境

  • Apparmor 的配置

  • SELinux 的配置

  • NTP 守护程序的配置

所有启动支持都由 baremetal Ansible 角色提供。

运行命令

执行启动的基本命令是

kolla-ansible bootstrap-servers -i INVENTORY

可能需要进一步的选项,如以下部分所述。

初始启动注意事项

启动的本质意味着 Ansible 在初始启动期间执行的环境可能与启动完成后看到的环境不同。例如

  • 可能尚未创建 kolla_user 用户帐户。如果通常将其用作执行 Kolla Ansible 的 ansible_user,则必须使用不同的用户帐户进行启动。

  • 可能不存在 Python 虚拟环境。如果通常将 virtualenv 用作执行 Kolla Ansible 的 ansible_python_interpreter,则必须使用系统 Python 解释器进行启动。

可以通过 -e 参数传递 Kolla Ansible 中的这些变量,以覆盖库存默认值

kolla-ansible bootstrap-servers -i INVENTORY -e ansible_user=<bootstrap user> -e ansible_python_interpreter=/usr/bin/python

后续启动注意事项

可以对已经启动的云执行启动过程,例如应用 Kolla Ansible 新版本中的配置。在这种情况下,应考虑进一步的注意事项。

Docker 引擎软件包可能会更新。这将导致 Docker 引擎重新启动,以及所有正在运行的容器。有三种主要方法可以避免所有控制平面服务同时重新启动。

第一种选择是使用 --limit 命令行参数按批次将命令应用于主机,确保集群服务(例如 MariaDB)始终存在法定人数。

kolla-ansible bootstrap-servers -i INVENTORY --limit controller0,compute[0-1]
kolla-ansible bootstrap-servers -i INVENTORY --limit controller1,compute[2-3]
kolla-ansible bootstrap-servers -i INVENTORY --limit controller2,compute[4-5]

第二种选择是按批次对主机执行单个 playbook

kolla-ansible bootstrap-servers -i INVENTORY -e kolla_serial=30%

最后一种选择是使用 Docker 的 live-restore 配置选项来避免在重新启动 Docker 引擎时重新启动容器。但是,已经有报告称使用此选项存在问题,因此请自行承担风险。

请确保已测试导致 Docker 引擎更新的任何操作,尤其是在从旧版 Docker 软件包迁移到 Docker Community Edition 时。有关详细信息,请参阅 软件包仓库

/etc/hosts 的自定义

这是可选的,由 customize_etc_hosts 启用,默认情况下为 true

  • 确保 localhost 位于 /etc/hosts

  • 将每个主机的 API 接口的 IP 添加到 /etc/hosts 中。

创建用户和组

这是可选的,由 create_kolla_user 启用,默认情况下为 true

  • 确保存在一个名为由变量 kolla_group 定义的组,默认值为 kolla

  • 确保存在一个名为由变量 kolla_user 定义的用户,默认值为 kolla。用户的基本组由 kolla_group 定义。该用户被添加到 sudo 组。

  • kolla_user 授权 SSH 公钥。该密钥由 kolla_ssh_key 映射变量的 public_key 值定义,通常在 passwords.yml 中定义。

  • 如果将变量 create_kolla_user_sudoers 设置为 true,则将为 kolla_user 配置 sudoers 配置文件,授予无密码 sudo 权限。

Kolla 配置目录

Kolla ansible 服务配置写入到主机中的目录由 node_config_directory 定义,默认值为 /etc/kolla/。将创建此目录。如果设置了 create_kolla_user,则目录的所有者和组将分别设置为 kolla_userkolla_group

软件包的安装和删除

为安装和删除定义了软件包列表。在 Debian 系列系统中,这些由 debian_pkg_installubuntu_pkg_removals 分别定义。在 Red Hat 系列系统中,这些由 redhat_pkg_installredhat_pkg_removals 分别定义。

Docker 引擎的安装和配置

Docker 引擎是 Kolla Ansible 的关键依赖项,并提供了各种配置选项。

软件包仓库

如果设置了 enable_docker_repo 标志,则将配置 Docker 软件包的软件包仓库。Kolla Ansible 使用来自 https://download.docker.com 的“社区版”软件包。

各种其他配置选项以 docker_(apt|yum)_ 开头。通常不需要更改这些选项。

配置

变量 docker_storage_driver 是可选的。如果设置,它将定义用于 Docker 的 存储驱动程序

变量 docker_runtime_directory 是可选的。如果设置,它将定义 Docker 的运行时(data-root)目录。

变量 docker_registry,默认情况下未设置,定义 Docker 注册表的地址。如果未设置该变量,将使用 Quay.io

变量 docker_registry_insecure,默认值为 false,定义是否将 docker_registry 配置为不安全的注册表。不安全的注册表允许使用损坏的证书链和没有 TLS 的 HTTP,但在生产环境中强烈不建议这样做,除非在非常特殊的情况下。有关更多讨论,请参阅 Docker 官方文档中的 不安全注册表。此外,请注意这将禁用 Docker 注册表身份验证。

变量 docker_log_max_file,默认值为 5,定义每个容器要保留的最大日志文件数。变量 docker_log_max_size,默认值为 50m,定义每个容器轮换日志文件的最大大小。

变量 docker_http_proxydocker_https_proxydocker_no_proxy 可用于配置 Docker 引擎以使用 http/https 代理连接到互联网。

可以将 Docker 引擎的其他选项传递到 docker_custom_config 变量中。它将存储在 daemon.json 配置文件中。示例

{
    "experimental": false
}

启用/禁用防火墙

Kolla Ansible 支持主机防火墙的配置。

目前仅支持 Firewalld。

在 Debian 系列系统中,需要事先安装 Firewalld。

在 Red Hat 系列系统中,firewalld 应该默认安装。

要启用系统防火墙的配置,请将 disable_firewall 设置为 false 并将 enable_external_api_firewalld 设置为 true

有关更多信息,请参阅 Kolla 安全

创建 Python 虚拟环境

这是可选的,通过将 virtualenv 设置为创建 Python 虚拟环境的路径来启用。默认情况下,不使用虚拟环境。如果设置了 virtualenv_site_packages(默认值为 true),则虚拟环境将继承全局 site-packages 目录中的软件包。这通常需要 yum 和 apt 等在 PyPI 上不可用的模块。有关更多信息,请参阅 目标主机

Apparmor 的配置

在 Ubuntu 系统上,将删除 libvirtd Apparmor 配置文件。

SELinux 的配置

在 Red Hat 系列系统中,如果设置了 change_selinux(默认值为 true),则 SELinux 状态将设置为 selinux_state(默认值为 permissive)。有关更多信息,请参阅 Kolla 安全