OpenStack All In One構築手順書(簡易版) Okinawa Open Laboratory Index 1. OpenStack All-In-One Deployment with Package 2. OpenStack All-In-One Deployment with Chef 3. テナントの作成〜インスタンスの起動まで 1. CLI版 2. Horizon版 4. Exercise 1. インスタンスへVNCアクセスを試す 2. OpenStack間のネットワーク接続を試す 5. Knowhow Okinawa Open Laboratory 2 Environment n OpenStack All in One External Network 192.168.252.0/24 eth1 Controller Supporting Service Database MySQL Message RabbitMQ Compute Basic Service Compute Nova with KVM Basic Service Identity Keystone Image Glance Compute Nova Networking Neutron Dashboard Horizon Management Network 10.30.1.0/24 Okinawa Open Laboratory eth0 Network Basic Service Networing ML2-Plugin OVS-Agent L3 Agent DHCP-Agent eth2 Internal Network 10.1.10.0/24 3 本紙の記述について 緑字は補足です # description “$”/”#”は、プロンプト $ commands # commands “#”は、管理者ユーザ(root権限あり)で実行 “赤字”は、入力時に変更する箇所 # commands xxxxx コマンド入力時の改行は” \”(バックスラッシュ)で資料上は表記しています # keystone service-create --name keystone --type identity \ --description "OpenStack Identity" “Check”については、確認することをおすすめします。 Check!! “Reference”については、補足説明が記載されています。 Reference!! Okinawa Open Laboratory 4 コマンドリファレンス viコマンドによるテキスト編集(本書で使う基本操作) コマンド 動作 i 入力モード :w 上書き :q 終了 yy 行をコピー p 貼り付け /hogehoge hogehogeを検索(“N” or “Shift N”で移動) esc 現在のモードを終了 sedコマンドによる文字列置換 文字列の全置換、抽出、削除、テキスト処理のできるコマンドです。 ## sample.txtのファイル内の文字列「before」を「after」に置換するサンプル記述 $ sed -i 's/hogehoge/aftor/’ sample.txt EOF(End of File) を利用しコマンドをまとめて(<< EOF から EOFまで)入力します ##DBに接続後にcreate~grant設定まで実行するサンプル記述 $ mysql -u root -p << EOF create database glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'<Management-IP>' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'password'; EOF Okinawa Open Laboratory 5 OpenStack All-In-One Deployment with Package Okinawa Open Laboratory To configure prerequisites OpenStack Configサンプルのダウンロード $ sudo su # 管理者ユーザ(root権限あり)に変更 # apt-get -y install git ## git cloneはファイルなどをgithubからダウンロードします # git clone https://github.com/matakichi/openstack-deploy.git ディレクトリ構成 openstack-deploy - all-in-one - keystone - glance - nova - neutron - horizon - tools Okinawa Open Laboratory # この構成については今後変更になる可能性があります # All-In-One構成のための各サービスの設定ファイルが格納されています 7 To configure prerequisites ネットワークの設定 # vi /etc/sysctl.conf …(省略)… net.ipv4.ip_forward=1 net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.rp_filter=0 …(省略)… # sysctl -p #追加 #追加 #追加 #上記ファイルの設定を反映させる(反映結果が表示される) Junoリポジトリの登録 # echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu trusty-updates/juno main" >> \ /etc/apt/sources.list.d/ubuntu-cloud-archive-juno-trusty.list # apt-get -y install ubuntu-cloud-keyring # apt-get update && apt-get -y dist-upgrade #選択画面が表示された場合は、デフォルトで<Enter> Okinawa Open Laboratory 8 Deploy Supporting Service MySQL インストール # apt-get -y install python-mysqldb mysql-server ※ここで、“root”の初期パスワード入力が求められます。パスワードはhandsonに設定してください。 MySQLの設定 # vi /etc/mysql/my.cnf …(省略)… [mysqld] bind-address = 0.0.0.0 default-storage-engine = innodb innodb_file_per_table collation-server = utf8_general_ci init-connect = 'SET NAMES utf8' character-set-server = utf8 …(省略)… #変更 #追加 #追加 #追加 #追加 #追加 # service mysql restart Message Queueのインストール # apt-get -y install rabbitmq-server Reference!! [Appendix] Message Queueを参照 Okinawa Open Laboratory 9 Deploy Identity Services(Keystone) Horizon (Dashboard) 各種API Neutron 仮想ネットワーク制御 仮想ルータ、仮想L2 仮想ロードバランサ Nova ハイパーバイザー制御 仮想サーバ作成・削除 Ironic ベアメタル プロビジョニング Glance イメージ スナップショット管理 仮想マシンのテンプレート 設定済みイメージのスナップショット Cinder ブロックストレージ制 御 仮想ボリューム Swift オブジェクト ストレージ Keystone 統合認証 Okinawa Open Laboratory 物理サーバ ReST入出力ファイルストア レプリケーション、遠隔地分散 10 Keystone データベースの作成 # mysql -u root -p << EOF create database keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'<Management-IP>' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'password'; EOF Enter password: #パスワードはhandson Keystoneのインストール # apt-get install -y keystone python-keystoneclient Reference!! [Appendix] MySQLを参照 Config ~ DB同期 # cp ~/openstack-deploy/all-in-one/keystone/keystone.conf /etc/keystone/keystone.conf # sed -i 's/##management-ip##/<Management-IP>/' /etc/keystone/keystone.conf # su -s /bin/sh -c "keystone-manage db_sync" keystone # DB同期(この時テーブルが作成される) Check!! DB同期前と同期後でテーブルを確認してみよう! $mysql -u keystone -p keystone(pass:password) > show tables; Okinawa Open Laboratory 11 Keystone コンフィグファイルの適用(サービス再起動) # rm /var/log/keystone/* # rm -f /var/lib/keystone/keystone.db # service keystone restart Okinawa Open Laboratory # サービス再起動前にログを削除する # 今回は、SQLiteは使わないため削除する # keystone サービス再起動 12 Keystone 認証スクリプトの活用 # vi ~/openstack-deploy/tools/credentials endpoint="<Management-IP>” os_token=”admin" ※他の項目は適宜変更すること # less /etc/keystone/keystone.conf admin_tokenの設定値に変更する > Credentialsについて 各種APIで使用しているKeystone 認証のため以下の様な環境変数を設定している export OS_SERVICE_ENDPOINT=http://192.168.1.1:35357/v2.0 export OS_USERNAME=”admin" Positional arguments: secret 特殊認証を使う tenant user/passwordを使った認証 Credentials options: --token <admin-token> 特殊認証用のtokenを設定 --tenant <auth-tenant-name> 認証対象のテナントの指定 --user <auth-username> 認証対象のユーザーの指定 --pass <auth-password> 認証対象のパスワード指定 --endpoint <auth-endpoint> 認証用のendpointの指定 Other options: --help 使用方法 ※2015/05/21時点 *環境変数の詳細については、こちらを参照 http://docs.openstack.org/ja/user-guide/content/cli_openrc.html Okinawa Open Laboratory 13 Keystone Keystone実行のために管理者トークンを読み込む # source ~/openstack-deploy/tools/credentials secret Admin(管理者)のテナント、ユーザ、ロール(権限)の作成、付与 ## テナントの作成 # keystone tenant-create --name admin --description "Admin Tenant" ## 新しいユーザの作成 # keystone user-create --name admin --pass admin ## 新しい権限の作成 # keystone role-create --name admin # keystone role-create --name _member_ ## ユーザーに権限を付与 # keystone user-role-add --user admin --tenant admin --role admin # keystone user-role-add --user admin --tenant admin --role _member_ Check!! コマンドの結果を確認する 各サービス用のテナントを作成 # keystone tenant-create --name service --description "Service Tenant" Okinawa Open Laboratory 14 Keystone エンドポイントの登録 ## keystone認証のサービスを登録 # keystone service-create --name keystone --type identity \ --description "OpenStack Identity" ##エンドポイントの作成 # keystone endpoint-create \ --service-id $(keystone service-list | awk '/ identity / {print $2}') \ --publicurl http://<Management-IP>:5000/v2.0 \ --internalurl http://<Management-IP>:5000/v2.0 \ --adminurl http://<Management-IP>:35357/v2.0 \ --region regionOne Reference!! [Appendix]Endpointを参照 Check!! コマンドの結果を確認する Okinawa Open Laboratory 15 Keystone Keystone 登録情報の確認(登録した情報と一致しているか確認しておく) # source ~/openstack-deploy/tools/credentials tenant --tenant admin # 管理者ユーザに切り替える # keystone tenant-list # keystone user-list Okinawa Open Laboratory ※参考 16 Keystone Keystone 登録情報の確認(登録した情報と一致しているか確認しておく) # keystone service-list # keystone endpoint-list Okinawa Open Laboratory 対応 ※参考 17 Deploy Image Services(Glance) Horizon (Dashboard) 各種API Neutron 仮想ネットワーク制御 仮想ルータ、仮想L2 仮想ロードバランサ Nova ハイパーバイザー制御 仮想サーバ作成・削除 Ironic ベアメタル プロビジョニング Glance イメージ スナップショット管理 仮想マシンのテンプレート 設定済みイメージのスナップショット Cinder ブロックストレージ制 御 仮想ボリューム Swift オブジェクト ストレージ Keystone 統合認証 Okinawa Open Laboratory 物理サーバ ReST入出力ファイルストア レプリケーション、遠隔地分散 18 Glance データベースの作成 # mysql -u root -p << EOF create database glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'<Management-IP>' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'password'; EOF Enter password: #パスワードはhandson glanceユーザーの作成、ロール設定 # keystone user-create --name glance --pass glance # keystone user-role-add --user glance --tenant service --role admin エンドポイントの登録 # keystone service-create --name glance --type image \ --description "OpenStack Image Service” #keystone endpoint-create \ --service-id $(keystone service-list | awk '/ image / {print $2}') \ --publicurl http://<Management-IP>:9292 \ --internalurl http://<Management-IP>:9292 \ --adminurl http://<Management-IP>:9292 \ --region regionOne Okinawa Open Laboratory 19 Glance Glanceのインストール # apt-get -y install glance python-glanceclient Glanceの設定変更 # cp ~/openstack-deploy/all-in-one/glance/glance-api.conf /etc/glance/glance-api.conf # cp ~/openstack-deploy/all-in-one/glance/glance-registry.conf /etc/glance/glance-registry.conf # sed -i "s/##management-ip##/<Management-IP>/" /etc/glance/glance-api.conf # sed -i "s/##management-ip##/<Management-IP>/" /etc/glance/glance-registry.conf # su -s /bin/sh -c "glance-manage db_sync" glance # rm /var/log/glance/* Check!! # rm -f /var/lib/glance/glance.sqlite DB同期前と同期後でテーブルを確認してみよう! $ mysql -u glance -p glance (pass:password) サービスの再起動 > show tables; # service glance-registry restart # service glance-api restart Okinawa Open Laboratory 20 Glance 動作確認 # glance image-list # コマンド結果は0件 # glance image-create --name="cirros-0.3.4-x86_64" --disk-format=qcow2 \ --container-format=bare --is-public=true \ --copy-from http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img # glance image-list Check!! "cirros-0.3.4-x86_64"が 登録されていること Okinawa Open Laboratory 21 Deploy Compute Services(Nova) Horizon (Dashboard) 各種API Neutron 仮想ネットワーク制御 仮想ルータ、仮想L2 仮想ロードバランサ Nova ハイパーバイザー制御 仮想サーバ作成・削除 Ironic ベアメタル プロビジョニング Glance イメージ スナップショット管理 仮想マシンのテンプレート 設定済みイメージのスナップショット Cinder ブロックストレージ制 御 仮想ボリューム Swift オブジェクト ストレージ Keystone 統合認証 Okinawa Open Laboratory 物理サーバ ReST入出力ファイルストア レプリケーション、遠隔地分散 22 Nova データベースの作成 # mysql -u root -p << EOF create database nova; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'<Management-IP>' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'password'; EOF Enter password: #パスワードはhandson novaのインストール # apt-get install -y nova-api nova-cert nova-conductor nova-consoleauth \ nova-novncproxy nova-scheduler python-novaclient nova-compute sysfsutils KVMデフォルトネットワークの削除 # virsh net-destroy default # virsh net-autostart default --disable 192.168.122.0/24のネットワークが自動で 作成されるため、削除しておく novaの設定変更 # cp ~/openstack-deploy/all-in-one/nova/nova.conf /etc/nova/nova.conf # sed -i 's/##management-ip##/<Management-IP>/' /etc/nova/nova.conf # su -s /bin/sh -c "nova-manage db sync" nova Check!! # rm /var/lib/nova/nova.sqlite DB同期前と同期後でテーブルを確認してみよう! # rm /var/log/nova/* # mysql -u nova -p nova (pass:password) > show tables; Okinawa Open Laboratory 23 Nova novaユーザーの作成 # keystone user-create --name=nova --pass=nova # keystone user-role-add --user=nova --tenant=service --role=admin エンドポイントの登録 # keystone service-create --name=nova --type=compute \ --description="OpenStack Compute" # keystone endpoint-create \ --service-id=$(keystone service-list | awk '/ compute / {print $2}') \ --publicurl=http://<Management-IP>:8774/v2/%\(tenant_id\)s \ --internalurl=http://<Management-IP>:8774/v2/%\(tenant_id\)s \ --adminurl=http://<Management-IP>:8774/v2/%\(tenant_id\)s サービスの再起動 # service nova-api restart # service nova-cert restart # service nova-consoleauth restart # service nova-scheduler restart # service nova-conductor restart # service nova-novncproxy restart # service nova-compute restart Okinawa Open Laboratory 24 Nova 動作確認 # nova service-list Check!! Stateが“up”となっていることを確認 Okinawa Open Laboratory 25 Deploy Network Services(Neutron) Horizon (Dashboard) 各種API Neutron 仮想ネットワーク制御 仮想ルータ、仮想L2 仮想ロードバランサ Nova ハイパーバイザー制御 仮想サーバ作成・削除 Ironic ベアメタル プロビジョニング Glance イメージ スナップショット管理 仮想マシンのテンプレート 設定済みイメージのスナップショット Cinder ブロックストレージ制 御 仮想ボリューム Swift オブジェクト ストレージ Keystone 統合認証 Okinawa Open Laboratory 物理サーバ ReST入出力ファイルストア レプリケーション、遠隔地分散 26 Neutron データベースの作成 # mysql -u root -p << EOF create database neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron’@' <Management-IP>' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'password'; EOF Enter password: #パスワードはhandson neutronユーザー作成 # keystone user-create --name neutron --pass neutron # keystone user-role-add --user neutron --tenant service --role admin エンドポイントの登録 # keystone service-create --name neutron --type network --description "OpenStack Networking" # keystone endpoint-create \ --service-id $(keystone service-list | awk '/ network / {print $2}') \ --publicurl http://<Management-IP>:9696 \ --adminurl http://<Management-IP>:9696 \ --internalurl http://<Management-IP>:9696 Okinawa Open Laboratory 27 Neutron neutronのインストール # apt-get install -y neutron-server neutron-plugin-ml2 python-neutronclient \ neutron-plugin-openvswitch-agent neutron-l3-agent neutron-dhcp-agent 設定ファイルの書き換え #cp ~/openstack-deploy/all-in-one/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini #cp ~/openstack-deploy/all-in-one/neutron/dnsmasq-neutron.conf /etc/neutron/dnsmasq-neutron.conf #cp ~/openstack-deploy/all-in-one/neutron/l3_agent.ini /etc/neutron/l3_agent.ini #cp ~/openstack-deploy/all-in-one/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini #cp ~/openstack-deploy/all-in-one/neutron/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini #cp ~/openstack-deploy/all-in-one/neutron/neutron.conf /etc/neutron/neutron.conf # keystone tenant-list # Service Tenant のIDを確認 # sed -i 's/##management-ip##/<Management-IP>/' /etc/neutron/neutron.conf # sed -i 's/##management-ip##/<Management-IP>/' /etc/neutron/metadata_agent.ini # sed -i 's/##nova_admin_tenant_id##/Service Tenant ID/' /etc/neutron/neutron.conf 下記の様なIDが表示される $ keystone tenant-get service +-------------+-----------------------------------------------------+ | Property | Value | +-------------+-----------------------------------------------------+ | description | Service Tenant | | enabled | True | | id | f727b5ec2ceb4d71bad86dfc414449bf | | name | service | +-------------+-----------------------------------------------------+ Okinawa Open Laboratory 28 Neutron DB投入 # su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron # rm /var/lib/neutron/neutron.sqlite OVSの設定 # service openvswitch-switch restart # ovs-vsctl add-br br-ex # ovs-vsctl add-port br-ex eth0 Okinawa Open Laboratory Check!! DB同期前と同期後でテーブルを確認してみよう! # mysql -u neutron -p neutron(pass:password) > show tables; 29 Neutron Network Interfaceの設定変更 # vi /etc/network/interfaces …(省略)… #auto eth0 #iface eth0 inet dhcp #コメントアウト #コメントアウト auto eth0 iface eth0 inet manual up ip link set dev $IFACE up down ip link set dev $IFACE down auto br-ex iface br-ex inet static address <<External IPアドレス>> network 192.168.252.0 netmask 255.255.255.0 broadcast 192.168.252.255 gateway 192.168.252.1 dns-nameservers 8.8.8.8 ...(省略)… # ifconfig eth0 0.0.0.0 up # ifup br-ex Okinawa Open Laboratory 30 Note br-exのMACアドレスがeth0(External-IP)と異なる場合、eth0(External-IP)のMAC ADDRESSにあわせる。 Ifconfigを入力し、br-exとeth0(External-IP)のMACアドレスを確認する (下図参照) 対処法 以下のコマンドで変更 # ovs-vsctl set bridge br-ex other-config:hwaddr=eth0(External-IP)のMACアドレス # ifconfig …(省略)… br-ex Link encap:Ethernet HWaddr fa:16:3e:71:e3:45 inet addr:192.168.252.13 Bcast:192.168.252.255 Mask:255.255.255.0 inet6 addr: fe80::94f2:60ff:fe70:a1cb/64 Scope:Link UP BROADCAST RUNNING MTU:1500 Metric:1 …(省略)… eth0 Link encap:Ethernet HWaddr fa:16:3e:71:e3:45 inet6 addr: fe80::f816:3eff:fe71:e345/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:64184 errors:0 dropped:0 overruns:0 frame:0 TX packets:63910 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12434085 (12.4 MB) TX bytes:9498356 (9.4 MB) …(省略)… Okinawa Open Laboratory 31 Neutron コンフィグの適用(サービス再起動) # rm /var/log/neutron/* # service nova-api restart # service nova-scheduler restart # service nova-conductor restart # service neutron-server restart ※最後はneutron(server)の再起動 # service neutron-plugin-openvswitch-agent restart # service neutron-l3-agent restart # service neutron-dhcp-agent restart # service neutron-metadata-agent restart # service nova-compute restart ※最後はnova(compute)の再起動 Okinawa Open Laboratory 32 Neutron 動作確認 # neutron agent-list Check!! 4つのagentが表示され Jマークが表示されてればOK Okinawa Open Laboratory 33 Deploy Dashboard(Horizon) Horizon (Dashboard) 各種API Neutron 仮想ネットワーク制御 仮想ルータ、仮想L2 仮想ロードバランサ Nova ハイパーバイザー制御 仮想サーバ作成・削除 Ironic ベアメタル プロビジョニング Glance イメージ スナップショット管理 仮想マシンのテンプレート 設定済みイメージのスナップショット Cinder ブロックストレージ制 御 仮想ボリューム Swift オブジェクト ストレージ Keystone 統合認証 Okinawa Open Laboratory 物理サーバ ReST入出力ファイルストア レプリケーション、遠隔地分散 34 Horizon パッケージインストール # apt-get install -y openstack-dashboard apache2 libapache2-mod-wsgi \ memcached python-memcache #DefaultでUbuntu用テーマが適用される。OpenStack標準テーマを利用する場合は削除(任意) # apt-get remove -y openstack-dashboard-ubuntu-theme 設定ファイルの書き換え # cp ~/openstack-deploy/all-in-one/openstack-dashboard/local_settings.py \ /etc/openstack-dashboard/local_settings.py # sed -i 's/##management-ip##/<Management-IP>/' /etc/openstack-dashboard/local_settings.py # service apache2 restart 確認 ブラウザから以下のアドレスにアクセスし ログイン画面が表示されるか確認 http://外部接続用IP/horizon Okinawa Open Laboratory 35 Service components to verify # nova service-list ↑5つのサービスが’up’となっていることを確認する # neutron agent-list ↑4つのエージェントが’J’となっていることを確認する Okinawa Open Laboratory 36 お疲れさまです。 これで構築完了です。 Next Step(〜インスタンスの起動まで) これであなたもOpenStacker Okinawa Open Laboratory 37 OpenStack All-In-One Deployment with Chef Okinawa Open Laboratory 事前準備 Chef をオムニバスインストーラでインストール $ sudo su # apt-get -y install curl git autoconf # curl -L https://www.opscode.com/chef/install.sh | bash berkshelf をインストール いくつかwarningが出るが気にしない # /opt/chef/embedded/bin/gem install berkshelf --no-ri --no-rdoc 必要なパッケージのインストール # apt-get -y install build-essential zlib1g-dev libssl-dev libreadline-dev ruby-dev libxml2-dev libxslt-dev g++ 設定の変更 # sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf # sed -i 's/#net.ipv4.conf.default.rp_filter=0/net.ipv4.conf.default.rp_filter=0/' /etc/sysctl.conf # sed -i 's/#net.ipv4.conf.all.rp_filter=0/net.ipv4.conf.all.rp_filter=0/' /etc/sysctl.conf # sysctl -p Okinawa Open Laboratory 39 デプロイ allinone.jsonの作成 # sed -i 's/##management-ip##/Management-IP/’ ~/handson-allinone.json # sed -i 's/##internal-ip##/Internal-IP/’ ~/handson-allinone.json Interface = ethxx # sed -i ‘s/##internal-interface##/Internal-Interface/’ ~/handson-allinone.json # sed -i ‘s/##external-interface##/External-Interface/’ ~/handson-allinone.json # sed -i ‘s/##management-interface##/Managemet-Interface/’ ~/handson-allione.json # vi handson-allinone.json #ファイルの中に##xxxxxx-xxxxx##の名前がないことを確認 # mv ~/handson-allinone.json ~/openstack-chef-repo/environments デプロイ # cd ~/openstack-chef-repo #必ずここのディレクトリに移動する # chef-client -z # knife node -z run_list add Hostname 'role[allinone-compute]' # chef-client -z -E handson-allinone Okinawa Open Laboratory 40 Note br-exの設定後に外部通信が切れるため、エラーで終了する 原因:eth0がbr-exにブリッジされることによってeth0のIPアドレス経由で通信ができなくなります 対処法 # vi /etc/network/interfaces …(省略)… # The primary network interface auto eth0 #iface eth0 inet dhcp iface eth0 inet manual up ip link set dev $IFACE up down ip link set dev $IFACE down …(省略)… auto br-ex iface br-ex inet static address <<eth0のIPアドレス>> network 192.168.252.0 netmask 255.255.255.0 broadcast 192.168.252.255 gateway 192.168.252.1 dns-nameservers 8.8.8.8 # ifconfig eth0 0.0.0.0 up # ifup br-ex # chef-client -z -E handson-allinone Okinawa Open Laboratory #再度実行 41 Note br-exのMACアドレスがeth0と異なる場合、eth0のMAC ADDRESSにあわせる。 Ifconfigを入力し、br-exとeth0のMACアドレスを確認する(下図参照) 対処法 以下のコマンドで変更 # ovs-vsctl set bridge br-ex other-config:hwaddr=eth0のMACアドレス # ifconfig …(省略)… br-ex Link encap:Ethernet HWaddr fa:16:3e:71:e3:45 inet addr:192.168.252.13 Bcast:192.168.252.255 Mask:255.255.255.0 inet6 addr: fe80::94f2:60ff:fe70:a1cb/64 Scope:Link UP BROADCAST RUNNING MTU:1500 Metric:1 …(省略)… eth0 Link encap:Ethernet HWaddr fa:16:3e:71:e3:45 inet6 addr: fe80::f816:3eff:fe71:e345/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:64184 errors:0 dropped:0 overruns:0 frame:0 TX packets:63910 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12434085 (12.4 MB) TX bytes:9498356 (9.4 MB) …(省略)… Okinawa Open Laboratory 42 インスタンスの起動 Next Step(〜インスタンス起動まで CLI (p44〜49) Horizon (p50〜72) Okinawa Open Laboratory 43 テナント作成~インスタンスの起動まで with CLI Okinawa Open Laboratory 44 テナントの作成〜ユーザの作成 ## テナントを作成(テナント名:handson) # keystone tenant-create –name handson ## ユーザを作成(ユーザ名:handson-user/パスワード:handson) # keystone user-create --name handson-user --pass handson ## ユーザをテナントに所属(ユーザ(handson-user)をテナント(handson)に”_member_”権限で所属させる) # keystone user-role-add --user handson-user --tenant handson --role _member_ ## テナントの確認 # keystone tenant-get handson ## ユーザの確認 # keystone user-get handson-user ## 権限の確認 # keystone user-role-list --user handson-user --tenant handson ## テナントとユーザを切り替えます # source ~/openstack-deploy/tools/credentials tenant --tenant handson ## 以下のコマンドが実行後handsonテナントのみ表示されれば変更完了です # keystone tenant-list Okinawa Open Laboratory 45 仮想ネットワークの作成 ## ネットワークの作成 # neutron net-create internal1 ## サブネットの作成(ネットワークとの対応付け) # neutron subnet-create internal1 -name internal1-subnet 192.168.10.0/24 --no-gateway ## ネットワークの確認 # neutron net-show internal1 ## サブネットの確認 # neutron subnet-show internal1-subnet それぞれの出力結果(id)から 相互に対応していることが確認できます。 Okinawa Open Laboratory 46 セキュリティグループの設定 ## ICMPを許可 # neutron security-group-rule-create --protocol icmp --direction ingress default ## 22(SSH)を許可 # neutron security-group-rule-create --protocol tcp --port-range-min 22 --port-range-max 22 --direction ingress default セキュルティグループとは、外部からのアクセスを制限をする ファイアウォールのようなものです。 Okinawa Open Laboratory 47 インスタンスの起動 ## インスタンスの起動 # nova boot --flavor m1.tiny --image cirros-0.3.4-x86_64 --nic net-id=internal1ネットワークID \ --security-group default internal1-host ## 起動の確認 # nova list Okinawa Open Laboratory Glanceの動作確認時に登録した イメージを指定 # neutron net-show internal1 の出力結果を参照 48 インスタンスの疎通確認 ACTIVE/RUNNINGであればOK #nova list # ip netns list #以下のように表示されるqdhcp-xxx-xxx-xxx-xxx-xxxxを一行分コピーします。 ip netnsについては Openflow編で紹介します # ip netns exec <上記でコピーしたqdhcp> ping <インスタンス起動時に確認したIPアドレス> #ip netns exec <上記でコピーしたqdhcp> ssh <インスタンス起動時に確認したIPアドレス> -l cirros Password: ccubswin:) $ifconfig #IPアドレスがinternal1-hostのIPアドレスかを確認 今回はcirrosというOSを使って起動しています。 Username: cirros Password: cubswin:) ※疎通が可能となるまで(OSが起動するまでの間)しばらく時間を要します Okinawa Open Laboratory 49 テナント作成~インスタンスの起動まで with Horizon Okinawa Open Laboratory ログイン手順 Openstackにwebブラウザからログイン (アドレス: http://外部接続用IPアドレス/horizon) Username: admin Password: admin Okinawa Open Laboratory 51 テナントの作成(1) ① ユーザー管理 → プロジェクトをクリック ②ネットワークの作成をクリック Okinawa Open Laboratory 52 テナントの作成(2) ③ 名前「handson」 を入力し、プロジェクトメンバータブをクリック Okinawa Open Laboratory 53 テナントの作成(3) ④すべてのユーザーからadminユーザー右側の+ボタンを押し プロジェクトメンバーに追加します。 Okinawa Open Laboratory 54 テナントの作成(4) ⑤ をクリック後、 adminをクリックしadminユーザーをプロジェクトメンバーに追加する ⑥「プロジェクトの作成」をクリック Okinawa Open Laboratory 55 テナントの作成(5) ⑦ プロジェクト「handson」が作成されたことを確認し一度ログアウトします Okinawa Open Laboratory 56 テナントの作成(6) ⑧再度ログイン(user: admin/pass: admin)後 プロジェクト「admin」をクリックすると、プロジェクト一覧が表示されます。 「handson」をクリックし、プロジェクトをadminからhandsonへ変更します。 Okinawa Open Laboratory 57 テナントの作成(7) ⑨ プロジェクトが「handson」となったことを確認 Okinawa Open Laboratory 58 セキュリティグループの追加(1) ① メニューからコンピュート → アクセスとセキュリティーをクリック ②ルールの管理をクリック Okinawa Open Laboratory 59 セキュリティグループの追加(2) ③ルールの追加をクリック Okinawa Open Laboratory 60 セキュリティグループの追加(3) ④ルールから「ssh」を選択し追加をクリック ⑤同様の手順でルールから「All ICMP」を 選択し追加をクリック 61 Okinawa Open Laboratory 61 セキュリティグループの追加(4) ⑥ICMPとSSHが追加されたことを確認 Okinawa Open Laboratory 62 ネットワークの作成(1) ①左側メニューから プロジェクト → ネットワークをクリック ②ネットワークの作成をクリック Okinawa Open Laboratory 63 ネットワークの作成(2) ③ネットワーク名「internal1」を入力し、次へをクリック Okinawa Open Laboratory 64 ネットワークの作成(3) ④サブネット名「internal1-subnet」入力 ⑤ネットワークアドレス「192.168.10/24」 を入力 ⑥「ゲートウェイなし」にチェックし、次をクリック Okinawa Open Laboratory 65 ネットワークの作成(4) ⑦DHCP有効にチェック ⑧作成ボタン押下 ネットワークが作成されました。 Okinawa Open Laboratory 66 インスタンス作成(1) ②インスタンスの起動をクリック ①左側メニューのプロジェクトからインスタンスをクリック Okinawa Open Laboratory 67 インスタンス作成(2) インスタンス(仮想マシン)の作成 詳細タブ ③インスタンス名「internal1-host」を入力 ④以下の通りに選択し、 「アクセスとセキュリティー」タブをクリック ・フレーバー: m1.tiny ・インスタンス数: 1 ・インスタンスのブートソース: イメージから起動 ・イメージ名: cirros-0.3.4-x86_64(12.7MB) Okinawa Open Laboratory 68 インスタンス作成(3) インスタンス(仮想マシン)の作成 アクセスとセキュリティータブ ⑤defaultにチェックが入っていることを確認 Okinawa Open Laboratory 69 インスタンス作成(4) インスタンス(仮想マシン)の作成 ネットワークタブ ⑦起動をクリック ⑥先ほど作成した「internal1」が 選択済みネットワークに入っていることを確認 入っていない場合は「利用可能なネットワークの欄から選択する Okinawa Open Laboratory 70 インスタンス作成(5) インスタンス(仮想マシン)の作成 作成の完了 稼働中になればOK! 次ページで使うので 控えておいてください Internal1-host IPアドレス: 192.168.10.___ Okinawa Open Laboratory 71 インスタンス(仮想マシン)の疎通確認 ここからコマンドラインの操作に戻ります。 ACTIVE/RUNNINGであればOK #nova list # ip netns list #以下のように表示されるqdhcp-xxx-xxx-xxx-xxx-xxxxを一行分コピーします。 ip netnsについては Openflow編で紹介します # ip netns exec <上記でコピーしたqdhcp> ping <インスタンス起動時に確認したIPアドレス> #ip netns exec <上記でコピーしたqdhcp> ssh <インスタンス起動時に確認したIPアドレス> -l cirros Password: cubswin:) $ifconfig #IPアドレスがinternal1-hostのIPアドレスかを確認 今回はcirrosというOSを使って起動しています。 Username: cirros Password: cubswin:) ※疎通が可能となるまで(OSが起動するまでの間)しばらく時間を要します Okinawa Open Laboratory 72 OpenStack上でインスタンスが 起動することが確認できました! Okinawa Open Laboratory 73 Exercise!! Okinawa Open Laboratory Horizonからvncアクセスするためには nova.confの設定を確認し、異なれば修正します。 # vi /etc/nova/nova.conf [DEFAULT] novncproxy_host=ホストのインターネット側IPアドレス novncproxy_port=6080 vncserver_listen = ローカルIP vncserver_proxyclient_address = ローカルIP novncproxy_base_url=http://ホストの外部接続用IPアドレス:6080/vnc_auto.html 仕組み 1. リクエスト 2. get vnc console nova-api 5. URL with token 4. authorize console compute 3. token作成依頼 6. ブラウズ URL with token 7. tokenの確認 browser Okinawa Open Laboratory 8. Proxy開始 nova-consoleauth libvirt driver 75 OpenStack間のネットワークを接続(VPNaaS) パッケージインストール # apt-get install openswan neutron-plugin-vpn-agent 注)ここで neutron-l3-agentはremoveされます。 設定ファイルの書き換え # cat /etc/neutron/vpn_agent.ini [DEFAULT] interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver [vpnagent] vpn_device_driver=neutron.services.vpn.device_drivers.ipsec.OpenSwanDriver [ipsec] ipsec_status_check_interval=60 Okinawa Open Laboratory 76 Appendix Okinawa Open Laboratory Endpointについて OpenStackの各サービスは、 REST API(HTTPによるリクエスト)を実装しており サービス間のやりとりはもちろんのこと ユーザからも実行することで、GUIに頼らない 操作が可能となっています。 REST API http://****:8774 http://****:9696 Public/Admin Public/Admin Nova Neutron http://****:9292 Public/Admin Public/Admin Public/Admin Public/Admin Glance Horizon Etc... Etc... Okinawa Open Laboratory 78 Message Queueについて 各種APIからのRESTを介した要求などは基本的にMessage Queueを介して メッセージのやりとりが行われます。 Message Queueを介すことで各モジュール間がより疎結合な構成になるようになっています。 一般的なRPC(リモートプロシージャコール)といわれるもので 各要求の用途に応じて要求先の結果を待ち受けたり、非同期で実行したりといったことも行っています。 scheduler *-api Queue compute compute.* network-* neutron ※メッセージの宛先、送受信、ルーティング等の詳細については割愛します。 Okinawa Open Laboratory 79 MySQL(GRANT) DBのユーザに対して、権限を設定します。 ## The GRANT statement grants privileges to MySQL user accounts. ## GRANT permisson ON database-name.table-name TO user-name INDENTIFIED BY 'password' # mysql -u root -p << EOF (MySQLインストール時に入力したパスワード) create database keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'10.10.10.10' IDENTIFIED BY 'hoge'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'hoge'; EOF 基本的には、下記の構文から成り立っています。 ## 全体 GRANT 権限 ON *.* TO user; ## DB単位 GRANT 権限 ON db_name.* TO user; ## テーブル単位 GRANT 権限 ON db_name.table_name TO user; Okinawa Open Laboratory 権限とパスワードをまとめて 設定している。 80 Know How Okinawa Open Laboratory • Logging 各コンフィグファイル(/etc/コンポーネント/*)のロギングレベルを設定し、サービス再起動します。 debug = True verbose = True log_dir=<このパスに出力される> • API 各API実行時に”--debug”オプションを付与することでより詳細なコンソールログが出力される。 # nova --debug list # neutron --debug net-list Okinawa Open Laboratory 82 • Networking(Neutron) ## Open vSwitchの確認 # ovs-vsctl show # ovs-dpctl show # ovs-dpctl dump-flows # ovs-ofctl dump-flows br-tun # ovs-ofctl dump-flows br-int ## パケット確認 # ip link add name snooper0 type dummy # ip link set dev snooper0 up # tcpdump -i <Internal Network Interface> -n ip proto gre # ovs-vsctl -- set Bridge br-tun mirrors=@m -- --id=@snooper0 \ get Port snooper0 -- --id=@patch-int get Port patch-int \ -- --id=@m create Mirror name=mymirror select-dst-port=@patch-int \ select-src-port=@patch-int output-port=@snooper0 ## Network Namespace内の確認 # ip netns show # ip netns exec **-***** ip a # ip netns exec **-***** ip link # ip netns exec **-***** route -n # ip netns exec **-***** iptables -L -t nat # ip netns exec **-***** tcpdump -nn -i qr-***** -t icmp Okinawa Open Laboratory 83 OpenStack構築マニュアル(参考) 本書執筆にあたり参考にしたURL http://docs.openstack.org/juno/install-guide/install/apt/openstack-install-guide-apt-juno.pdf Okinawa Open Laboratory 84
© Copyright 2025 ExpyDoc