安装和配置控制器节点

本节描述了如何在 Ubuntu 16.04 (LTS) 和 CentOS 7 上安装和配置控制器节点上的容器服务。

先决条件

在安装和配置 Zun 之前,您必须创建数据库、服务凭证和 API 端点。

  1. 要创建数据库,请完成以下步骤

    • 使用数据库访问客户端以 root 用户身份连接到数据库服务器

      # mysql
      
    • 创建 zun 数据库

      MariaDB [(none)] CREATE DATABASE zun;
      
    • 授予 zun 数据库适当的访问权限

      MariaDB [(none)]> GRANT ALL PRIVILEGES ON zun.* TO 'zun'@'localhost' \
        IDENTIFIED BY 'ZUN_DBPASS';
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON zun.* TO 'zun'@'%' \
        IDENTIFIED BY 'ZUN_DBPASS';
      

      ZUN_DBPASS 替换为合适的密码。

    • 退出数据库访问客户端。

  2. 激活 admin 凭证以访问仅管理员可用的 CLI 命令

    $ . admin-openrc
    
  3. 要创建服务凭证,请完成以下步骤

    • 创建 zun 用户

      $ openstack user create --domain default --password-prompt zun
      User Password:
      Repeat User Password:
      +-----------+----------------------------------+
      | Field     | Value                            |
      +-----------+----------------------------------+
      | domain_id | e0353a670a9e496da891347c589539e9 |
      | enabled   | True                             |
      | id        | ca2e175b851943349be29a328cc5e360 |
      | name      | zun                              |
      +-----------+----------------------------------+
      
    • admin 角色添加到 zun 用户

      $ openstack role add --project service --user zun admin
      

      注意

      此命令不会产生任何输出。

    • 创建 zun 服务实体

      $ openstack service create --name zun \
          --description "Container Service" container
      +-------------+----------------------------------+
      | Field       | Value                            |
      +-------------+----------------------------------+
      | description | Container Service                |
      | enabled     | True                             |
      | id          | 727841c6f5df4773baa4e8a5ae7d72eb |
      | name        | zun                              |
      | type        | container                        |
      +-------------+----------------------------------+
      
  4. 创建容器服务 API 端点

    $ openstack endpoint create --region RegionOne \
        container public http://controller:9517/v1
    +--------------+-----------------------------------------+
    | Field        | Value                                   |
    +--------------+-----------------------------------------+
    | enabled      | True                                    |
    | id           | 3f4dab34624e4be7b000265f25049609        |
    | interface    | public                                  |
    | region       | RegionOne                               |
    | region_id    | RegionOne                               |
    | service_id   | 727841c6f5df4773baa4e8a5ae7d72eb        |
    | service_name | zun                                     |
    | service_type | container                               |
    | url          | http://controller:9517/v1               |
    +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
        container internal http://controller:9517/v1
    +--------------+-----------------------------------------+
    | Field        | Value                                   |
    +--------------+-----------------------------------------+
    | enabled      | True                                    |
    | id           | 9489f78e958e45cc85570fec7e836d98        |
    | interface    | internal                                |
    | region       | RegionOne                               |
    | region_id    | RegionOne                               |
    | service_id   | 727841c6f5df4773baa4e8a5ae7d72eb        |
    | service_name | zun                                     |
    | service_type | container                               |
    | url          | http://controller:9517/v1               |
    +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
        container admin http://controller:9517/v1
    +--------------+-----------------------------------------+
    | Field        | Value                                   |
    +--------------+-----------------------------------------+
    | enabled      | True                                    |
    | id           | 76091559514b40c6b7b38dde790efe99        |
    | interface    | admin                                   |
    | region       | RegionOne                               |
    | region_id    | RegionOne                               |
    | service_id   | 727841c6f5df4773baa4e8a5ae7d72eb        |
    | service_name | zun                                     |
    | service_type | container                               |
    | url          | http://controller:9517/v1               |
    +--------------+-----------------------------------------+
    

安装和配置组件

  1. 创建 zun 用户和必要的目录

    • 创建用户

      # groupadd --system zun
      # useradd --home-dir "/var/lib/zun" \
            --create-home \
            --system \
            --shell /bin/false \
            -g zun \
            zun
      
    • 创建目录

      # mkdir -p /etc/zun
      # chown zun:zun /etc/zun
      
  2. 安装以下依赖项

    对于 Ubuntu,运行

    # apt-get install python3-pip git
    

    对于 CentOS,运行

    # yum install python3-pip git python3-devel libffi-devel gcc openssl-devel
    
  3. 克隆并安装 zun

    # cd /var/lib/zun
    # git clone https://opendev.org/openstack/zun.git
    # chown -R zun:zun zun
    # git config --global --add safe.directory /var/lib/zun/zun
    # cd zun
    # pip3 install -r requirements.txt
    # python3 setup.py install
    
  4. 生成示例配置文件

    # su -s /bin/sh -c "oslo-config-generator \
        --config-file etc/zun/zun-config-generator.conf" zun
    # su -s /bin/sh -c "cp etc/zun/zun.conf.sample \
        /etc/zun/zun.conf" zun
    
  5. 复制 api-paste.ini

    # su -s /bin/sh -c "cp etc/zun/api-paste.ini /etc/zun" zun
    
  6. 编辑 /etc/zun/zun.conf

    • [DEFAULT] 部分中,配置 RabbitMQ 消息队列访问

      [DEFAULT]
      ...
      transport_url = rabbit://openstack:RABBIT_PASS@controller
      

      RABBIT_PASS 替换为您为 RabbitMQ 中的 openstack 帐户选择的密码。

    • [api] 部分,配置 Zun API 服务器将要监听的 IP 地址

      [api]
      ...
      host_ip = 10.0.0.11
      port = 9517
      

      如果控制器节点的管理接口 IP 地址不同,请将 10.0.0.11 替换为该 IP 地址。

    • [database] 部分,配置数据库访问

      [database]
      ...
      connection = mysql+pymysql://zun:ZUN_DBPASS@controller/zun
      

      ZUN_DBPASS 替换为您为 zun 数据库选择的密码。

    • [keystone_auth] 部分,配置身份服务访问

      [keystone_auth]
      memcached_servers = controller:11211
      www_authenticate_uri = http://controller:5000
      project_domain_name = default
      project_name = service
      user_domain_name = default
      password = ZUN_PASS
      username = zun
      auth_url = http://controller:5000
      auth_type = password
      auth_version = v3
      auth_protocol = http
      service_token_roles_required = True
      endpoint_type = internalURL
      
    • [keystone_authtoken] 部分中,配置 Identity 服务访问

      [keystone_authtoken]
      ...
      memcached_servers = controller:11211
      www_authenticate_uri = http://controller:5000
      project_domain_name = default
      project_name = service
      user_domain_name = default
      password = ZUN_PASS
      username = zun
      auth_url = http://controller:5000
      auth_type = password
      auth_version = v3
      auth_protocol = http
      service_token_roles_required = True
      endpoint_type = internalURL
      

      将 ZUN_PASS 替换为您在身份服务中为 zun 用户选择的密码。

    • [oslo_concurrency] 部分,配置 lock_path

      [oslo_concurrency]
      ...
      lock_path = /var/lib/zun/tmp
      
    • [oslo_messaging_notifications] 部分,配置 driver

      [oslo_messaging_notifications]
      ...
      driver = messaging
      
    • [websocket_proxy] 部分,配置 websocket 代理将要监听的 IP 地址

      [websocket_proxy]
      ...
      wsproxy_host = 10.0.0.11
      wsproxy_port = 6784
      base_url = ws://controller:6784/
      

      注意

      最终用户将使用此 base_url 访问其容器的控制台,因此请确保您的预期用户可以访问此 URL,并且防火墙未阻止端口 6784

      如果控制器节点的管理接口 IP 地址不同,请将 10.0.0.11 替换为该 IP 地址。

    注意

    确保 /etc/zun/zun.conf 仍然具有正确的权限。 您可以使用以下命令再次设置权限:

    # chown zun:zun /etc/zun/zun.conf

  7. 填充 Zun 数据库

    # su -s /bin/sh -c "zun-db-manage upgrade" zun
    

完成安装

  1. 创建一个 upstart 配置文件,可以命名为 /etc/systemd/system/zun-api.service

    注意

    CentOS 可能会将二进制文件安装到 /usr/bin/。 如果是这样,请在以下示例文件中将 /usr/local/bin/ 目录替换为正确的目录。

    [Unit]
    Description = OpenStack Container Service API
    
    [Service]
    ExecStart = /usr/local/bin/zun-api
    User = zun
    
    [Install]
    WantedBy = multi-user.target
    
  2. 创建一个 upstart 配置文件,可以命名为 /etc/systemd/system/zun-wsproxy.service

    [Unit]
    Description = OpenStack Container Service Websocket Proxy
    
    [Service]
    ExecStart = /usr/local/bin/zun-wsproxy
    User = zun
    
    [Install]
    WantedBy = multi-user.target
    
  3. 启用并启动 zun-api 和 zun-wsproxy

    # systemctl enable zun-api
    # systemctl enable zun-wsproxy
    
    # systemctl start zun-api
    # systemctl start zun-wsproxy
    
  4. 验证 zun-api 和 zun-wsproxy 服务是否正在运行

    # systemctl status zun-api
    # systemctl status zun-wsproxy