title: OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版 Company: 日本仮想化技術 Version:1.0.0-1
#OpenStack-Ansibleで作るOpenStack HA環境 Mitaka版
日本仮想化技術株式会社
##変更履歴
バージョン | 更新日 | 更新内容 |
---|---|---|
1.0.0 | 2016/06/01 | Mitaka版リリース |
1.0.0-1 | 2016/06/06 | 1.2 誤記の修正 |
筆者注:このドキュメントに対する提案や誤りの指摘は
Issue登録か、日本仮想化技術までメールにてお願いします。
https://github.com/virtualtech/openstack-ansible-docs/issues
OpenStack-Ansibleは、Ansibleを使用してOpenStackの構築・機能追加・アップグレードを容易にデプロイできることをめざすOpenStack Foundation公式のプロジェクトです。
OpenStack-Ansible
https://github.com/openstack/openstack-ansible
本書では、2台のサーバーを使ってOpenStack-Ansibleに必要な環境を準備し、実際にOpenStackをデプロイする手順を解説します。
OpenStack-Ansible Installation Guide
http://docs.openstack.org/developer/openstack-ansible/install-guide/index.html
Kevin Jackson; Cody Bunch; Egle Sigler 著 OpenStack Cloud Computing Cookbook Third Edition
Packt Publishing Limited.
本書はOpenStack環境をControllerサーバー1台、Computeサーバー1台の計2台を物理サーバー上に構築することを想定しています。最低限必要となるスペックは以下のとおりです。
Controllerサーバー | Computeサーバー | |
---|---|---|
CPU | 8コア以上 | 2コア |
メモリ | 16GB以上 | 8GB以上 |
ディスク1 | 80GB | 40GB |
ディスク2 | 任意のサイズ | (不要) |
NIC | 2つ以上 | 2つ以上 |
OpenStack-Ansibleではコンポーネント毎にLXCコンテナが作成され、そこへ各コンポーネントをインストールされます。
重要なコンポーネントについては可用性を高めるために複数のコンテナを立てクラスタを構成します。クラスタのノード数は、データの書き込みが行われるコンポーネントは奇数台(3台以上)が望ましい構成となります。これは、障害によりデータ競合が発生したとき多数決で処理されるためです。
今回は検証環境の構築を想定し1台の物理サーバーの中にクラスタを組む構成を組みますが、本番運用で構築する場合はControllerサーバーを3台以上用意することを推奨します。
Controllerサーバーに作成されるLXCコンテナは以下のとおりです。
コンテナ名 | 分類 | 用途 |
---|---|---|
galera_container-01 | Infrastructure | Galeraクラスタ(DBサービス) |
galera_container-02 | Infrastructure | Galeraクラスタ(DBサービス) |
galera_container-03 | Infrastructure | Galeraクラスタ(DBサービス) |
rabbit_mq_container-01 | Infrastructure | RabbitMQ(メッセージキューサービス) |
rabbit_mq_container-02 | Infrastructure | RabbitMQ(メッセージキューサービス) |
rabbit_mq_container-03 | Infrastructure | RabbitMQ(メッセージキューサービス) |
memcached_container | Infrastructure | memcacheed |
repo_container-01 | Infrastructure | コンテナ向けローカルリポジトリ |
repo_container-02 | Infrastructure | コンテナ向けローカルリポジトリ |
rsyslog_container | Infrastructure | Syslogサービス |
utility_container | Infrastructure | OpenStack CUIクライアントツール |
keystone_container-01 | OpenStack | Keystoneサービス |
keystone_container-02 | OpenStack | Keystoneサービス |
glance_container | OpenStack | Glanceサービス |
cinder_api_container | OpenStack | Cinder APIサービス |
cinder_scheduler_container | OpenStack | Cinderスケジューラー |
nova_api_metadata_container | OpenStack | Nova Metadata APIサービス |
nova_api_os_compute_container | OpenStack | Nova Compute APIサービス |
nova_cert_container | OpenStack | Nova Certサービス(証明書管理) |
nova_conductor_container | OpenStack | Nova Conductorサービス |
nova_console_container | OpenStack | Nova Consoleサービス |
nova_scheduler_container | OpenStack | Nova Schedulerサービス |
neutron_agents_container | OpenStack | Neutron agentサービス |
neutron_server_container | OpenStack | Neutron server(API)サービス |
heat_apis_container | OpenStack | Heat APIサービス |
heat_engine_container | OpenStack | Heat Engineサービス |
horizon_container-01 | OpenStack | Horizon(Dashboard)サービス |
horizon_container-02 | OpenStack | Horizon(Dashboard)サービス |
OSはUbuntu Serverを使用します。Ubuntu Serverでは新しいハードウェアのサポートを積極的に行うディストリビューションです。そのため、Linux KernelのバージョンをTrustyの場合は14.04.2以降のLTSのポイントリリースごとに、スタンダート版のUbuntuと同様のバージョンに置き換えてリリースしています。
一般的な利用では特に問題ありませんが、OpenStackとSDNのソリューションを連携した環境を作る場合などに、Linux KernelやOSのバージョンを考慮しなくてはならないことがあります。 Trustyの場合はLinux Kernel v3.13以外のバージョンのサポート期間はTrustyのサポート期間と同様ではありません。期限が切れた後はLinux Kernel v3.13にダウングレードするか、新しいLinux Kernelをインストールすることができるメタパッケージを手動で導入する必要がありますので注意してください。
本書ではサポート期間が長く、Trustyの初期リリースの標準カーネルであるLinux Kernel v3.13を使うために、以下のURLよりイメージをダウンロードしたUbuntu Server 14.04.1 LTS(以下Ubuntu Server)のイメージを使ってインストールします。インストール後apt-get dist-upgrade
を行って最新のアップデートを適用した状態にしてください。Trustyではこのコマンドを実行してもカーネルのバージョンがアップグレードされることはありません。
本書は3.13.0-68以降のバージョンのカーネルで動作するUbuntu 14.04を想定しています。
今回の例では以下に述べるネットワーク構成で構築する前提で解説します。
双方のサーバーのem1には管理用、em2にはサービス用のトラフィックが流れるように構築します。それぞれのインターフェースはVLANを使用して複数のセグメントを扱うため、スイッチを経由する場合は**タグVLANを有効(Trunkモード)**にする必要があります。
管理用イントラネットワークに接続するネットワークセグメントで、OSインストール時に設定します。apt-get等を実行するときこのネットワークを経由するためインターネットへアクセスできる環境である必要があります。今回は物理インターフェースem1へ割り当てます。
- 物理インターフェース:em1
- VLAN:Untagged/Native
- ブリッジインターフェース:なし
- ネットワークセグメント:192.168.0.0/24
- ゲートウェイ:192.168.0.1
- DNSサーバー:8.8.8.8
OpenStack-Ansible環境の各コンテナ間で使用する独立したネットワークセグメントです。各サービス間のAPI連携はこのネットワークを使用して通信されます。今回はタグVLANを使用して物理インターフェースem1へ割り当てます。
- 物理インターフェース:em1
- VLAN ID:10
- ブリッジインターフェース:br-mgmt
- ネットワークセグメント:172.29.236.0/22
OpenStack構築後、各プロジェクト(テナント)のサービス用に割り当てるネットワークとして使用します。このネットワークではタグVLANを使用して複数のセグメントを割り当てられるようにします。インターネットへ接続する必要がある場合は別途接続先のスイッチ等でVLANの設定を行ってください。今回は物理インターフェースem2を使用します。
- 物理インターフェース:em2
- VLAN ID:任意(OpenStack構築後ネットワーク作成時に指定)
- ブリッジインターフェース:br-vlan
OpenStack構築後、各プロジェクト(テナント)の内部用に割り当てるネットワークとして使用します。このネットワークではVXLANを使用してプロジェクト内で作成されたネットワークをトンネル化します。今回はタグVLANを使用して物理インターフェースem2へ割り当てます。
- 物理インターフェース:em2
- VLAN ID:30
- ブリッジインターフェース:br-vxlan
- ネットワークセグメント:172.29.240.0/22
各サーバーの設定するアドレスは以下の通りです。
インターフェース | em1 | em1.10 | em2 | em2.30 |
---|---|---|---|---|
IPアドレス | 192.168.0.10 | 172.29.236.10 | (なし) | 172.29.240.10 |
ネットマスク | 255.255.255.0 | 255.255.252.0 | (なし) | 255.255.252.0 |
ゲートウェイ | 192.168.0.1 | - | - | - |
ネームサーバー | 8.8.8.8 | - | - | - |
インターフェース | em1 | em1.10 | em2 | em2.30 |
---|---|---|---|---|
IPアドレス | 192.168.0.11 | 172.29.236.11 | (なし) | 172.29.240.11 |
ネットマスク | 255.255.255.0 | 255.255.252.0 | (なし) | 255.255.252.0 |
ゲートウェイ | 192.168.0.1 | - | - | - |
ネームサーバー | 8.8.8.8 | - | - | - |
2台のサーバーに対し、Ubuntu Serverをインストールします。要点は以下の通りです。
- 優先ネットワークインターフェースをem1に指定
- インターネットへ接続するインターフェースはem1を使用するため、インストール中はem1を優先ネットワークとして指定します。
- OSは最小インストール
- パッケージ選択ではOpenSSH serverのみ選択
設定項目 | 設定例 |
---|---|
初期起動時のLanguage | English |
起動 | Install Ubuntu Server |
言語 | English - English |
地域の設定 | other→Asia→Japan |
地域の言語 | United States - en_US.UTF-8 |
キーボードレイアウトの認識 | No |
キーボードの言語 | Japanese→Japanese |
優先するNIC | em1: Ethernet |
ホスト名 | それぞれのサーバー名(controller, compute) |
ユーザ名とパスワード | フルネームで入力 |
アカウント名 | ユーザ名のファーストネームで設定される |
パスワード | 任意のパスワード |
Weak password(出ない場合も) | Yesを選択 |
ホームの暗号化 | 任意 |
タイムゾーン | Asia/Tokyoであることを確認 |
パーティション設定 | Guided - use entire disk and set up LVM |
パーティション選択 | sdaを選択 |
パーティション書き込み | Yesを選択 |
パーティションサイズ | デフォルトのまま |
変更の書き込み | Yesを選択 |
HTTP proxy | 環境に合わせて任意 |
アップグレード | No automatic updatesを推奨 |
ソフトウェア | OpenSSH serverのみ選択 |
GRUB | Yesを選択 |
インストール完了 | Continueを選択 |
筆者注:
Ubuntuインストール時に選択した言語がインストール後も使われます。
Ubuntu Serverで日本語の言語を設定した場合、標準出力や標準エラー出力が文字化けしたり、作成されるキーペア名が文字化けするなど様々な問題が起きますので、言語は英語を設定されることを推奨します。
外部ネットワークとの接続にプロキシーの設定が必要な場合は、aptコマンドを使ってパッケージの照会やダウンロードを行うために次のような設定をする必要があります。
- システムのプロキシー設定
# vi /etc/environment
http_proxy="http://proxy.example.com:8080/"
https_proxy="https://proxy.example.com:8080/"
- APTのプロキシー設定
# vi /etc/apt/apt.conf
Acquire::http::proxy "http://proxy.example.com:8080/";
Acquire::https::proxy "https://proxy.example.com:8080/";
より詳細な情報は下記のサイトの情報を確認ください。
Ubuntuはデフォルト設定でrootユーザーの利用を許可していないため、root権限が必要となる作業は以下のように行ってください。
- rootユーザーで直接ログインできないので、インストール時に作成したアカウントでログインする。
- root権限が必要な場合には、sudoコマンドを使用する。
- rootで連続して作業したい場合には、sudo -iコマンドでシェルを起動する。
本章では、OpenStackパッケージのインストール前に各々のサーバーで以下の設定を行います。
- パッケージ インストール
- カーネルのアップグレード
- ネットワークデバイスの設定
- 物理ボリュームの設定
OpenStack-Ansible環境を構築するにあたり、必要となるパッケージのインストールを行います。
controller$ sudo -i
controller# apt-get update
controoler$ apt-get install aptitude build-essential git python-dev bridge-utils debootstrap ifenslave ifenslave-2.6 lsof lvm2 ntp ntpdate openssh-server sudo tcpdump vlan python-crypto python-yaml
compute$ sudo -i
compute# apt-get update
compute# apt-get install bridge-utils debootstrap ifenslave ifenslave-2.6 lsof lvm2 ntp ntpdate openssh-server sudo tcpdump vlan
VLAN有効化するには、vlanパッケージインストール後モジュールの有効化をする必要があります。 双方のサーバーでタグVLANを有効化します。
# echo '8021q' >> /etc/modules
OpenStack-AnsibleではLinuxカーネルのバージョンが 3.13.0-34 以上の環境を要求します。ControllerサーバーとComputeサーバーの両方でカーネルのアップグレード行います。
# apt-get dist-upgrade
ControllerサーバーとComputeサーバーのネットワークを設定します。
controller:$ vi /etc/network/interfaces
auto em1
iface em1 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8
iface em1.10 inet manual
vlan-raw-device em1
auto em2
iface em2 inet manual
iface em2.30 inet manual
vlan-raw-device em2
auto br-mgmt
iface br-mgmt inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports em1.10
address 172.29.236.10
netmask 255.255.252.0
auto br-vlan
iface br-vlan inet manual
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports em2
auto br-vxlan
iface br-vxlan inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports em2.30
address 172.29.240.10
netmask 255.255.252.0
ubuntu@compute:~$ vi /etc/network/interfaces
auto em1
iface em1 inet static
address 192.168.0.11
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8
iface em1.10 inet manual
vlan-raw-device em1
auto em2
iface em2 inet manual
iface em2.30 inet manual
vlan-raw-device em2
auto br-mgmt
iface br-mgmt inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports em1.10
address 172.29.236.11
netmask 255.255.252.0
auto br-vlan
iface br-vlan inet manual
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports em2
auto br-vxlan
iface br-vxlan inet static
bridge_stp off
bridge_waitport 0
bridge_fd 0
bridge_ports em2.30
address 172.29.240.11
netmask 255.255.252.0
設定後、ControllerサーバーとComputeサーバーを再起動します。
# shutdown -r now
ControllerサーバーにCinder用のLVMボリュームグループを作成します。
まず、デバイス /dev/sdb に対しLVM物理ボリュームを作成します。
controller$ sudo pvcreate /dev/sdb
LVM物理ボリュームが作成されたことを確認します。
controller$ sudo pvscan
PV /dev/sdb lvm2 [279.37 GiB]
Total: 1 [279.37 GiB] / in use: 0 [0 ] / in no VG: 1 [279.37 GiB]
続いて、LVMボリュームグループを作成し先ほど作成した物理ボリュームを登録します。
controller$ sudo vgcreate cinder-volumes /dev/sdb
ボリュームグループが作成されたか確認します。
controller$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "cinder-volumes" using metadata type lvm2
本章では、OpenStack-AnsibleをGitHubからダウンロードし、設定ファイル(YAML形式)を編集します。
設定に用いる対象ファイルは以下の3ファイルです。
- openstack_user_config.yml
- user_variables.yml
- user_sercret.yml
GitHubからOpenStack-Ansibleをダウンロードし、 /opt/openstack-ansible ディレクトリへ格納します。
controller$ sudo git clone https://github.com/openstack/openstack-ansible /opt/openstack-ansible
使用するOpenStack-Ansibleのバージョンのタグをチェックアウトします。 (今回は13.1.1を指定します。)
controller$ cd /opt/openstack-ansible/
controller$ git tag -l
controller$ sudo git checkout 13.1.1
チェックアウトが正しく行われたか確認します。
controller$ git branch -a
(detached from 11.2.6)と表示されていることを確認します。
設定ファイルを /etc/openstack_deploy へコピーします。
controller$ sudo cp -a /opt/openstack-ansible/etc/openstack_deploy /etc/openstack_deploy
openstack_user_config.yml ファイルを作成し、以下の設定を記述していきます。
controller$ sudo vi /etc/openstack_deploy/openstack_user_config.yml
OpenStack-Ansibleで使用するネットワークを定義します。 今回の環境では以下2つのネットワークを設定します。
- management : コンテナ用ネットワーク
- tunnel : プロジェクト(テナント)用ネットワーク
--- ← ファイルの先頭行にYAMLのセパレーション記号「---」を記述
cidr_networks:
management: 172.29.236.0/22
tunnel: 172.29.240.0/22
OpenStack-Ansibleでは、LXCコンテナで使用するIPアドレスを定義したアドレス範囲内で自動生成します。 すでに使用しているアドレスや使用されたくないアドレスがある場合は、user_ipsセクションで予約します。
アドレスの指定は単一もしくは範囲で指定します。範囲で使用する場合はカンマ区切りで下限と上限のIPアドレスを指定します。
used_ips:
- 172.29.236.1,172.29.236.31
- 172.29.240.1,172.29.240.31
OpenStack-AnsibleではHAProxyを使用してクラスタ構成しているサービスのロードバランシングを行います。設定内容は以下のとおりです。
項目 | 内容 |
---|---|
internal_bl_vip_address | 内部向けアドレス。コンテナ管理用ネットワークセグメント内のアドレスを指定 |
external_bl_vip_address | 外部向けアドレス。ホスト管理用ネットワークセグメント内のアドレスを指定 |
lb_name | ロードバランサーの名前 |
tunnel_bridge | VXLANで使用するブリッジを指定 |
management_bridge | 管理用ネットワーク使用するブリッジを指定 |
probider_networks | 各ネットワークの詳細を設定 |
global_overrides:
internal_lb_vip_address: 172.29.236.10
external_lb_vip_address: 192.168.0.10
lb_name: haproxy
tunnel_bridge: "br-vxlan"
management_bridge: "br-mgmt"
provider_networks:
- network:
group_binds:
- all_containers
- hosts
type: "raw"
container_bridge: "br-mgmt"
container_interface: "eth1"
container_type: "veth"
ip_from_q: "management"
is_container_address: true
is_ssh_address: true
- network:
group_binds:
- neutron_linuxbridge_agent
container_bridge: "br-vxlan"
container_type: "veth"
container_interface: "eth10"
ip_from_q: "tunnel"
type: "vxlan"
range: "1:1000"
net_name: "vxlan"
- network:
group_binds:
- neutron_linuxbridge_agent
container_bridge: "br-vlan"
container_type: "veth"
container_interface: "eth11"
type: "vlan"
range: "1:1"
net_name: "vlan"
- network:
group_binds:
- neutron_linuxbridge_agent
container_bridge: "br-vlan"
container_type: "veth"
container_interface: "eth12"
host_bind_override: "em2"
type: "flat"
net_name: "flat"
OpenStackの各コンポーネントと連携するサービス(GaleraDBクラスタ、RabbitMQ、Memcached等)を稼働させるホストを指定します。
今回はコントローラサーバー(controller)上にGaleraDBクラスタ用のコンテナを3台、RabbitMQ用のコンテナを3台、Memcached用のコンテナを1台インストールする設定とします。
shared-infra_hosts:
controller-01:
affinity:
galera_container: 3
rabbit_mq_container: 3
ip: 172.29.236.10
なお、物理マシンを複数台用意する場合は以下のように指定します。
shared-infra_hosts:
infra-01:
ip: 172.29.236.21
infra-02:
ip: 172.29.236.22
infra-03:
ip: 172.29.236.23
OpenStackの各コンポーネントを稼働させるホストを指定します。 今回はコントローラサーバー(controller)上にGlance API用のコンテナを1台、Nova API用のコンテナを1台、Horizon用のコンテナを2台インストールする設定とします。
os-infra_hosts:
controller-01:
affinity:
horizon_container: 2
ip: 172.29.236.10
Cinder APIを稼働させるホストを指定します。 今回はコントローラサーバー(controller)上にCinder API用のコンテナを1台インストールする設定とします。
storage-infra_hosts:
controller-01:
ip: 172.29.236.10
Keystoneを稼働させるホストを指定します。 今回はコントローラサーバー(controller)上にKeystone API用のコンテナを2台インストールする設定とします。
identity_hosts:
controller-01:
affinity:
keystone_container: 2
ip: 172.29.236.10
Nova computeを稼働させるホストを指定します。 今回はコンピュートサーバー(compute)にNova computeサービスをデプロイする設定とします。
compute_hosts:
compute-01:
ip: 172.29.236.11
Cinderストレージサーバーを稼働させるホストを指定とします。 今回はコントローラーサーバーにCinder volumeサービスをデプロイし、ボリュームをLVMボリュームグループ上に作成します。
storage_hosts:
controller-01:
ip: 172.29.236.10
container_vars:
cinder_backends:
limit_container_types: cinder_volume
lvm:
volume_backend_name: LVM_iSCSI
volume_driver: cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group: cinder-volumes
Neutron APIサービスを稼働させるホストを指定します。 今回はControllerサーバーにNeutronサービスをデプロイする設定とします。
network_hosts:
controller-01:
ip: 172.29.236.10
パッケージレポジトリを稼働させるホストを指定します。 今回はControllerサーバーにパッケージレポジトリ用のコンテナを2台インストールする設定とします。
repo-infra_hosts:
controller-01:
affinity:
repo_container: 2
ip: 172.29.236.10
HAProxyを稼働させるホストを指定します。 今回はControllerサーバーにHAProxyをインストールする設定とします。
haproxy_hosts:
controller-01:
ip: 172.29.236.10
各コンテナより出力されるsyslogを集約するコンテナです。 今回はControllerサーバーにコンテナを作成します。
log_hosts:
controller-01:
ip: 172.29.236.10
本ファイルではOpenStack各コンポーネント(Glance、Nova、Apache等)のオプション設定を行います。 以下のコマンドで設定ファイルを編集します。
controller$ sudo vi /etc/openstack_deploy/user_variables.yml
## Common Glance Overrides
# Set glance_default_store to "swift" if using Cloud Files or swift backend
# or "rbd" if using ceph backend; the latter will trigger ceph to get
# installed on glance. If using a file store, a shared file store is
# recommended. See the OpenStack-Ansible install guide and the OpenStack
# documentation for more details.
glance_default_store: file ← コメントアウトをはずす
user_secrets.yml ファイルでは、OpenStack内の各コンポーネントで使用する初期パスワードをまとめています。 以下の操作を行い、user_secrets.yml ファイルにパスワードを生成します。
controller$ cd /opt/openstack-ansible/
controller$ sudo scripts/pw-token-gen.py --file /etc/openstack_deploy/user_secrets.yml
生成したパスワードを確認します。
controller$ sudo less /etc/openstack_deploy/user_secrets.yml
上記ファイルのなかの keystone_auth_admin_password が horizon へログインするためのパスワードとなります。 パスワードを変更したい場合は、以下のように任意の文字へ変更します。
例):
controller$ sudo vi /etc/openstack_deploy/user_secrets.yml
(省略)
keystone_auth_admin_password: password # 任意のパスワードに変更
本章では、前章で設定したYAMLファイルを元にAnsibleを利用してOpenStackをデプロイします。 実行するスクリプトやAnsible Playbookは /opt/openstack-ansible/ ディレクトリに格納されており、 次項の手順に従いOpenStackをインストールします。
以下のスクリプトを実行し、OpenStack-Ansibleの事前準備を行います。 スクリプトでは必要なパッケージのインストールや設定等が実行されます。
controller$ cd /opt/openstack-ansible/
controller$ sudo scripts/bootstrap-ansible.sh
Ansibleは公開鍵認証を使ってログインできることが前提条件となるため、以下の手順でComputeサーバーへSSH公開鍵を登録します。
ControllerサーバーでrootアカウントのSSH公開鍵を確認します。
controller$ sudo -i
controller# cat /root/.ssh/id_rsa.pub
上記コマンドで表示された結果を控えておき、Computeサーバーの authorized_keys ファイルへ公開鍵を貼り付けます。
compute$ sudo -i
compute# mkdir /root/.ssh
compute# vi /root/.ssh/authorized_keys
controllerサーバーから、SSHでrootログインできることを確認します。
controller# ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is 29:48:13:48:22:69:68:34:e9:19:ae:1e:39:58:83:ac.
Are you sure you want to continue connecting (yes/no)? yes
controller# exit
controller# ssh 172.29.236.11
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is 29:48:13:48:22:69:68:34:e9:19:ae:1e:39:58:83:ac.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.29.236.11' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-76-generic x86_64)
controller# exit
前項でスクリプトを実行すると、Playbookを実行するために使用する openstack-ansible と呼ばれるラッパースクリプトがインストールされます。 そのスクリプトを用いて setup-hosts.yml を実行し、各種LXCコンテナの作成とComputeサーバーの事前準備を行います。
controller$ cd /opt/openstack-ansible/playbooks/
controller$ sudo openstack-ansible setup-hosts.yml -vvv
実行結果がすべてOKと出力されれば問題ありません。Playbookが異常終了した場合は、原因を対処し以下のコマンドでPlaybookを再開してください。
controller$ sudo openstack-ansible setup-hosts.yml --limit @/home/ubuntu/setup-hosts.retry
haproxy-install.yml を実行し、HAProxyのインストールを行います。
controller$ sudo openstack-ansible haproxy-install.yml -vvv
実行結果がすべてOKと出力されれば問題ありません。Playbookが異常終了した場合は、原因を対処し以下のコマンドでPlaybookを再開してください。
controller$ openstack-ansible haproxy-install.yml --limit @/home/ubuntu/haproxy-install.retry
setup-infrastructure.yml を実行しインフラ環境をセットアップします。Playbookを実行すると以下の環境が構築されます。
- MariaDB Galera Cluster
- RabbitMQ
- memcached
- syslogd
controller$ sudo openstack-ansible setup-infrastructure.yml -vvv
実行結果がすべてOKと出力されれば問題ありません。Playbookが異常終了した場合は、原因を対処し以下のコマンドでPlaybookを再開してください。
controller$ sudo openstack-ansible setup-infrastructure.yml --limit @/home/ubuntu/setup-infrastructure.retry
setup-openstack.yml を実行し、以下のOpenStackコンポーネントをセットアップします。
- Keystone
- Galnce
- Cinder
- Nova
- Neutron
- Horizon
controller$ sudo openstack-ansible setup-openstack.yml -vvv
実行結果がすべてOKと出力されれば問題ありません。Playbookが異常終了した場合は、原因を対処し以下のコマンドでPlaybookを再開してください。
controller$ sudo openstack-ansible setup-openstack.yml --limit @/home/ubuntu/setup-openstack.retry
OpneStack-Ansibleで構築されたコンテナは、LXCの各コマンドを使って操作します。 なお、コンテナの操作はrootユーザーで実行します。あらかじめsudoコマンドでrootユーザーに切り替えてください。
controller$ sudo -i
内容 | コマンド |
---|---|
コンテナの一覧表示 | lxc-ls --fansy |
コンテナの詳細表示 | lxc-info --name <コンテナ名> |
コンテナの起動 | lxc-start --daemon --name <コンテナ名> |
コンテナの停止 | lxc-stop --name <コンテナ名> |
コンテナ内へログイン | lxc-attach --name <コンテナ名> |
ここでは、コンテナの一覧表示と、コンテナ内へのログイン方法の例を紹介します。
- コンテナの一覧表示
root@controller:~# lxc-ls --fancy
NAME STATE IPV4 IPV6 AUTOSTART
----------------------------------------------------------------------------------------------------------------------------------------
controller-01_cinder_api_container-3157cd2c RUNNING 10.0.3.156, 172.29.236.56 - YES (onboot, openstack)
controller-01_cinder_scheduler_container-b6a20022 RUNNING 10.0.3.85, 172.29.236.243 - YES (onboot, openstack)
controller-01_galera_container-29d52973 RUNNING 10.0.3.157, 172.29.236.46 - YES (onboot, openstack)
controller-01_galera_container-2ea457da RUNNING 10.0.3.190, 172.29.236.155 - YES (onboot, openstack)
controller-01_galera_container-f8883adf RUNNING 10.0.3.113, 172.29.236.211 - YES (onboot, openstack)
controller-01_glance_container-62ebe7a8 RUNNING 10.0.3.155, 172.29.236.55 - YES (onboot, openstack)
controller-01_heat_apis_container-9507e331 RUNNING 10.0.3.47, 172.29.236.190 - YES (onboot, openstack)
controller-01_heat_engine_container-ee16301a RUNNING 10.0.3.240, 172.29.236.90 - YES (onboot, openstack)
controller-01_horizon_container-58bc8110 RUNNING 10.0.3.36, 172.29.236.83 - YES (onboot, openstack)
controller-01_horizon_container-a5a061f5 RUNNING 10.0.3.98, 172.29.236.222 - YES (onboot, openstack)
controller-01_keystone_container-00302b5e RUNNING 10.0.3.136, 172.29.236.9 - YES (onboot, openstack)
controller-01_keystone_container-9aab73a6 RUNNING 10.0.3.173, 172.29.236.129 - YES (onboot, openstack)
controller-01_memcached_container-44d75a70 RUNNING 10.0.3.175, 172.29.236.43 - YES (onboot, openstack)
controller-01_neutron_agents_container-68879ee5 RUNNING 10.0.3.154, 172.29.240.152, 172.29.236.166 - YES (onboot, openstack)
controller-01_neutron_server_container-0cf61dc6 RUNNING 10.0.3.167, 172.29.236.113 - YES (onboot, openstack)
controller-01_nova_api_metadata_container-5175080c RUNNING 10.0.3.148, 172.29.236.91 - YES (onboot, openstack)
controller-01_nova_api_os_compute_container-debaf1ee RUNNING 10.0.3.180, 172.29.236.220 - YES (onboot, openstack)
controller-01_nova_cert_container-f08e46b0 RUNNING 10.0.3.222, 172.29.236.41 - YES (onboot, openstack)
controller-01_nova_conductor_container-86281c5d RUNNING 10.0.3.82, 172.29.236.197 - YES (onboot, openstack)
controller-01_nova_console_container-cf6d647d RUNNING 10.0.3.109, 172.29.236.196 - YES (onboot, openstack)
controller-01_nova_scheduler_container-47255f60 RUNNING 10.0.3.133, 172.29.236.143 - YES (onboot, openstack)
controller-01_rabbit_mq_container-4030544d RUNNING 10.0.3.72, 172.29.236.24 - YES (onboot, openstack)
controller-01_rabbit_mq_container-9078f6fd RUNNING 10.0.3.181, 172.29.236.236 - YES (onboot, openstack)
controller-01_rabbit_mq_container-edf993d7 RUNNING 10.0.3.184, 172.29.236.30 - YES (onboot, openstack)
controller-01_repo_container-90aef04e RUNNING 10.0.3.95, 172.29.236.217 - YES (onboot, openstack)
controller-01_repo_container-ee57a601 RUNNING 10.0.3.123, 172.29.236.10 - YES (onboot, openstack)
controller-01_utility_container-e90a7d93 RUNNING 10.0.3.135, 172.29.236.163 - YES (onboot, openstack)
- コンテナ内へログイン
root@controller:~# lxc-attach --name controller-01_utility_container-e90a7d93
root@controller-01_utility_container-e90a7d93:~# ← コンテナ内のコマンド入力待ちとなっている
なお、コンテナ名は以下のような命名規則でつけられます。
[ホスト名]_[サービス名]_container_[ランダムな文字列]
- [ホスト名]には openstack_user_config.yml で設定した名前が入ります。このホスト名はOSのホスト名とは異なる名前を設定することもできます。
- [ランダムな文字列]には自動的に生成された16進数8桁が入ります
本章ではOpenStack構築後の基本的な操作手順を記載します。
各コンポーネントのクライアントコマンドはutilityコンテナに納められています。CUIでOpenStackを操作には以下のコマンドでutilityコンテナへログインしてください。
controller# lxc-attach --name controller_utility_container
controller_utility_container# cd /root/
今回は、「demoプロジェクト」と「demoユーザー」を作成し、ネットワークと動作確認用インスタンスを構築します。
以下コマンドで Demo Project というプロジェクト(テナント)を作成します。
- adminユーザー環境変数ファイルの読み込み
controller_utility_container# source ~/openrc
- Demo Project の作成
controller_utility_container# openstack project create --description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 8e19b43b0403413a9f733957d41d4c99 |
| name | demo |
+-------------+----------------------------------+
以下コマンドで demo という名前のユーザーを作成します。
controller_utility_container# openstack user create --password-prompt demo
User Password: ←パスワードを入力
Repeat User Password: ←パスワードを再度入力
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 776a28828ff44378bc5a4efa26c36fc6 |
| name | demo |
+-----------+----------------------------------+
以下コマンドで user という名前のロールを作成します。
controller_utility_container# openstack role create user
+-------+----------------------------------+
| Field | Value |
+-------+----------------------------------+
| id | 08c684ecba574b1b870a0ca487400fb3 |
| name | user |
+-------+----------------------------------+
作成したプロジェクトにユーザーとロールを割り当てます。
controller_utility_container# openstack role add --project demo --user demo user
作成したプロジェクト向けの環境変数ファイルを作成します。
controller_utility_container# vi ~/demo-openrc
export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=password
export OS_AUTH_URL=http://172.29.236.10:5000/v3
以降のコマンドは作成したDemo Projectに対して実行するため、demoユーザー用環境変数ファイルを読み込みます。
controller_utility_container# source ~/demo-openrc
cirrosのイメージファイルダウンロードし、Glanceへ登録します。
controller_utility_container# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
--2016-01-25 15:25:52-- http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
Resolving download.cirros-cloud.net (download.cirros-cloud.net)... 69.163.241.114
Connecting to download.cirros-cloud.net (download.cirros-cloud.net)|69.163.241.114|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13287936 (13M) [text/plain]
Saving to: 'cirros-0.3.4-x86_64-disk.img'
100%[===================================================================================================================================================================================================>] 13,287,936 2.32MB/s in 6.3s
2016-01-25 15:25:58 (2.01 MB/s) - 'cirros-0.3.4-x86_64-disk.img' saved [13287936/13287936]
controller_utility_container# glance image-create --name "cirros-0.3.4-x86_64" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --progress
[=============================>] 100%
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
| created_at | 2016-01-25T07:43:37.000000 |
| deleted | False |
| deleted_at | None |
| disk_format | qcow2 |
| id | 25751b89-15c5-4903-9135-4a93c66f112a |
| is_public | False |
| min_disk | 0 |
| min_ram | 0 |
| name | cirros-0.3.4-x86_64 |
| owner | 8e19b43b0403413a9f733957d41d4c99 |
| protected | False |
| size | 13287936 |
| status | active |
| updated_at | 2016-01-25T07:43:37.000000 |
| virtual_size | None |
+------------------+--------------------------------------+
仮想マシンイメージが正しく登録されたか確認します。
controller_utility_container# glance image-list
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| ID | Name | Disk Format | Container Format | Size | Status |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| 25751b89-15c5-4903-9135-4a93c66f112a | cirros-0.3.4-x86_64 | qcow2 | bare | 13287936 | active |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
NovaのコマンドラインでGlanceのイメージリストを確認して、Glanceと相互に通信できているかを確認します。
controller_utility_container# nova image-list
+--------------------------------------+---------------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+---------------------+--------+--------+
| 25751b89-15c5-4903-9135-4a93c66f112a | cirros-0.3.4-x86_64 | ACTIVE | |
+--------------------------------------+---------------------+--------+--------+
続いて、OpenStack内で利用するネットワークを作成します。ネットワークは外部ネットワークと接続するためのパブリックネットワークと、プロジェクト内で使用するインスタンス用ネットワークを作成します。
パブリックネットワークは既存のネットワークをOpenStackに割り当てます。外部ネットワークへ接続する場合は別途L3スイッチ等でネットワークのゲートウェイIPアドレス、IPアドレスのセグメントを設定しておく必要があります。OpenStack側に割り当てるIPアドレスの範囲は、そのネットワーク内でDHCPサーバーが動いている場合DHCPサーバーが配るIPアドレス範囲を含めないようにしてください。
インスタンスにはインスタンス用ネットワークの範囲のIPアドレスがDHCP Agentを介して割り当てられます。このインスタンスにパブリックネットワークの範囲からFloating IPアドレスを割り当てることで、NAT接続でインスタンスが外部ネットワークとやり取りができるようになります。
今回はパブリックネットワーク(外部)のIPアドレスは 172.16.100.0/24、インスタンス用ネットワーク(内部)のIPアドレスは 192.168.100.0/24 を使用すると仮定します。
ここでは、neutronコマンドで ext-net と言う名前のパブリックネットワークを作成します。
パブリックネットワークの作成は管理者ユーザーである必要があるため、一度管理者用の環境変数ファイルを読み込みます。
controller_utility_container# source ~/openrc
パラメータ provider:physical_network で指定する設定は /etc/neutron/plugins/ml2/ml2_conf.ini の physical_interface_mappings に指定されている値を設定します。例えば vlan:eth12 と設定されている場合は vlan と指定します。また、provider:segmentation_id で VLAN IDを指定します。
controller_utility_container# neutron net-create ext-net --router:external --provider:network_type vlan --provider:physical_network vlan --provider:segmentation_id 100
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 7fb8a15f-ba8e-45c0-b513-250c4e2e17e6 |
| mtu | 0 |
| name | ext-net |
| provider:network_type | vlan |
| provider:physical_network | vlan |
| provider:segmentation_id | 100 |
| router:external | True |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | b5df55834d9c4b29aa826c3b5b44f2a9 |
+---------------------------+--------------------------------------+
ext-subnet という名前でパブリックネットワーク用サブネットを作成します。
controller_utility_container# neutron subnet-create ext-net 172.16.100.0/24 --name ext-subnet --disable-dhcp --gateway 172.16.100.1
Created a new subnet:
+-------------------+------------------------------------------------------+
| Field | Value |
+-------------------+---------------------------------------------------- -+
| allocation_pools | {"start": "172.16.100.2", "end": "172.16.100.254"} |
| cidr | 172.16.100.0/24 |
| dns_nameservers | |
| enable_dhcp | False |
| gateway_ip | 172.16.100.1 |
| host_routes | |
| id | b75687f3-53ad-490e-8f77-064e7c24b040 |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | ext-subnet |
| network_id | 7fb8a15f-ba8e-45c0-b513-250c4e2e17e6 |
| subnetpool_id | |
| tenant_id | b5df55834d9c4b29aa826c3b5b44f2a9 |
+-------------------+------------------------------------------------------+
インスタンス用ネットワークを作成するためにdemoユーザー用の環境変数を読み込みます。
controller_utility_container# source ~/demo-openrc
demo-net という名前でインスタンス用ネットワークを作成します。
controller_utility_container# neutron net-create demo-net
Created a new network:
+-----------------+--------------------------------------+
| Field | Value |
+-----------------+--------------------------------------+
| admin_state_up | True |
| id | a88b6d84-baa6-464e-90a3-b2188b03a2e6 |
| mtu | 0 |
| name | demo-net |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | 8e19b43b0403413a9f733957d41d4c99 |
+-----------------+--------------------------------------+
demo-subnet という名前でインスタンス用ネットワークサブネットを作成します。
パラメータ gateway には指定したインスタンス用ネットワークのサブネットの範囲から任意のIPアドレスを指定します。 ここでは "192.168.100.0/24" のネットワークをインスタンス用ネットワークとして定義します。
controller_utility_container# neutron subnet-create demo-net 192.168.100.0/24 --name demo-subnet
Created a new subnet:
+-------------------+------------------------------------------------------+
| Field | Value |
+-------------------+------------------------------------------------------+
| allocation_pools | {"start": "192.168.100.2", "end": "192.168.100.254"} |
| cidr | 192.168.100.0/24 |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | 192.168.100.1 |
| host_routes | |
| id | e95ff2a9-7500-4926-8692-5f27a06ca589 |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | demo-subnet |
| network_id | a88b6d84-baa6-464e-90a3-b2188b03a2e6 |
| subnetpool_id | |
| tenant_id | 8e19b43b0403413a9f733957d41d4c99 |
+-------------------+------------------------------------------------------+
仮想ネットワークルーターを作成して外部接続用ネットワークとインスタンス用ネットワークをルーターに接続し、双方間でデータのやり取りを行えるようにします。
demo-router という名前で仮想ネットワークルーターを作成します。
controller_utility_container# neutron router-create demo-router
Created a new router:
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| external_gateway_info | |
| id | 4198471b-1274-47cc-b4e0-723b1ee879cf |
| name | demo-router |
| routes | |
| status | ACTIVE |
| tenant_id | 8e19b43b0403413a9f733957d41d4c99 |
+-----------------------+--------------------------------------+
仮想ネットワークルーターとインスタンス用ネットワークを接続します。
controller_utility_container# neutron router-interface-add demo-router demo-subnet
仮想ネットワークルーターと外部ネットワークを接続します。
controller_utility_container# neutron router-gateway-set demo-router ext-net
仮想ルーターのゲートウェイIPアドレスの確認を行います。
管理者ユーザーでneutron router-port-list コマンドを実行すると、仮想ルーターのそれぞれのポートに割り当てられたIPアドレスを確認することができます。 コマンドの実行結果から "192.168.100.1" がインスタンスネットワーク側ゲートウェイIPアドレス、 "172.16.100.2" がパブリックネットワーク側ゲートウェイIPアドレスであることがわかります。
作成したネットワークの確認として、外部PCからパブリックネットワーク側ゲートウェイIPアドレスに対して疎通確認を行ってみましょう。 問題なければ仮想ルーターと外部ネットワークとの接続ができていると判断することができます。
controller_utility_container# source ~/openrc
controller_utility_container# neutron router-port-list demo-router -c fixed_ips --max-width 60
+--------------------------------------------------------------+
| fixed_ips |
+--------------------------------------------------------------+
| {"subnet_id": "c7aa9543-8044-4d8d-b087-ceb0968842b5", |
| "ip_address": "192.168.100.1"} |
| {"subnet_id": "e71becac-acf5-4525-835f-8cb4eb4bae27", |
| "ip_address": "172.17.16.2"} |
+--------------------------------------------------------------+
作成したポートに対して疎通確認を行います。
controller_utility_container# ping -c3 172.16.100.2
PING 172.16.100.2 (172.16.100.2) 56(84) bytes of data.
64 bytes from 172.16.100.2: icmp_seq=1 ttl=62 time=0.401 ms
64 bytes from 172.16.100.2: icmp_seq=2 ttl=62 time=0.383 ms
64 bytes from 172.16.100.2: icmp_seq=3 ttl=62 time=0.389 ms
--- 172.16.100.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.383/0.391/0.401/0.007 ms
作成したインスタンスが外部からできるように、default ポリシーにセキュリティルールを追加します。
SSHで使用するTCPプロトコルの22番ポートを許可します。
controller_utility_container# source ~/demo-openrc
controller_utility_container# neutron security-group-rule-create --direction ingress \
--ethertype IPv4 --protocol tcp --port-range-min 22 --port-range-max 22 default
疎通確認(Ping)で使用するICMPプロトコルのエコー要求(Tyep:8)とエコー応答(Type:0)を許可します。
controller_utility_container# neutron security-group-rule-create --direction ingress \
--ethertype IPv4 --protocol icmp --port-range-min 8 --port-range-max 8 default
controller_utility_container# neutron security-group-rule-create --direction ingress \
--ethertype IPv4 --protocol icmp --port-range-min 0 --port-range-max 0 default
以下コマンドでセキュリティルールが追加されたことを確認します。
controller_utility_container# neutron security-group-list
+--------------------------------------+---------+----------------------------------------------------------------------+
| id | name | security_group_rules |
+--------------------------------------+---------+----------------------------------------------------------------------+
| fab6c409-acef-424f-b72d-c3c0dabf08dd | default | egress, IPv4 |
| | | egress, IPv6 |
| | | ingress, IPv4, 22/tcp |
| | | ingress, IPv4, icmp (type:8, code:8) |
| | | ingress, IPv4, icmp (type:0, code:0) |
| | | ingress, IPv4, remote_group_id: fab6c409-acef-424f-b72d-c3c0dabf08dd |
| | | ingress, IPv6, remote_group_id: fab6c409-acef-424f-b72d-c3c0dabf08dd |
+--------------------------------------+---------+----------------------------------------------------------------------+
プロジェクト内に最低限の構成が準備できたので、実際にインスタンスが起動できるか確認します。
まずは以下の確認コマンドを使ってインスタンスの起動に必要な情報を集めます。
- イメージの一覧表示
controller_utility_container# glance image-list
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| ID | Name | Disk Format | Container Format | Size | Status |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| 25751b89-15c5-4903-9135-4a93c66f112a | cirros-0.3.4-x86_64 | qcow2 | bare | 13287936 | active |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
- ネットワークの一覧表示
controller_utility_container# neutron net-list
+--------------------------------------+----------+-------------------------------------------------------+
| id | name | subnets |
+--------------------------------------+----------+-------------------------------------------------------+
| a88b6d84-baa6-464e-90a3-b2188b03a2e6 | demo-net | e95ff2a9-7500-4926-8692-5f27a06ca589 192.168.100.0/24 |
| 7fb8a15f-ba8e-45c0-b513-250c4e2e17e6 | ext-net | b75687f3-53ad-490e-8f77-064e7c24b040 |
+--------------------------------------+----------+-------------------------------------------------------+
- セキュリティグループの一覧表示
controller_utility_container# neutron security-group-list
+--------------------------------------+---------+----------------------------------------------------------------------+
| id | name | security_group_rules |
+--------------------------------------+---------+----------------------------------------------------------------------+
| fab6c409-acef-424f-b72d-c3c0dabf08dd | default | egress, IPv4 |
| | | egress, IPv6 |
| | | ingress, IPv4, 22/tcp |
| | | ingress, IPv4, icmp (type:8, code:8) |
| | | ingress, IPv4, remote_group_id: fab6c409-acef-424f-b72d-c3c0dabf08dd |
| | | ingress, IPv6, remote_group_id: fab6c409-acef-424f-b72d-c3c0dabf08dd |
+--------------------------------------+---------+----------------------------------------------------------------------+
- フレーバーの一覧表示
controller_utility_container# nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True |
| 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True |
| 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True |
| 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True |
| 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
集めた情報を元にnova bootコマンドを使ってインスタンスを起動します。インスタンスを起動するために必要な項目は以下のとおりです。
項目 | 値 |
---|---|
インスタンス名 | vm1 |
イメージ | cirros-0.3.4-x86_64 |
フレーバー | m1.tiny |
ネットワーク | demo-net(コマンドではIDを指定) |
セキュリティグループ | default(コマンドではIDを指定) |
- インスタンスの起動
controller_utility_container# nova boot --flavor m1.tiny --image "cirros-0.3.4-x86_64" \
--nic net-id=a88b6d84-baa6-464e-90a3-b2188b03a2e6 \
--security-group=fab6c409-acef-424f-b72d-c3c0dabf08dd \
vm1
+--------------------------------------+------------------------------------------------------------+
| Property | Value |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | nova |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | - |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| adminPass | hRiWzPNwvp8B |
| config_drive | |
| created | 2016-01-25T07:47:28Z |
| flavor | m1.tiny (1) |
| hostId | |
| id | 05477352-6652-4087-9a93-7376e327d5cb |
| image | cirros-0.3.4-x86_64 (25751b89-15c5-4903-9135-4a93c66f112a) |
| key_name | - |
| metadata | {} |
| name | vm1 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | 835a57d5-37b0-4e4a-a421-76547d527f3d |
| status | BUILD |
| tenant_id | 8e19b43b0403413a9f733957d41d4c99 |
| updated | 2016-01-25T07:47:29Z |
| user_id | 776a28828ff44378bc5a4efa26c36fc6 |
+--------------------------------------+------------------------------------------------------------+
インスタンス起動後正しく起動できたかコンソールログを確認します。
controller_utility_container# nova console-log 05477352-6652-4087-9a93-7376e327d5cb
外部からインスタンスへのアクセスを可能とするために以下コマンドでFloatingIPの設定を行います。
インスタンス一覧を表示し起動したインスタンスのIDを確認します。
controller_utility_container# nova list
+--------------------------------------+------+--------+------------+-------------+------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+------+--------+------------+-------------+------------------------+
| 05477352-6652-4087-9a93-7376e327d5cb | vm1 | ACTIVE | - | Running | demo-net=192.168.100.3 |
+--------------------------------------+------+--------+------------+-------------+------------------------+
Neutronのポート一覧より該当インスタンスで使用しているポートIDを検索します。
controller_utility_container# neutron port-list | grep 192.168.100.3
| c044267e-0902-4fff-9909-1b05d9204683 | | fa:16:3e:7d:49:92 | {"subnet_id": "e95ff2a9-7500-4926-8692-5f27a06ca589", "ip_address": "192.168.100.3"} |
FloatingIPを作成します。
root@controller-01_utility_container# neutron floatingip-create ext-net
Created a new floatingip:
+---------------------+--------------------------------------+
| Field | Value |
+---------------------+--------------------------------------+
| fixed_ip_address | |
| floating_ip_address | 172.16.100.6 |
| floating_network_id | 8ee3a91d-a516-4962-bbe4-ab8ecfcd92b2 |
| id | ab123966-87a1-401a-8c9c-b5b818a14d1b |
| port_id | |
| router_id | |
| status | DOWN |
| tenant_id | 81ce71826dd24dc7a39d59b54b9c21bf |
+---------------------+--------------------------------------+
FloatingIPの一覧を表示し、正しく作成されたかどうか確認します。
controller_utility_container# neutron floatingip-list
+--------------------------------------+------------------+---------------------+---------+
| id | fixed_ip_address | floating_ip_address | port_id |
+--------------------------------------+------------------+---------------------+---------+
| ab123966-87a1-401a-8c9c-b5b818a14d1b | | 172.16.100.3 | |
+--------------------------------------+------------------+---------------------+---------+
検索したポートへFloatingIPを割り当てます。
controller_utility_container# neutron floatingip-associate ab123966-87a1-401a-8c9c-b5b818a14d1b c044267e-0902-4fff-9909-1b05d9204683
Associated floating IP ab123966-87a1-401a-8c9c-b5b818a14d1b
もう一度インスタンス一覧を表示し、FloatingIPが割り当てられたことを確認します。
controller_utility_container# nova list
+--------------------------------------+------+--------+------------+-------------+--------------------------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+------+--------+------------+-------------+--------------------------------------+
| 05477352-6652-4087-9a93-7376e327d5cb | vm1 | ACTIVE | - | Running | demo-net=192.168.100.3, 172.16.100.3 |
+--------------------------------------+------+--------+------------+-------------+--------------------------------------+
以下コマンドでCinderボリュームを作成し、正常にCinderが動作していることを確認します。 以下の例では volume01 という名前でサイズ2GBのボリュームを作成します。
controller_utility_container# cinder create --display-name volume01 2
ボリュームが作成されていることを確認します。
controller_utility_container# cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| e28b625e-2239-4d89-a809-a0d98abaa505 | available | volume01 | 2 | None | false | |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
作成したボリュームをインスタンスに割り当てます。
controller_utility_container# nova volume-attach vm1 e28b625e-2239-4d89-a809-a0d98abaa505
+----------+--------------------------------------+
| Property | Value |
+----------+--------------------------------------+
| device | /dev/vdb |
| id | e28b625e-2239-4d89-a809-a0d98abaa505 |
| serverId | 05477352-6652-4087-9a93-7376e327d5cb |
| volumeId | e28b625e-2239-4d89-a809-a0d98abaa505 |
+----------+--------------------------------------+
再びボリューム一覧を表示して、正しく割り当てられたことを確認します。
controller_utility_container# cinder list
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
| e28b625e-2239-4d89-a809-a0d98abaa505 | in-use | volume01 | 2 | None | false | 05477352-6652-4087-9a93-7376e327d5cb |
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
最後に、作成したインスタンスへSSHでログインし正しく動作するか確認します。
- インスタンスへの疎通確認
ping [割り当てたFloatingIPアドレス]
- SSHログイン
ssh cirros@[割り当てたFloatingIPアドレス]
[email protected]'s password: ← パスワードは cubswin:)
- 割り当てたCinderボリュームにパーティションを作成
$ sudo fdisk /dev/vdb
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): ← そのままEnter
Using default value 1
First sector (2048-4194303, default 2048): ← そのままEnter
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): ← そのままEnter
Using default value 4194303
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
- 作成したパーティションをフォーマット
$ sudo mkfs /dev/vdb1
mke2fs 1.42.2 (27-Mar-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524032 blocks
26201 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
- 作成したパーティションをマウント
$ sudo mount /dev/vdb1 /mnt
- パーティションのサイズ確認
/mntへCinderボリュームがマウントされていることを確認します
$ df -h
Filesystem Size Used Available Use% Mounted on
/dev 242.3M 0 242.3M 0% /dev
/dev/vda1 23.2M 18.0M 4.0M 82% /
tmpfs 245.8M 0 245.8M 0% /dev/shm
tmpfs 200.0K 88.0K 112.0K 44% /run
/dev/vdb1 2.0G 3.0M 1.9G 0% /mnt
この章では、OpenStack-Anibleに関連するトラブルの回避方法について説明します。
OpenStack-Ansibleでは、環境を一から構築しなおしたいときのために既存の環境を削除するスクリプトが用意されています。
このスクリプトを実行すると /etc/openstack_deploy 配下で設定したファイルは残りますが、デプロイ実施後に構築されたもの(コンテナやDB等)がすべて削除されます。必要に応じて実行前にバックアップを取っておいてください。
controller# cd /opt/openstack-ansible/
controller# scripts/teardown.sh
-----------------------------------------------------------------------------
WARNING: This is a destructive action. All containers will be destroyed and
all data within the containers will be removed. Some data will be
removed from the host as well. /etc/openstack_deploy will be preserved
and may be manually removed if needed.
Please verify that you have backed up all important data prior to
proceeding with the teardown script.
-----------------------------------------------------------------------------
To REALLY destroy all containers and delete the data within them,
type 'Y' or 'y' and press enter:
Controllerサーバーを再起動するとコンテナの起動順等の理由によりGaleraクラスタ(DBサービス)が正しく起動できないことがあります。 この場合、以下の手順でGaleraクラスタのリカバリーを実行してください。
controller# cd /opt/openstack_deploy/playbook
controller# openstack-ansible -e galera_ignore_cluster_state=true galera-install.yml
LinuxではBondingモジュールを利用することで、複数のNICを束ねネットワークの冗長化や負荷分散を行うことができます。
https://help.ubuntu.com/community/UbuntuBonding
OpenStack-Ansibleで構築されたOpenStack環境はほぼコンテナ上で稼働しているため、サーバーの物理NICでBondingを組むことにより比較的容易にネットワークの冗長化が実現できます。 OpenStack Foundationの公式マニュアルでは /etc/network/interfaces ファイルの設定例が紹介されています。詳しくは以下のページをご確認ください。
http://docs.openstack.org/developer/openstack-ansible/install-guide/targethosts-networkrefarch.html
OpenStack-Ansible では、設定ファイルにYAML形式を使用しています。YAML形式ではインデントを使って階層構造を組むため、カラム位置が重要になっています。ファイルを編集するときは以下の点に注意してください。
- YAMLでサブ項目を複数組むときはカラム位置がずれないよう気をつけてください。一般的には半角スペース2文字でインデントを空けます
- インデントで「タブ文字」を使用することはできません
- コメント行は「#」を使用します
---
shared-infra_hosts:
controller-01:
# ↓ タブ文字は使用できない
affinity:
galera_container: 3
rabbit_mq_container: 3
ip: 172.29.236.10
# ↑ 位置のズレに注意
yamllintを使用することで作成したYAMLファイルの構文に誤りがないかチェックすることができます。 yamalintのインストール方法は以下のとおりです。
$ sudo pip install yamllint
yamllintの使用方法は以下のとおりです。
### YAMLファイルを個別に指定する
$ yamllint file1.yml file2.yml ...
### ディレクトリ内のYAMLファイルをすべて指定する
$ yamllint .