OpenStackの基礎

この記事ではOpenStackの基礎、概要について記載します。

##OpenStackとは？
クラウドコンピューティングを実現するためのソフトウェアの1つ。

###なぜクラウドコンピューティングなのか
昨今ビジネスの速度はとても速いため、事業を展開するスピード、変化に対する柔軟性が求められている。
このような要件に応えるために、スピード感を持ってサービスの構築、展開、アップデートが可能なクラウドコンピューティング技術が注目されている。

###クラウドコンピューティングとは
サーバー、ストレージ、ネットワーク、アプリケーション、サービスなどのリソースにどこからでも簡単にアクセスできるもののことを言う。
クラウドコンピューティングには、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドの3種類がある。

###クラウド活用によるビジネスリスクの回避
新しくサービスを立ち上げる際は、そのサービスが儲かるか、どんなリスクがあるか分析した上で開発します。しかし、本当に儲かるかは実際にサービスをリリースしないと分からないのが現実です。クラウド登場以前であれば、膨大なコストをかけてハードウェアを購入、開発して。。。といったように、事業の可能性が見切れていない状況で大きな初期投資をせざるを得ませんでした。
しかし、パブリッククラウドであればハードウェアの購入が不要であるため初期費用を抑えられます。プライベートクラウドであれば、空いたリソースに別のサービスを割り当てるなど柔軟な対応が可能です。また、サービスの拡張も素早く行えます。

###ハイブリッドクラウドの活用方法
パブリッククラウドとプライベートクラウドはそれぞれ長所短所があります。例えば、気密性の高い情報はプライベートクラウドで扱い、気密性の低い情報はパブリッククラウドで扱うなどといった具合です。
とはいえ、パブリッククラウドも様々なセキュリティ対策を行っています。ですので、パブリックとプライベートの使い分けについてはセキュリティーポリシー考慮しつつ決める形になるでしょう。

##OpenStackとは
Iaasを実現するオープンソースのクライド基盤ソフトです。オープンソースなので基本的にはライセンス費用はかかりませんが、バグ修正や付加価値のある機能を盛り込んだ有償ライセンスもあります。

無料で使えるライセンスはコミュニティ版と言います。コミュニティ版は1年に2回、春と秋にリリースされます。

###コミュニティ版のOpenStack
コミュニティ版のOpenStackは、稼働するOSによって分類できます。代表的なものはUbuntu Serverで稼働するOpenStackがあります。Ubuntu以外ではRHELの互換であるCentOS上で稼働させることのできるRDOなどがあります。また、SLESやopenSUSEで稼働するOpenStackも存在します。

###商用版OpenStack
コミュニティ版とは異なり、ベンダーサポートを受けることが可能です。

##OpenStackのコンポーネント
OpenStackの代表的なコンポーネントを示す。

|コンポーネント  |主な機能  |
|---|---|---|
|Keystone  |ユーザー認証、キーペアの管理、他の認証機構との連携など  |
|Barbican  |鍵管理サービスの提供  |
|Glance  |仮想マシンイメージの管理  |
|Nova  |物理マシン、仮想マシン、コンテナの管理、インスタンスの作成、起動、終了、VNC画面表示など  |
|Neutron  |SDNの管理、仮想ルーター、ポート、ネットワーク、サブネット、IPアドレスなどの管理  |
|Astara  |ネットワークオーケストレーション  |
|Tacker  |VNFの設定、ライフサイクル管理  |
|Dragonflow  |大規模ネットワーク向けの分散制御  |
|Horizon  |Webインターフェースの提供  |
|Cinder  |ブロックストレージ、ボリューム、スナップショット管理  |
|Manila  |ファイルストレージ、共有ファイルシステムの管理  |
|Swift  |オブジェクトストレージ  |非構造データの管理  |
|Freezer  |クラウド上のデータのバックアップ・リストア  |
|Heat  |理マシン、仮想マシン、コンテナのオーケストレーション、システムの自動構築、自動スケール  |
|Ceilometer  |サービス監視、イベント。計測データ収集、閾値判定、アラーム発行  |
|Monasca  |ユーザー自身による監視項目の定義、ログ取得、イベント処理  |
|Murano  |アプリケーションのカタログサービスの提供  |
|Mistal  |ワークフローサービス、タスクスケジューリング  |
|Congress  |ポリシーに基づくガバナンス機能の提供  |
|Rally  |OpenStackコンポーネントの性能分析、ベンチマーク用のフレームワーク  |
|Senlin  |クラスタリングサービスの提供  |
|Ironic  |物理マシンへのOS環境の配備、管理  |
|TrippleO  |OpenStackの配備ツール  |
|Fuel  |CLIおよびGUIでｰすのOpenStackの配備ツール  |
|OpenStack-Ansible  |構成管理ツールAnsibleを使ったOpenStackの自動構築  |
|Puppet OpenStack  |構成管理ツールPuppetを使ったOpenStackの自動構築  |
|Chef OpenStack  |構成管理ツールChefを使ったOpenStackの自動構築  |
|Magnum  |Dockerコンテナのオーケストレーション機能の提供、Docker Swarm、KubernetesなどのコンテナベースのクラスタのAPI提供  |
|Kolla  |OpenStack基盤自体をDockerコンテナとして配備する仕組みを提供  |
|Kuryr  |Dockerコンテナと仮想マシン間のネットワークの管理  |
|Sahara  |Hadoop、Sparkなどのビッグデータ分析基盤サービスの提供  |
|Trove  |データベース機能の提供  |
|Oslo  |Pysonの共通ライブラリ、メッセージングドライバの提供  |
|Zaqar  |Webやモバイル開発者向けのマルチテナント対応メッセージングサービス  |
|RefStack  |APIのテストツール、テスト結果のレポーティングサービスの提供  |

###OpenStackのシステム構成例

####オールインワン構成

![OpenStack_All-in-one.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025854/e92d1eeb-347e-90dc-6883-32f776298b09.jpeg)

- 1台の物理マシン上にOpenStackの全コンポーネントを載せる
- 簡易的なミニテスト、動作確認用の構成

####コンピュートノード分離構成

![OpenStack_Separate-Compute.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025854/184f6051-138e-456b-89b9-c699c0692fc2.jpeg)

- 仮想マシン、コンテナの増加が必要になれば、コンピュートノードを増設
- コントローラーノードがシングル構成だと障害発生時に基盤全体が停止する。コントローラーノード等の主要機能は冗長化するもしくはバックアップを取得し障害に備えること(全構成に共通して言えること)

####ストレージノード分離構成

![OpenStack_Separate-Storage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025854/1276affd-a881-f231-da65-324ebf7e0469.jpeg)

- DBサーバなど外部ストレージの割り当てが必要な場合に採用
- ブロックオブジェクトストレージサービスとしてCinderとSwiftが存在する
- Cinderはインスタンスに対してFC,iSCSI,NFS等を提供し、仮想マシンからマウントして利用できる。
- Swiftは仮想マシンからマウントするといった利用方法ではなく、クライアントからRESTAPIを使って接続する。