Kolla-Ansible とコンテナによる OpenStack のデプロイ

透過 Kolla-Ansible 跟 Container 部署 OpenStack

OpenStackはかつてデプロイが非常に複雑でメンテナンスも困難でしたが、近年のDevOpsやコンテナ概念の普及に伴い、OpenStackコミュニティでもコンテナとAnsibleを利用してOpenStackをデプロイする手法が登場しました。この手法はKollaとKolla-Ansibleによって実現されています。KollaはOpenStackに必要なDockerイメージをビルドするためのDockerfileを提供し、Kolla-AnsibleはそれらのコンテナをデプロイするためのAnsibleプレイブックを提供します。本記事では、このプロジェクトを通じて、本番環境に対応した高可用性(High-availability)なOpenStack環境(現時点のバージョンはQueens)を迅速にデプロイする方法を紹介します。

基本構成

高可用性(High-availability)なOpenStack環境には、基本的に最小で4つのノードが必要です。具体的には、3つのコントローラーノード(Cephノードを兼ねる)と、少なくとも1つの計算(Compute)ノードです。各ノードには少なくとも2つのインターフェースが必要です。

Kolla-AnsibleはOpenStackのネットワークをいくつかの種類に分類しています。

  • APIインターフェースは、OpenStack内部の各コンポーネント間の通信およびデータベースアクセスのためのインターフェースであり、内部ネットワークの使用を推奨します。
  • External VIPインターフェースは、OpenStackの外部向けエンドポイントです。
  • Storageインターフェースは、OpenStack VMとCephが通信するためのインターフェースであり、10G以上のネットワークを推奨します。
  • Clusterインターフェースは、Ceph内部でファイルを複製するためのネットワークインターフェースであり、同様に10G以上のネットワークを推奨します。
  • Tunnelインターフェースは、OpenStack VM間のネットワーク通信用インターフェースです。
  • Neutron Externalインターフェースは、VMに外部ネットワークを提供するためのインターフェースであり、Floating IPのFlat/VLANネットワークもこのインターフェースを経由します。独立したインターフェースである必要があり、IPアドレスを割り当ててはいけません。

Neutron External Interfaceを独立したインターフェースにする必要がある以外は、他のネットワークはインターフェースを共有できます。デフォルトではnetwork_interfaceの値が適用されます。

事前準備

本記事の例では、DockerHubに公式にアップロードされているイメージを使用します。イメージを独自にカスタマイズする必要がある場合は、Docker Registryを構築する必要があります。

デプロイを実行するマシンで、まずKolla-Ansibleのコードをダウンロードします。

git clone https://github.com/openstack/kolla-ansible -b stable/queens
pip install -U ansible

Kolla-Ansibleの設定ファイルを以下の場所に配置します。 /etc/kolla 配下。

cp kolla-ansible/etc/kolla/ /etc/kolla

Ansible のインストール

Ansible のインストールは、Linux ディストリビューションのパッケージマネージャーを使用して直接行うことができます。

CentOS

sudo yum install epel-release
sudo yum install ansible

Ubuntu

sudo apt install ansible

環境設定

Kolla-Ansibleのすべての設定は以下の場所に配置されます。 /etc/kolla/globals.yml 内。

編集する際は、編集したい行の先頭にあるコメントアウトを外すのを忘れないでください。最初に入力されている値はデフォルト値です。

Kolla オプション

kolla_install_typeはOpenStackコードのインストール方法を指します。「binary」は各ディストリビューションでパッケージ化されたバイナリファイルを使用することを意味し、「source」はOpenStackアップストリームのソースコードを使用することを意味します。この選択は人によりますが、個人的にはsourceを使用したインストール方法を好んで選択しています。

openstack_release は、基本的に Kolla Image が使用する Docker リポジトリのタグです。この例では DockerHub 上の queens バージョンを使用しているため、その値を入力します。 queens

# Valid option is Docker repository tag
openstack_release: "queens"

kolla_internal_vip_address と kolla_internal_fqdn は、OpenStack サービス間の内部通信に使用される IP アドレスと FQDN です。環境に応じて異なる IP アドレスを入力しますが、この IP アドレスは API インターフェースと同じ CIDR 内にあり、かつ未使用のものである必要があります。

kolla_external_vip_address と kolla_external_fqdn は、一般ユーザーが OpenStack サービスにアクセスするための IP アドレスと FQDN です。

kolla_internal_vip_address: "192.168.113.0"

#kolla_internal_fqdn: "{{ kolla_internal_vip_address }}"

kolla_external_vip_address: "140.113.0.1"

kolla_external_fqdn: "openstack.igene.tw"

Docker オプション

Docker Options には Docker Registry の認証情報や場所の設定を入力します。この例では DockerHub 上のイメージを直接使用するため、コメントアウトしたままで問題ありません。

ネットワークオプション

Network Options では、前述の各ネットワークで使用するインターフェースを設定します。インターフェース名はマシンの実際の名称に合わせて変更する必要があります。差異がある場合は、Ansible Inventory でオーバーライドすることも可能です。

#kolla_external_vip_interface: "eth0"
#api_interface: "{{ network_interface }}"
#storage_interface: "enp2s0f0"
#cluster_interface: "enp2s0f1"
#tunnel_interface: "{{ network_interface }}"
#dns_interface: "{{ network_interface }}"

#neutron_external_interface: "eth1"

OpenStack オプション

ここでは有効にする OpenStack サービスを選択できます。本チュートリアルでは、追加で Ceph と Cinder を有効にします。

enable_ceph: "yes"
enable_ceph_rgw: "yes"
enable_cinder: "yes"

Glance – イメージオプション

Ceph を有効にしているため、OpenStack のイメージを Ceph に保存するように設定します。そのため、Glance のバックエンドを Ceph を使用するように変更します。

glance_backend_file: "no"
glance_backend_ceph: "yes"

Cinder – ブロックストレージオプション

Cinder Volume と Cinder Backup も Ceph によって提供されるため、同様にバックエンドを Ceph に変更します。

cinder_backend_ceph: "yes"

cinder_backup_driver: "ceph"

Nova – コンピュートオプション

Nova のストレージ部分も同様に Ceph を使用するように変更します。

nova_backend_ceph: "yes"

これで大部分の設定は完了です。実際のプロダクション環境へのデプロイでは、必要に応じて詳細な調整を行ってください。
個別のサービスの構成ファイルを変更・調整する必要がある場合は、こちらの記事を参考にしてください。 Kolla-Ansible でカスタム設定を使用する

Ansible Inventory の設定

Ansible Inventory には、選択した各ノードのホスト名または IP アドレスを入力します。この例では 3 台のコントローラーノードが含まれます。 control01, control02 control03` 和一台 compute node `compute01コントローラーノードは Ceph のストレージノードも兼ねているため、ストレージセクションにもコントローラーノードのホスト名を入力します。

[control]
control01
control02
control03

[network]
control01
control02
control03

[inner-compute]

[external-compute]
compute01

[compute:children]
inner-compute
external-compute

[monitoring]
control01
control02
control03

[storage]
control01
control02
control03

実際のデプロイ

Kolla-Ansible は設定後のデプロイが非常に簡単で、4 つのコマンドを実行するだけです。

cd kolla-ansible
tools/generate_passwords.py

generate_passwords` 這個 script 將會產生 OpenStack 使用的密碼並且填入 `/etc/kolla/passwords.yml というファイルを探します。

tools/kolla-ansible -i ansible/inventory/multinode bootstrap-servers

bootstrap-servers デプロイ対象のノードで、必要なパッケージや Docker のインストールなどの基本的な準備を行います。

tools/kolla-ansible -i ansible/inventory/multinode prechecks

prechecks 設定ファイルに基づいて、VIP やポートが重複して使用されていないかなど、デプロイ前の基本的なチェックを行います。

tools/kolla-ansible -i ansible/inventory/multinode deploy

deploy 実際に OpenStack 環境をデプロイします。イメージのプル、コンテナの実行、OpenStack の設定完了などの手順がこのプレイブックですべて実行されます。実行時間はネットワーク速度やデプロイ規模によりますが、早ければ 20 分ほどで、本番環境に対応した高可用性(HA)な OpenStack 環境を構築できます。

もし、 deploy 実行が正常に完了すれば、ブラウザから kolla_internal_vip_address または kolla_internal_fqdn にアクセスして OpenStack の管理画面を表示できます。

最後に、アカウント admin と /etc/kolla/passwords.yml" 中的 `keystone_admin_password で Dashboard にログインできます。

リファレンス

Kolla-Ansible ユーザーガイド


著作権表示:このブログのすべての記事は、以下のライセンスのもとで提供されています。 CC BY-NC-SA 4.0 (別途記載がある場合を除く)

コメントを残す