从源代码安装和配置

本节描述了如何从源代码安装和配置容器基础设施管理服务。

先决条件

在安装和配置容器基础设施管理服务之前,您必须创建数据库、服务凭证和 API 端点。

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

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

      # mysql
      
    • 创建 magnum 数据库

      CREATE DATABASE magnum;
      
    • 授予对 magnum 数据库的适当访问权限

      GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'localhost' \
        IDENTIFIED BY 'MAGNUM_DBPASS';
      GRANT ALL PRIVILEGES ON magnum.* TO 'magnum'@'%' \
        IDENTIFIED BY 'MAGNUM_DBPASS';
      

      MAGNUM_DBPASS 替换为合适的密码。

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

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

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

    • 创建 magnum 用户

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

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

      注意

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

    • 创建 magnum 服务实体

      $ openstack service create --name magnum \
        --description "OpenStack Container Infrastructure Management Service" \
        container-infra
      +-------------+-------------------------------------------------------+
      | Field       | Value                                                 |
      +-------------+-------------------------------------------------------+
      | description | OpenStack Container Infrastructure Management Service |
      | enabled     | True                                                  |
      | id          | 194faf83e8fd4e028e5ff75d3d8d0df2                      |
      | name        | magnum                                                |
      | type        | container-infra                                       |
      +-------------+-------------------------------------------------------+
      
  4. 创建容器基础设施管理服务 API 端点

    $ openstack endpoint create --region RegionOne \
      container-infra public http://CONTROLLER_IP:9511/v1
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | cb137e6366ad495bb521cfe92d8b8858 |
    | interface    | public                           |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 0f7f62a1f1a247d2a4cb237642814d0e |
    | service_name | magnum                           |
    | service_type | container-infra                  |
    | url          | http://CONTROLLER_IP:9511/v1     |
    +--------------+----------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      container-infra internal http://CONTROLLER_IP:9511/v1
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 17cbc3b6f51449a0a818118d6d62868d |
    | interface    | internal                         |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 0f7f62a1f1a247d2a4cb237642814d0e |
    | service_name | magnum                           |
    | service_type | container-infra                  |
    | url          | http://CONTROLLER_IP:9511/v1     |
    +--------------+----------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      container-infra admin http://CONTROLLER_IP:9511/v1
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 30f8888e6b6646d7b5cd14354c95a684 |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 0f7f62a1f1a247d2a4cb237642814d0e |
    | service_name | magnum                           |
    | service_type | container-infra                  |
    | url          | http://CONTROLLER_IP:9511/v1     |
    +--------------+----------------------------------+
    

    CONTROLLER_IP 替换为 magnum 监听的 IP 地址。或者,您可以使用计算实例可访问的主机名。

  5. Magnum 需要身份服务中的额外信息来管理 COE 集群。要添加此信息,请完成以下步骤

    • 创建包含项目和用户的 magnum

      $ openstack domain create --description "Owns users and projects \
        created by magnum" magnum
        +-------------+-------------------------------------------+
        | Field       | Value                                     |
        +-------------+-------------------------------------------+
        | description | Owns users and projects created by magnum |
        | enabled     | True                                      |
        | id          | 66e0469de9c04eda9bc368e001676d20          |
        | name        | magnum                                    |
        +-------------+-------------------------------------------+
      
    • 创建 magnum_domain_admin 用户来管理 magnum 域中的项目和用户

      $ openstack user create --domain magnum --password-prompt \
        magnum_domain_admin
        User Password:
        Repeat User Password:
        +-----------+----------------------------------+
        | Field     | Value                            |
        +-----------+----------------------------------+
        | domain_id | 66e0469de9c04eda9bc368e001676d20 |
        | enabled   | True                             |
        | id        | 529b81cf35094beb9784c6d06c090c2b |
        | name      | magnum_domain_admin              |
        +-----------+----------------------------------+
      
    • admin 角色添加到 magnum 域中的 magnum_domain_admin 用户,以启用 magnum_domain_admin 用户进行管理权限

      $ openstack role add --domain magnum --user-domain magnum --user \
        magnum_domain_admin admin
      

      注意

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

安装和配置组件

  1. 从源代码安装 Magnum

    1. 安装特定于操作系统的先决条件

      • Ubuntu 16.04 (xenial) 或更高版本

        # apt update
        # apt install python-dev libssl-dev libxml2-dev \
                      libmysqlclient-dev libxslt-dev libpq-dev git \
                      libffi-dev gettext build-essential
        
      • CentOS 7

        # dnf install python-devel openssl-devel mariadb-devel \
                      libxml2-devel libxslt-devel postgresql-devel git \
                      libffi-devel gettext gcc
        
      • Fedora 21 / RHEL 7

        # dnf install python-devel openssl-devel mysql-devel \
                      libxml2-devel libxslt-devel postgresql-devel git \
                      libffi-devel gettext gcc
        
      • Fedora 22 或更高版本

        # dnf install python-devel openssl-devel mysql-devel \
                      libxml2-devel libxslt-devel postgresql-devel git \
                      libffi-devel gettext gcc
        
    2. 创建 magnum 用户和必要的目录

      • 创建用户

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

        # mkdir -p /var/log/magnum
        # mkdir -p /etc/magnum
        
      • 设置目录的所有权

        # chown magnum:magnum /var/log/magnum
        # chown magnum:magnum /var/lib/magnum
        # chown magnum:magnum /etc/magnum
        
    3. 安装 virtualenv 和 Python 先决条件

      • 安装 virtualenv 并为 Magnum 的安装创建一个

        # easy_install -U virtualenv
        # su -s /bin/sh -c "virtualenv /var/lib/magnum/env" magnum
        
      • 安装 Python 先决条件

        # su -s /bin/sh -c "/var/lib/magnum/env/bin/pip install tox pymysql \
          python-memcached" magnum
        
    4. 克隆并安装 Magnum

      # cd /var/lib/magnum
      # git clone https://opendev.org/openstack/magnum
      # chown -R magnum:magnum magnum
      # cd magnum
      # su -s /bin/sh -c "/var/lib/magnum/env/bin/pip install -r requirements.txt" magnum
      # su -s /bin/sh -c "/var/lib/magnum/env/bin/python setup.py install" magnum
      
    5. 复制 api-paste.ini

      # su -s /bin/sh -c "cp etc/magnum/api-paste.ini /etc/magnum" magnum
      
    6. 生成示例配置文件

      # su -s /bin/sh -c "/var/lib/magnum/env/bin/tox -e genconfig" magnum
      # su -s /bin/sh -c "cp etc/magnum/magnum.conf.sample /etc/magnum/magnum.conf" magnum
      
    1. 可选地,如果您想自定义 Magnum API 访问的策略,可以生成一个示例策略文件,将其放入 /etc/magnum 文件夹进行进一步修改

      # su -s /bin/sh -c "/var/lib/magnum/env/bin/tox -e genpolicy" magnum
      # su -s /bin/sh -c "cp etc/magnum/policy.yaml.sample /etc/magnum/policy.yaml" magnum
      
  1. 编辑 /etc/magnum/magnum.conf 文件

    • [api] 部分,配置主机

      [api]
      ...
      host = CONTROLLER_IP
      

      CONTROLLER_IP 替换为您希望 magnum api 监听的 IP 地址。

    • [certificates] 部分,选择 barbican(或者,如果您未安装 barbican,则选择 x509keypair

      • 使用 barbican 存储证书

        [certificates]
        ...
        cert_manager_type = barbican
        

      重要提示

      Barbican 建议用于生产环境。

      • 要将 x509 证书存储在 magnum 的数据库中

        [certificates]
        ...
        cert_manager_type = x509keypair
        
    • [cinder_client] 部分,配置区域名称

      [cinder_client]
      ...
      region_name = RegionOne
      
    • [database] 部分,配置数据库访问

      [database]
      ...
      connection = mysql+pymysql://magnum:MAGNUM_DBPASS@controller/magnum
      

      MAGNUM_DBPASS 替换为您为 magnum 数据库选择的密码。

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

      [keystone_authtoken]
      ...
      memcached_servers = controller:11211
      auth_version = v3
      www_authenticate_uri = http://controller:5000/v3
      project_domain_id = default
      project_name = service
      user_domain_id = default
      password = MAGNUM_PASS
      username = magnum
      auth_url = http://controller:5000
      auth_type = password
      admin_user = magnum
      admin_password = MAGNUM_PASS
      admin_tenant_name = service
      
      [trust]
      ...
      trustee_domain_name = magnum
      trustee_domain_admin_name = magnum_domain_admin
      trustee_domain_admin_password = DOMAIN_ADMIN_PASS
      trustee_keystone_interface = KEYSTONE_INTERFACE
      

      将 MAGNUM_PASS 替换为您在身份服务中为 magnum 用户选择的密码,并将 DOMAIN_ADMIN_PASS 替换为您为 magnum_domain_admin 用户选择的密码。

      将 KEYSTONE_INTERFACE 替换为 publicinternal,具体取决于您的网络配置。如果您的实例无法访问内部 keystone 端点(这通常发生在生产环境中),则应将其设置为 public。默认设置为 public

    • [oslo_messaging_notifications] 部分,配置 driver

      [oslo_messaging_notifications]
      ...
      driver = messaging
      
    • [DEFAULT] 部分中,配置 RabbitMQ 消息队列访问

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

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

  • 此外,编辑 /etc/magnum/magnum.conf 文件

    • [oslo_concurrency] 部分,配置 lock_path

      [oslo_concurrency]
      ...
      lock_path = /var/lib/magnum/tmp
      
    • 如果您决定在 1.e 中自定义 Magnum 策略,那么在 [oslo_policy] 部分,配置 policy_file

      [oslo_policy]
      ...
      policy_file = /etc/magnum/policy.yaml
      

    注意

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

    # chown magnum:magnum /etc/magnum/magnum.conf

  1. 填充 Magnum 数据库

    # su -s /bin/sh -c "/var/lib/magnum/env/bin/magnum-db-manage upgrade" magnum
    
  2. 为日志轮转设置 magnum

    # cd /var/lib/magnum/magnum
    # cp doc/examples/etc/logrotate.d/magnum.logrotate /etc/logrotate.d/magnum
    

完成安装

  1. 创建 init 脚本和服务

    • Ubuntu 16.04 或更高版本,Fedora 21 或更高版本/RHEL 7/CentOS 7

      # cd /var/lib/magnum/magnum
      # cp doc/examples/etc/systemd/system/magnum-api.service \
        /etc/systemd/system/magnum-api.service
      # cp doc/examples/etc/systemd/system/magnum-conductor.service \
        /etc/systemd/system/magnum-conductor.service
      
  2. 启动 magnum-api 和 magnum-conductor

    • Ubuntu 16.04 或更高版本,Fedora 21 或更高版本/RHEL 7/CentOS 7

      # systemctl enable magnum-api
      # systemctl enable magnum-conductor
      
      # systemctl start magnum-api
      # systemctl start magnum-conductor
      
  3. 验证 magnum-api 和 magnum-conductor 服务是否正在运行

    • Ubuntu 16.04 或更高版本,Fedora 21 或更高版本/RHEL 7/CentOS 7

      # systemctl status magnum-api
      # systemctl status magnum-conductor
      

安装命令行客户端

  1. 安装特定于操作系统的先决条件

    • Fedora 21/RHEL 7/CentOS 7

      # dnf install python-devel openssl-devel python-virtualenv \
                    libffi-devel git gcc
      
    • Fedora 22 或更高版本

      # dnf install python-devel openssl-devel python-virtualenv \
                    libffi-devel git gcc
      
    • Ubuntu

      # apt update
      # apt install python-dev libssl-dev python-virtualenv \
                    libffi-dev git gcc
      
  2. 在虚拟环境中安装客户端

    $ cd ~
    $ git clone https://opendev.org/openstack/python-magnumclient
    $ cd python-magnumclient
    $ virtualenv .magnumclient-env
    $ .magnumclient-env/bin/pip install -r requirements.txt
    $ .magnumclient-env/bin/python setup.py install
    
  3. 现在,您可以将客户端导出到您的 PATH 中

    $ export PATH=$PATH:${PWD}/.magnumclient-env/bin/magnum
    

    注意

    命令行客户端可以安装在控制器节点上,也可以安装在与服务不同的主机上。将其安装为非 root 用户是一种良好的做法。