Kolla 多节点部署

部署注册中心

Docker 注册中心是一个本地托管的注册中心,取代了从公共注册中心拉取镜像的需求。Kolla 可以与或不与本地注册中心一起工作,但是对于多节点部署,建议使用某种类型的本地注册中心。只需要部署一个注册中心实例,尽管注册中心服务存在 HA 功能。

可以按照以下方式在当前主机上部署一个非常简单的注册中心

docker run -d \
 --network host \
 --name registry \
 --restart=always \
 -e REGISTRY_HTTP_ADDR=0.0.0.0:4000 \
 -v registry:/var/lib/registry \
 registry:2

我们在这里使用端口 4000 以避免与 Keystone 冲突。如果注册中心未在与 Keystone 相同的宿主机上运行,则可以省略 -e 参数。

编辑 globals.yml 并添加以下内容,其中 192.168.1.100:4000 是注册中心正在监听的 IP 地址和端口

docker_registry: 192.168.1.100:4000
docker_registry_insecure: yes

编辑库存文件

Ansible 库存文件包含确定哪些服务将部署到哪些主机所需的所有信息。编辑 Kolla Ansible 目录中的库存文件 ansible/inventory/multinode。如果使用 pip 安装 Kolla Ansible,可以在 /usr/share/kolla-ansible 中找到它。

将 IP 地址或主机名添加到组,并将与该组关联的服务部署到该主机上。必须将 IP 地址或主机名添加到 control、network、compute、monitoring 和 storage 组。此外,定义其他行为库存参数,例如 ansible_ssh_useransible_becomeansible_private_key_file/ansible_ssh_pass,这些参数控制 Ansible 与远程主机交互的方式。

注意

Ansible 使用 SSH 连接部署主机和目标主机。有关 SSH 身份验证的更多信息,请参考 Ansible 文档

# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.
[control]
# These hostname must be resolvable from your deployment host
control01      ansible_ssh_user=<ssh-username> ansible_become=True ansible_private_key_file=<path/to/private-key-file>
192.168.122.24 ansible_ssh_user=<ssh-username> ansible_become=True ansible_private_key_file=<path/to/private-key-file>

注意

根据您的环境设置,可能需要其他库存参数。有关更多信息,请参考 Ansible 文档

对于更高级的角色,操作员可以编辑将与每个组关联的服务。请记住,某些服务必须分组在一起,并且更改这些设置可能会破坏您的部署

[kibana:children]
control

[elasticsearch:children]
control

[loadbalancer:children]
network

主机和组变量

通常,Kolla Ansible 配置存储在 globals.yml 文件中。此文件中的变量适用于所有主机。在具有多个主机的环境中,可能需要为不同的主机使用不同的变量值。一个常见的例子是网络接口配置,例如 api_interface

Ansible 的主机和组变量可以通过 多种方式 分配。最简单的方法是在库存文件本身中。

# Host with a host variable.
[control]
control01 api_interface=eth3

# Group with a group variable.
[control:vars]
api_interface=eth4

这很快就会变得难以维护,因此最好使用 host_varsgroup_vars 目录,其中包含具有主机或组变量的 YAML 文件

inventory/
  group_vars/
    control
  host_vars/
    control01
  multinode

Ansible 的变量优先级规则 相当复杂,但如果使用主机和组变量,则值得熟悉它们。 ansible/group_vars/all/ 中的 playbook 组变量定义了全局默认值,这些默认值优先于库存文件中定义的变量和库存 group_vars/all,但不优先于库存 group_vars/*。 ‘extra’ 文件(globals.yml)中的变量具有最高优先级,因此必须不同的变量不能在 globals.yml 中。

部署 Kolla

注意

如果在同一 Layer 2 网络内运行多个 keepalived 集群,请编辑文件 /etc/kolla/globals.yml 并指定 keepalived_virtual_router_idkeepalived_virtual_router_id 应该是唯一的,并且属于 0 到 255 的范围。

注意

如果 glance 配置为使用 file 作为后端,则只会启动一个 glance_api 容器。当在 /etc/kolla/globals.yml 中未指定其他后端时,file 默认启用。

首先,检查部署目标是否处于 Kolla 可以部署到的状态

kolla-ansible prechecks -i <path/to/multinode/inventory/file>

注意

RabbitMQ 不支持使用 IP 地址,因此 api_interface 的 IP 地址应该可以通过主机名解析,以确保所有 RabbitMQ 集群主机在预先进行配置之前可以解析彼此的主机名。

运行部署

kolla-ansible deploy -i <path/to/multinode/inventory/file>

验证已启用服务的生成的配置文件

kolla-ansible validate-config -i <path/to/multinode/inventory/file>

注意

由于配置生成的性质,目前只能在第一次部署后进行验证。对于某些验证,有必要访问正在运行的容器。验证任务可以在每个 ansible 角色下的 kolla-ansible/ansible/roles/$role/tasks/config_validate.yml 中找到 - 并更改。大多数 OpenStack 服务的验证由特殊角色完成:service-config-validate