Kubernetes vs OpenShift
Kubernetes
コンテナ型のアプリケーションの実行環境に必要な機能を提供している。下記のコンポネントを持っている。
- Pod
- Service
- Persistent Volume と Persistent Volume Claims
- Replication Controller
1. Pod
1つまたは複数のコンテナをまとめた単位であり、同一のPodに含まれるコンテナはネットワークインタフェースやストレージを共有する。
2. Service
Pod内で実行されているアプリケーションをサービスとして公開するためのエンドポイントである。
3. Persistent Volume
コンテナ内のデータは揮発性なので、コンテナを停止するとその時に利用していたデータ(例えば、コンテナ内のディレクトリに出力していたログファイルなど)は消滅してしまう。コンテナからPersistent Volumeを使えるようにしておけば、コンテナの外にデータを保持することができるので、コンテナを再起動しても以前のデータを利用することができます。Persistent Volumeは、管理者がStorage Poolとして切り出してコンテナから利用できるようにする。
Persistent Volume Claimによって、コンテナはPersistent Volumeを要求する。Kubernetesは、要求に該当するPersistent Volumeをコンテナに割り当てる。
4. Replication Controller
Podが不正終了したり、削除された場合にはPodを新たに起動し、指定よりも多くPodが起動されている場合は、Podを停止して、Pod を一定数に保つ。
OpenShift
Kubernetesのコンポーネントはコンテナ型のアプリケーションを実行するために必要なものがメインだが、OpenShiftのコンポーネントではコンテナ型のアプリケーションとして実行するためのDocker Imageの作成やデプロイに関わる機能を追加している。また、OpenShiftそのもののインフラとして機能するコンポーネントもある。
- Integrated Docker Registry
- Software Defined Network
- Build Configuration
- Deployment Configuration
- Source to Image
- Image Stream
- Route
1. Integrated Docker Registry
OpenShiftは、コンテナ型アプリケーションとして実行するDocker Imageを内部で保持する。Docker Imageを保持するリポジトリがIntegrated Docker Registryである。
2. Software Defined Network
サーバーをまたいだコンテナ間の通信は、オーバーレイのネットワークを利用する。OpenShiftではデフォルトではシングルテナント(全てのコンテナが同じオーバーレイのネットワークを利用する)のネットワークを構成するが、マルチテナント(プロジェクトごとに異なるオーバーレイのネットワークを利用)するように構成することも可能である。
3. Build Configuration
コンテナ型のアプリケーションとして実行するための、Docker Imageを作成するための定義である。Dockerfile、Source to Image(後述)でのビルドはこの定義に従って、Docker Imageを作成する。既にできているDocker ImageをインポートしてOpenShift上で実行する場合は、この定義は不要。
4. Deployment Configuration
KubernetesのDeploymentsを拡張した、コンテナ型のアプリケーションをデプロイするための定義である。デプロイ対象のImage Stream、デプロイ方式、その他、コンテナ実行時に必要な設定を定義する。
5. Source to Image
ベースとなるコンテナイメージに、指定されたソースコードリポジトリから取得したソースコードからビルドされたアプリケーションをデプロイして、新たなDocker Imageを作成する。
6. Image Stream
Docker Imageへのポインターである。Image Streamは、OpenShiftがビルドしたDocker Image、外部のDocker Repositoryで配布されているDocker Imageへのポインターと保持する。
7. Route
OpenShiftで実行しているコンテナ型のアプリケーションをURL(例:apps.example.com)でアクセスできるようにする仕組み。
Kubernetes vs OpenShift
Dockerコンテナのオーケストレーション機能を提供するKubernetesに対して、OpenShiftはコンテナ型の開発を運用に便利な機能を提供している。
1. アクセスコントロール
2. コンテナのビルドとデプロイ機能
1. アクセスコントロール
OpenShiftでは、リソース分離と権限分掌によってアクセスコントロールを実現している。
2. ビルドとデプロイの機能
OpenShiftのProjectにはKubernetesで提供されるコンポーネントとOpenShiftで提供するコンポーネントが含まれる。