OpenStackの構築についてひと通り書いたので、運用面についても色々と綴っていきたいと思います。
手始めに各種制限事項の確認と設定例です。
セキュリティ
セキュリティといっても小難しいものではなく、外部からインスタンスへのINPUT接続(NetworkNodeでのFORWARD)を通す条件の設定です。設定は単に iptables で実現されているので、NetworkNodeで iptables -L -v -n を打てば確認できます。OUTPUTや、インスタンス同士の接続は制限なく全てスルーになっています。
設定例としてこんな感じ。
最初はPing, SSH, HTTP だけでも通しておけばOK。
プロジェクトごとに設定し、必要があれば default 以外も作っておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# usage: nova secgroup-add-rule <secgroup> <ip-proto> <from-port> <to-port> # <cidr> nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 # Ping nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 # SSH nova secgroup-add-rule default tcp 80 80 0.0.0.0/0 # HTTP nova secgroup-add-rule default tcp 443 443 0.0.0.0/0 # HTTPS nova secgroup-add-rule default tcp 9418 9418 0.0.0.0/0 # Git nova secgroup-add-rule default tcp 50070 50070 0.0.0.0/0 # Hadoop NameNode GUI nova secgroup-add-rule default tcp 8088 8088 0.0.0.0/0 # Hadoop RedourceManager GUI nova secgroup-add-rule default tcp 19888 19888 0.0.0.0/0 # Hadoop JobHistory GUI nova secgroup-add-rule default tcp 3000 3000 0.0.0.0/0 # Rails nova secgroup-add-rule default tcp 2195 2195 0.0.0.0/0 # APNS (Apple Push Notification Service) # 確認 nova secgroup-list nova secgroup-list-rules default # プロジェクト切り替えて同上 export OS_TENANT_NAME=test |
Flavor (インスタンスタイプ)
デフォでEC2と同じ名前で登録されてますが、お好みで運用したいので全部消してから登録します。私が考慮した項目はこれらです。デフォルトFlavorを削除
nova flaver-delete や Horizon でサクッと消します。Flavor作成
変化点はvCPUとメモリで、それに合わせてIDと名前を決めています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# usage: nova flavor-create [--ephemeral <ephemeral>] [--swap <swap>] # [--rxtx-factor <factor>] [--is-public <is-public>] # <name> <id> <ram> <disk> <vcpus> nova flavor-create --swap 256 c1.m0.5 11 512 0 1 nova flavor-create --swap 256 c1.m1 12 1024 0 1 nova flavor-create --swap 256 c1.m2 13 2048 0 1 nova flavor-create --swap 256 c2.m1 21 1024 0 2 nova flavor-create --swap 256 c2.m2 22 2048 0 2 nova flavor-create --swap 256 c2.m4 23 4096 0 2 nova flavor-create --swap 256 c4.m2 41 2048 0 4 nova flavor-create --swap 256 c4.m4 42 4096 0 4 nova flavor-create --swap 256 c4.m8 43 8192 0 4 nova flavor-create --swap 256 c8.m4 81 4096 0 8 nova flavor-create --swap 256 c8.m8 82 8192 0 8 nova flavor-create --swap 256 c8.m16 83 16384 0 8 # 確認 nova flavor-list |
Quota
様々な上限値の設定です。プロジェクトごとの設定なので、テナントIDを取得しておきます。
(※テナント名では設定できません)
1 2 |
keystone tenant-list TENANT_ID=c6fc6cd1df2141b5a90ee246f734653b |
Nova
ComputeNodeのサーバスペックなどを考慮して設計します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# usage: nova quota-update [--instances <instances>] [--cores <cores>] # [--ram <ram>] [--volumes <volumes>] # [--gigabytes <gigabytes>] # [--floating-ips <floating-ips>] # [--fixed-ips <fixed-ips>] # [--metadata-items <metadata-items>] # [--injected-files <injected-files>] # [--injected-file-content-bytes <injected-file-content-bytes>] # [--injected-file-path-bytes <injected-file-path-bytes>] # [--key-pairs <key-pairs>] # [--security-groups <security-groups>] # [--security-group-rules <security-group-rules>] # <tenant-id> # デフォルト表示 nova quota-defaults # デフォルト設定は grep "quota_" /etc/nova/nova.conf # プロジェクトごとの設定 nova quota-update --instances 150 \ --cores 200 \ --ram 307200 \ --floating-ips 0 \ --security-groups 5 \ --security-group-rules 20 \ $TENANT_ID # 確認 nova quota-show --tenant $TENANT_ID |
Cinder
FolsomではNovaにあった項目が、Grizzlyから切りだされました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# usage: cinder quota-update [--volumes <volumes>] [--snapshots <snapshots>] # [--gigabytes <gigabytes>] # <tenant_id> # デフォルト表示 cinder quota-defaults $TENANT_ID # デフォルト設定は最初は書いていないがNova同様 quota_volumes などが存在する grep "quota_" /etc/cinder/cinder.conf # プロジェクトごとの設定 cinder quota-update \ --volumes 100 \ --gigabytes 2048 \ --snapshots 100 \ $TENANT_ID # 確認 cinder quota-show $TENANT_ID |
Quantum
RouterへのVM接続制限を回避するため必ず変更します。(デフォだとDHCP+49VMまでになるため)
また、quota_driver はデフォの ConfDriver だと設定ファイルしか見てくれないため、DbQuotaDriver に変更して quota-update を使えるようにしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# usage: quantum quota-update [-h] [-f {shell,table}] [-c COLUMN] # [--variable VARIABLE] [--prefix PREFIX] # [--request-format {json,xml}] # [--tenant-id tenant-id] [--network networks] # [--subnet subnets] [--port ports] # [--router routers] [--floatingip floatingips] # ... # プロジェクトごとの設定 quantum quota-update --tenant-id $TENANT_ID \ --router 1 \ --network 5 \ --subnet 10 \ --floatingip 10 \ --port 500 # 確認 quantum quota-show --tenant-id $TENANT_ID |
アクセスポリシー
OpenStackのpolicy.jsonを個別ユーザ仕様にする | 外道父の匠 に別途記載済みなので、そちらを参照してください。ウチでは開発環境として使ってるので、サーバが悲鳴をあげない程度に上限値を上げたり開放しているだけですが、本番環境とか製品としてだとかなり綿密に設計したり、機能不足を補ったりと大変なことになりそうです。
あとは上限値にひっかかったら検知してアラート飛ばすとかできたらもっと良いのですが、今のところ不要なので日々の状況レポートとかに留めています。レポートについてはまた別途書きたいと思います。