OpenStack-Ansibleで構築するOpenStack環境

執筆者 : 森 克彦


1. はじめに

OpenStackはIaaS環境を構築するためのソフトウェア群です。簡単にAWSの様なクラウドサービス環境を作成できます。 ここでは、OpenStack-Ansibleを用いてOpenStackの環境構築を示したいと思います。前提知識としてAnsibleとOpenStackなどの知識が必要ですが、Webで詳しく説明している資料などがありますので、ここでは割愛して実際の構築の流れを示したいと思います。

ここで使用したソフトウェアのバージョンは以下の通りです。

ソフトウェア  バージョン
Openstack Yoga
Openstack-Ansible 25.0.0
Python 3.10.4
Ansible 2.12.6

環境構築用のマシンのスペックは以下の通りです。1台のAnsible実行ノードと2台のターゲットノードで環境構築します。

ansible実行ノード: 1台
    OS: ubuntu 22.04 
    CPU: core 2
    Memory: 4GB
    Disk:  30GB
    NIC:   1
コントローラノード: 1台 
    OS: ubuntu 22.04 
    CPU: core 16
    Memory: 24GB
    Disk:  1TB (ルート) 、2TB x 4台 (イメージとボリューム用)
    NIC:   1
ワーカーノード: 1台
    OS: ubuntu 22.04 
    CPU: core 16
    Memory: 24GB
    Disk:  1TB (ルート)
    NIC:   1

ネットワーク構成は以下の通りです。

ホスト名 用途 アクセス用IPアドレス Management 用IPアドレス VXLAN 用IPアドレス Storage 用IPアドレス
vac0w ansible実行ノード 172.17.31.10/16 172.29.236.9/22

vac1w コントローラノード 172.17.31.11/16 172.29.236.10/22 172.29.240.10/22 172.29.244.10/22
vac2w ワーカーノード 172.17.31.12/16 172.29.236.11/22 172.29.240.11/22 172.29.244.11/22

ネットワークの構成図

インストールするコンポーネントは以下です。

ホスト名 コンポーネント
vac0w python3, ansible
vac1w keystone, nova, neutron, glance, cinderv3, placement, heat-cfn, heat
vac2w nova-compute, neutron-l2-agent

構成図

2. Ansible実行ノードの準備

Ansible playbooksを実行するノード(以降vac0wとする)を用意します。 OSのインストールはSSHのみ有効な最小インストールです。

ネットワークを設定

OSインストール後は、ファイル/etc/netplan/less 00-installer-config.yamlを以下のように編集して保存します。

network:
    version: 2
    ethernets:
        enp1s0:
            dhcp4: false
    vlans:
        enp1s0.10:
            id: 10
            link: enp1s0
    bridges:
        br-mgmt:
            addresses:
            - 172.29.236.9/22
            interfaces:
            - enp1s0.10
            mtu: 1500
        br-ext:
            addresses:
            - 172.17.31.10/16
            interfaces:
            - enp1s0
            mtu: 1500
            gateway4: 172.17.0.254
            nameservers:
                addresses:
                - 172.18.1.10

以下を実行して設定を反映します。

# netplan apply

パッケージを更新

# apt update && apt dist-upgrade

再起動後に、以下のパッケージをインストールします。

# apt install build-essential git chrony openssh-server python3-dev sudo

ssh

パスフレーズを含めないSSHキーペアを作成します。

OpenStack Ansibleのインストール

以下を実行してopenstack-ansibleをダウンロードします。

# git clone -b 25.0.0 https://opendev.org/openstack/openstack-ansible /opt/openstack-ansible

/opt/openstack-ansible/scriptsに移動して以下を実行します。

# ./bootstrap-ansible.sh

PLAY RECAP ***************************************************************************************************************************************
localhost                  : ok=9    changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

System is bootstrapped and ready for use.

3. ターゲットノードの準備

コントローラノード(以降vac1wとする)とワーカーノード(以降vac2wとする)を用意します。 OSのインストールはsshのみ有効な最小インストールです。

ネットワークを設定

OSインストール後は、ファイル/etc/netplan/00-installer-config.yamlを以下のように編集して保存します。 以下はvac1wの例ですが、vac2wも同様でIPアドレスのみ異なります。

network:
    version: 2
    ethernets:
        enp1s0:
            dhcp4: false
    vlans:
        enp1s0.10:
            id: 10
            link: enp1s0
        enp1s0.20:
            id: 20
            link: enp1s0
        enp1s0.30:
            id: 30
            link: enp1s0
        enp1s0.40:
            id: 40
            link: enp1s0
    bridges:
        br-mgmt:
            addresses:
            - 172.29.236.10/22
            interfaces:
            - enp1s0.10
            mtu: 1500
        br-storage:
            addresses:
            - 172.29.244.10/22
            interfaces:
            - enp1s0.20
            mtu: 1500
        br-vxlan:
            addresses:
            - 172.29.240.10/22
            interfaces:
            - enp1s0.30
            mtu: 1500
        br-ext:
            addresses:
            - 172.17.31.11/16
            interfaces:
            - enp1s0
            gateway4: 172.17.0.254
            nameservers:
                addresses:
                - 172.18.1.10
            mtu: 1500
        br-vlan:
            interfaces:
            - enp1s0.40
            mtu: 1500

以下を実行して設定を反映します。

# netplan apply

パッケージを更新

以下のパッケージをインストールしてから、再起動します。

# apt update
# apt dist-upgrade
# apt install bridge-utils debootstrap openssh-server tcpdump vlan python3
# apt install linux-modules-extra-$(uname -r)
# reboot

sshの設定

vac0wで作成した公開鍵を/root/.ssh/authorized_keysに追加します。

イメージ用ディスクの設定(vac1wのみ)

vac1wにて、1台のディスクをイメージ保存用にするため、以下のようにフォーマットします。

# fdisk /dev/nvme0n1
# mkfs.ext4 /dev/nvme0n1p1

vac1wにて、以下のようにマウントします。再起動も自動マウントするよう/etc/fstabを編集保存します。

# mkdir /image_disk
# mount  /dev/nvme0n1p1 /image_disk
# mkdir /image_disk/glance
# ln -s /image_disk/glance/ /var/lib/glance

ボリューム用ディスクの設定(vac1wのみ)

vac1wにて、3台のディスクをボリューム保存用にするため、以下のようにRaid5を設定します。

# mdadm --create /dev/md/Raid5Array --level=raid5 --raid-devices=3 --chunk=128 --verbose /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: size set to 1953382400K
mdadm: automatically enabling write-intent bitmap on large array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/Raid5Array started.

以下のようにLVMでフォーマットします。

# sgdisk -g /dev/md/Raid5Array
Creating new GPT entries in memory.
The operation has completed successfully.

# fdisk /dev/md/Raid5Array

Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition number (1-128, default 1): 1
First sector (34-7813529566, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7813529566, default 7813529566):

Created a new partition 1 of type 'Linux filesystem' and of size 3.6 TiB.

Command (m for help): t
Selected partition 1
Partition type or alias (type L to list all): 8e
Type of partition 1 is unchanged: Linux filesystem.

Command (m for help): p
Disk /dev/md/Raid5Array: 3.64 TiB, 4000527155200 bytes, 7813529600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 131072 bytes / 262144 bytes
Disklabel type: gpt
Disk identifier: 8A2B333A-D882-496D-9B75-FF2F27E9972E

Device              Start        End    Sectors  Size Type
/dev/md/Raid5Array1  2048 7813529566 7813527519  3.6T Linux filesystem

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

以下のようにpvとvgを作成します。

# pvcreate --metadatasize 2048 /dev/md/Raid5Array1
Physical volume "/dev/md/Raid5Array1" successfully created.

# vgcreate cinder-volumes /dev/md/Raid5Array1
Volume group "cinder-volumes" successfully created

4. config yamlの準備

vac0wにて、以下のようにファイルをコピーしてから、/etc/openstack_deployに移動します。

# cp -a /opt/openstack-ansible/etc/openstack_deploy /etc/openstack_deploy
# cd /etc/openstack_deploy

ユーザが編集する必要なファイルはすべてこの/etc/openstack_deployに集約されています。 このディレクトリの中は以下のような構成になっています。

openstack_user_config.yml : 
    ターゲットノードの構成とサービスの設定をするファイル
user_secrets.yml : 
    各コンポーネントのパスワードを設定するファイル(例えば、mysqlのパスワード、rabbitmqのパスワードなど)
user_variables.yml :  
    細かいオプションを設定するファイル
ansible_facts : 
    ターゲットノードに関する情報のキャッシュファイルを保存するディレクトリ

まず、openstack_user_config.ymlファイルを以下のように編集して保存します。

---
cidr_networks:
  container: 172.29.236.0/22
  tunnel: 172.29.240.0/22
  storage: 172.29.244.0/22

used_ips:
  - "172.29.236.1,172.29.236.50"
  - "172.29.240.1,172.29.240.50"
  - "172.29.244.1,172.29.244.50"

global_overrides:
  external_lb_vip_address: 172.17.31.11
  internal_lb_vip_address: 172.29.236.10
  management_bridge: "br-mgmt"
  provider_networks:
    - network:
        container_bridge: "br-mgmt"
        container_type: "veth"
        container_interface: "eth1"
        ip_from_q: "container"
        type: "raw"
        group_binds:
          - all_containers
          - hosts
        is_container_address: true
    - network:
        container_bridge: "br-vxlan"
        container_type: "veth"
        container_interface: "eth10"
        ip_from_q: "tunnel"
        type: "vxlan"
        range: "1:1000"
        net_name: "vxlan"
        group_binds:
          - neutron_linuxbridge_agent
    - network:
        host_bind_override: "enp1s0"
        type: "flat"
        net_name: "provider"
        group_binds:
          - neutron_linuxbridge_agent
    - network:
        container_bridge: "br-vlan"
        container_type: "veth"
        container_interface: "eth11"
        type: "vlan"
        range: "101:200,301:400"
        net_name: "vlan"
        group_binds:
          - neutron_linuxbridge_agent
    - network:
        container_bridge: "br-storage"
        container_type: "veth"
        container_interface: "eth2"
        ip_from_q: "storage"
        type: "raw"
        group_binds:
          - glance_api
          - cinder_api
          - cinder_volume
          - nova_compute

###
### Infrastructure
###

# galera, memcache, rabbitmq, utility
shared-infra_hosts:
  infra1:
    ip: 172.29.236.10

# repository (apt cache, python packages, etc)
repo-infra_hosts:
  infra1:
    ip: 172.29.236.10

# load balancer
haproxy_hosts:
  infra1:
    ip: 172.29.236.10

###
### OpenStack
###

# keystone
identity_hosts:
  infra1:
    ip: 172.29.236.10

# cinder api services
storage-infra_hosts:
  infra1:
    ip: 172.29.236.10

# glance
image_hosts:
  infra1:
    ip: 172.29.236.10

# placement
placement-infra_hosts:
  infra1:
    ip: 172.29.236.10

# nova api, conductor, etc services
compute-infra_hosts:
  infra1:
    ip: 172.29.236.10

# heat
orchestration_hosts:
  infra1:
    ip: 172.29.236.10

# horizon
dashboard_hosts:
  infra1:
    ip: 172.29.236.10

# neutron server, agents (L3, etc)
network_hosts:
  infra1:
    ip: 172.29.236.10

# nova hypervisors
compute_hosts:
  compute1:
    ip: 172.29.236.11

# cinder storage host (LVM-backed)
storage_hosts:
  infra1:
    ip: 172.29.236.10
    container_vars:
      cinder_backends:
        limit_container_types: cinder_volume
        lvm:
          volume_group: cinder-volumes
          volume_driver: cinder.volume.drivers.lvm.LVMVolumeDriver
          volume_backend_name: LVM_iSCSI
          iscsi_ip_address: "172.29.236.10"

上記の設定では、cidr_networksはそれぞれネットワークのレンジを入れています。 used_ipsは使用するIPアドレスを入れています。provider_networksはターゲットノードに設定したネットワークを入れています。 xxx_hostsはOpenStackのコンポーネントを指して、さらにその下の infra1はコントローラノード、compute1はコンピュートノードを指していて、それぞれのipにはアクセスIPアドレスではなくManagement 用IPアドレスを入れます。

また、オプションでLXCコンテナを使わずに直接ターゲットノードに動かしたい場合は、/opt/openstack-ansible/inventory/env.d/*.ymlを以下のように編集します。 glanceの例

container_skel:
  cinder_api_container:
    belongs_to:
      - storage-infra_containers
    contains:
      - cinder_api
      - cinder_scheduler
    properties:
      is_metal: true

次に、各サービスのパスワードを自動生成します。

# ./scripts/pw-token-gen.py --file /etc/openstack_deploy/user_secrets.yml
Creating backup file [ /etc/openstack_deploy/user_secrets.yml.tar ]
Operation Complete, [ /etc/openstack_deploy/user_secrets.yml ] is ready

最後に、/etc/openstack_deploy/user_variables.ymlファイルの中にinstall_methodをデフォルトのsourceからdistroに変更します。 sourceはソースコード、distroはパッケージをインストールします。柔軟に運用したい場合はソースコードを、安定運用したい場合はパッケージを入れます。 これはAnsible実行後に変更できないため、最初に決定する必要があります。

5. playbooksの実行

vac0wにて、/opt/openstack-ansible/playbooksに移動して以下を実行します。

# openstack-ansible setup-hosts.yml


PLAY RECAP *****************************************************************************************************************************************************************************************************************************
compute1                   : ok=127  changed=1    unreachable=0    failed=0    skipped=29   rescued=0    ignored=0
infra1                     : ok=166  changed=1    unreachable=0    failed=0    skipped=28   rescued=0    ignored=0
infra1_cinder_api_container-49348ff2 : ok=76   changed=4    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
infra1_galera_container-326019ca : ok=81   changed=11   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
infra1_glance_container-d953f38e : ok=76   changed=4    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
infra1_heat_api_container-e9249c0b : ok=78   changed=11   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
infra1_horizon_container-d5efc521 : ok=76   changed=4    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
infra1_keystone_container-a0beba47 : ok=76   changed=4    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
infra1_memcached_container-ca097440 : ok=76   changed=4    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
infra1_neutron_server_container-71fb31c1 : ok=78   changed=11   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
infra1_nova_api_container-a0dea846 : ok=78   changed=11   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
infra1_placement_container-bd04d7a3 : ok=76   changed=4    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
infra1_rabbit_mq_container-2212204e : ok=76   changed=4    unreachable=0    failed=0    skipped=7    rescued=0    ignored=0
infra1_repo_container-d1a84598 : ok=78   changed=11   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
infra1_utility_container-b412a52d : ok=78   changed=11   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
localhost                  : ok=16   changed=0    unreachable=0    failed=0    skipped=13   rescued=0    ignored=0

EXIT NOTICE [Playbook execution success] **************************************

上記のように[Playbook execution success]が表示されたら成功です。次に以下を実行します。

# openstack-ansible setup-infrastructure.yml


PLAY RECAP ******************************************************************************************************************************************************************************************************
compute1                   : ok=0    changed=0    unreachable=0    failed=0    skipped=10   rescued=0    ignored=0
infra1                     : ok=49   changed=28   unreachable=0    failed=0    skipped=31   rescued=0    ignored=0
infra1_galera_container-9fe6dc32 : ok=75   changed=35   unreachable=0    failed=0    skipped=11   rescued=0    ignored=0
infra1_memcached_container-d63c0201 : ok=21   changed=12   unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
infra1_rabbit_mq_container-79020d63 : ok=73   changed=38   unreachable=0    failed=0    skipped=12   rescued=0    ignored=0
infra1_repo_container-594ee06a : ok=58   changed=32   unreachable=0    failed=0    skipped=22   rescued=0    ignored=0
infra1_utility_container-76639f23 : ok=35   changed=14   unreachable=0    failed=0    skipped=16   rescued=0    ignored=0

EXIT NOTICE [Playbook execution success] **************************************

上記のように[Playbook execution success]が表示されたら成功です。最後に以下を実行します。

# openstack-ansible setup-openstack.yml


PLAY RECAP ************************************************************************************************************************************************************
compute1                   : ok=147  changed=68   unreachable=0    failed=0    skipped=84   rescued=0    ignored=0
infra1                     : ok=114  changed=57   unreachable=0    failed=0    skipped=84   rescued=0    ignored=0
infra1_cinder_api_container-13be6a9d : ok=97   changed=50   unreachable=0    failed=0    skipped=51   rescued=0    ignored=0
infra1_glance_container-f1eb2d67 : ok=73   changed=37   unreachable=0    failed=0    skipped=39   rescued=0    ignored=0
infra1_heat_api_container-0c83c3c8 : ok=89   changed=50   unreachable=0    failed=0    skipped=53   rescued=0    ignored=0
infra1_horizon_container-4c1f9c61 : ok=41   changed=25   unreachable=0    failed=0    skipped=8    rescued=0    ignored=0
infra1_keystone_container-7755937d : ok=124  changed=62   unreachable=0    failed=0    skipped=53   rescued=0    ignored=0
infra1_neutron_server_container-9fdee84d : ok=86   changed=47   unreachable=0    failed=0    skipped=45   rescued=0    ignored=0
infra1_nova_api_container-3794d0e0 : ok=118  changed=57   unreachable=0    failed=0    skipped=68   rescued=0    ignored=0
infra1_placement_container-856ba1ce : ok=50   changed=30   unreachable=0    failed=0    skipped=33   rescued=0    ignored=0
infra1_utility_container-76639f23 : ok=2    changed=0    unreachable=0    failed=0    skipped=5    rescued=0    ignored=0
localhost                  : ok=3    changed=3    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

EXIT NOTICE [Playbook execution success] **************************************
===============================================================================

上記のように[Playbook execution success]が表示されたら成功です。

6. OpenStackのチェック

vac1wにログインして以下のようにLXCコンテナが起動していることを確認できます。 neutron-l2-agentやnova-computeなどの例外を除いて、OpenStackの各コンポーネントは各コンテナ上で動作しています。

# lxc-ls --fancy
NAME                                     STATE   AUTOSTART GROUPS            IPV4                                       IPV6 UNPRIVILEGED
infra1_cinder_api_container-13be6a9d     RUNNING 1         onboot, openstack 10.0.3.242, 172.29.237.166, 172.29.246.165 -    false
infra1_galera_container-9fe6dc32         RUNNING 1         onboot, openstack 10.0.3.78, 172.29.239.32                   -    false
infra1_glance_container-f1eb2d67         RUNNING 1         onboot, openstack 10.0.3.226, 172.29.238.112, 172.29.246.35  -    false
infra1_heat_api_container-0c83c3c8       RUNNING 1         onboot, openstack 10.0.3.151, 172.29.237.105                 -    false
infra1_horizon_container-4c1f9c61        RUNNING 1         onboot, openstack 10.0.3.221, 172.29.236.141                 -    false
infra1_keystone_container-7755937d       RUNNING 1         onboot, openstack 10.0.3.253, 172.29.238.206                 -    false
infra1_memcached_container-d63c0201      RUNNING 1         onboot, openstack 10.0.3.231, 172.29.238.237                 -    false
infra1_neutron_server_container-9fdee84d RUNNING 1         onboot, openstack 10.0.3.152, 172.29.238.177                 -    false
infra1_nova_api_container-3794d0e0       RUNNING 1         onboot, openstack 10.0.3.72, 172.29.238.21                   -    false
infra1_placement_container-856ba1ce      RUNNING 1         onboot, openstack 10.0.3.204, 172.29.239.45                  -    false
infra1_rabbit_mq_container-79020d63      RUNNING 1         onboot, openstack 10.0.3.249, 172.29.239.49                  -    false
infra1_repo_container-594ee06a           RUNNING 1         onboot, openstack 10.0.3.108, 172.29.237.180                 -    false
infra1_utility_container-76639f23        RUNNING 1         onboot, openstack 10.0.3.38, 172.29.237.204                  -    false
ubuntu-22-amd64                          STOPPED 0         -                 -                                          -    false

上記のコンテナの中で名前がinfra1_utility_container-xxxがOpenStack CLIを操作するコンテナです。 以下のようにコンテナの中に入ってOpenStackの状態確認できます。

# lxc-attach infra1_utility_container-76639f23
root@infra1-utility-container-76639f23:~# . openrc

以下のように、サービス、ハイパーバイザーとネットワークのエージェントが有効であることを確認できます。

# openstack service list
+----------------------------------+-----------+----------------+
| ID                               | Name      | Type           |
+----------------------------------+-----------+----------------+
| 115345a0f27e468d98fa5c311f98e19a | cinderv3  | volumev3       |
| 5b405c1f2f1b436199e61f03a11d0409 | heat-cfn  | cloudformation |
| 767158b7c1f646fb82504a9e1b1f2928 | keystone  | identity       |
| 9e7beec9461c4b2aac1d1c8f81654f6f | neutron   | network        |
| abbe0267ffa84ea484a208b1614473af | placement | placement      |
| ca86ceb9cb2f4081a052213fa8eb6807 | nova      | compute        |
| ef37a79cedce467ba66c8972f1d936f9 | glance    | image          |
| f0acd8bc41e54b31a03be508c8eed538 | heat      | orchestration  |
+----------------------------------+-----------+----------------+


# openstack hypervisor list
+----+---------------------+-----------------+---------------+-------+
| ID | Hypervisor Hostname | Hypervisor Type | Host IP       | State |
+----+---------------------+-----------------+---------------+-------+
|  1 | vac2w               | QEMU            | 172.29.236.11 | up    |
+----+---------------------+-----------------+---------------+-------+


# openstack network agent list
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host  | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| 32c6442c-70c1-4c75-8e08-137a72af7f7a | DHCP agent         | vac1w | nova              | :-)   | UP    | neutron-dhcp-agent        |
| 48930dad-fa9a-400b-bb0b-952d13198230 | Linux bridge agent | vac2w | None              | :-)   | UP    | neutron-linuxbridge-agent |
| 4b3d19db-c149-4155-ab1d-ec0105cd7e46 | L3 agent           | vac1w | nova              | :-)   | UP    | neutron-l3-agent          |
| 75601408-8b55-4c5e-8a1c-f56696c72d7f | Metering agent     | vac1w | None              | :-)   | UP    | neutron-metering-agent    |
| b78bda5e-734b-404a-b988-0681f973a772 | Linux bridge agent | vac1w | None              | :-)   | UP    | neutron-linuxbridge-agent |
| fef816f3-8798-4942-9581-f9dab847056e | Metadata agent     | vac1w | None              | :-)   | UP    | neutron-metadata-agent    |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+

Webブラウザで確認します。

vac0wにて、以下のようにアクセスIPアドレスを確認します。

# cat /etc/openstack_deploy/openstack_user_config.yml  | grep 'external_lb_vip_address'
  external_lb_vip_address: 172.17.31.11

httpsでこのIPアドレス(https://172.17.31.11/)にアクセスしてWeb管理画面でも確認できます。 ログインのユーザ名はadminです。パスワード以下のコマンド実行結果のkeystone_auth_admin_password:に表示されたものです。

# cat /etc/openstack_deploy/user_secrets.yml | grep 'keystone_auth_admin'

7. 新しいコンピューティングノードの追加

クラスタ構築後に、新しいコンピューノード(vac3wとする)を追加したい場合は、vac0wにて、/etc/openstack_deployopenstack_user_config.yml のcompute_hosts部分に compute2を追加します。

追加前

# nova hypervisors
compute_hosts:
  compute1:
    ip: 172.29.236.11

追加後

# nova hypervisors
compute_hosts:
  compute1:
    ip: 172.29.236.11
  compute2:
    ip: 172.29.236.12

上記のように追加したら、「5. playbooksの実行」をもう一度実行します。

実行後に以下のように確認できます。

# openstack hypervisor list
+----+---------------------+-----------------+---------------+-------+
| ID | Hypervisor Hostname | Hypervisor Type | Host IP       | State |
+----+---------------------+-----------------+---------------+-------+
|  1 | vac2w               | QEMU            | 172.29.236.11 | up    |
|  2 | vac3w               | QEMU            | 172.29.236.12 | up    |
+----+---------------------+-----------------+---------------+-------+

# openstack network agent list
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host  | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+
| 32c6442c-70c1-4c75-8e08-137a72af7f7a | DHCP agent         | vac1w | nova              | :-)   | UP    | neutron-dhcp-agent        |
| 48930dad-fa9a-400b-bb0b-952d13198230 | Linux bridge agent | vac2w | None              | :-)   | UP    | neutron-linuxbridge-agent |
| 4b3d19db-c149-4155-ab1d-ec0105cd7e46 | L3 agent           | vac1w | nova              | :-)   | UP    | neutron-l3-agent          |
| 75601408-8b55-4c5e-8a1c-f56696c72d7f | Metering agent     | vac1w | None              | :-)   | UP    | neutron-metering-agent    |
| 875d1b6a-e740-498e-9db6-347295ff967c | Linux bridge agent | vac3w | None              | :-)   | UP    | neutron-linuxbridge-agent |
| b78bda5e-734b-404a-b988-0681f973a772 | Linux bridge agent | vac1w | None              | :-)   | UP    | neutron-linuxbridge-agent |
| fef816f3-8798-4942-9581-f9dab847056e | Metadata agent     | vac1w | None              | :-)   | UP    | neutron-metadata-agent    |
+--------------------------------------+--------------------+-------+-------------------+-------+-------+---------------------------+

8. 注意事項

コントローラノードのメモリ

コントローラノードのメモリを24GB以上にしないと、構築の途中でいくつかのLXCが起動できない状態になります。

キャッシュの削除

Ansibleを実行すると、/etc/openstack_deploy/ansible_factsにターゲットノードに関する情報のキャッシュファイルが生成されます。 Ansible実行途中で失敗して、その後openstack_user_config.ymlを編集した場合は、必ずこのキャッシュファイルを削除してから、Ansibleを再実行してください。

設定ファイルの場所

OpenStackの各コンポーネントはLXCコンテナ上で動いています。その設定ファイルもまたLXCコンテナのファイルシステムにあります。 一方、nova-compute, neutron-l2-agentなどはLXCコンテナではなく、ターゲットノード上で動いています。その設定ファイルはターゲットノードのファイルシステムにあります。 例えば、NeutronのLXCコンテナのneutron ml2 pluginの設定ファイルはあるが、これを編集してもターゲットノード上のneutron-l2-agentには反映されません。

また、Ansibleを再実行すると各コンポーネントの設定ファイルも上書きされるので、手動で設定ファイルを編集した場合は、予めバックアップをおすすめします。

9. おわりに

いかがでしょうか。ここの手順をご参考いただければ幸いです。 ここまでの構築手順はhttps://docs.openstack.org/openstack-ansible/yoga/を参考にして作りました。