OpenShiftの道具箱


DockerとKubernetesを活用したOpenShift。むしろ、DockerとKubernetesの上にOpenShiftは成り立っています。

OpenShiftではないとできないことは何?というご質問を受けることが多いので、今回はKubernetesで提供する機能とOpenShiftで提供する機能を色分けしながらご紹介していきます。

Dockerコンテナのオーケストレーション機能を提供するKubernetesに対して、OpenShiftはコンテナ型の開発を運用に便利な機能を提供しています。一つは、アクセスコントロール、もう一つは、コンテナのビルドとデプロイ機能です。

アクセスコントロール

OpenShiftでは、リソース分離と権限分掌によってアクセスコントロールを実現しています。

OSE_20160705_AccessControl

リソースの分離

OpenShiftでは、KubernetesのNamespaceを機能拡張してリソースの分離に加えて、複数のユーザーでの利用を想定したアクセスコントロールの仕組みを追加しています。この仕組みによって、マルチユーザーでも安心して利用できるコンテナ型のPaaS(Platform as a Services)環境を提供します。

KubernetesのNamespace

Kubernetesによって管理されるリソースを分離する仕組みです。
NamespaceではPod、Service、Replication Controller などのリソース、どのユーザーがどんなアクションを実行できるかというPolicy、PodやContainerが利用可能なCPUやMemoryを制限するConstraintsを管理します。

OpenShiftのProject

KubernetesのNamespaceの機能を包含し、リソースの分離だけではなく、各リソースへのアクセスコントロールができるようになっています。

 

アクセスコントロールを活用した例を見てみみましょう。

例えば、 Project DEV で作成したDocker ImageをProject TESTから利用してDocker Containerを起動しようとしても、Project DEVで作成されたDocker Imageを参照することができません。しかし、Project TESTからProject DEVのDocker Imageを利用できるようにポリシーを設定することで、Project DEVで作成したDocker Imageを参照するImageStreamを作成して、Docker Containerとして起動することが可能になります。

OSE_20160705_Policy

ユーザーインターフェース

OpenShiftでは、3つのユーザーインタフェースを提供しています。
1つ目はDocker/KubernetesのコマンドをラップしたCLIツールのocコマンドと管理者用のCLIツールのoadmコマンド。2つ目はKubernetes APIを拡張したRest API。3つ目はWebコンソールです。

どのユーザーインタフェースからOpenShiftを利用する場合でもユーザー認証を行い、ユーザーが利用可能なリソースにのみ操作ができるようになっています。


 

ビルドとデプロイの機能

OpenShiftのProjectにはKubernetesで提供されるコンポーネントとOpenShiftで提供するコンポーネントが含まれます。

OSE_20160705_CompInProj

Projectを構成するコンポーネント

 

Kubernetesのコンポーネント

コンテナ型のアプリケーションの実行環境に必要な機能が提供されています。

Pod

1つまたは複数のコンテナをまとめた単位。同一のPodに含まれるコンテナはネットワークインタフェースやストレージを共有します。

Service

Pod内で実行されているアプリケーションをサービスとして公開するためのエンドポイントです。

Persistent Volume と Persistent Volume Claims

コンテナ内のデータは揮発性なので、コンテナを停止するとその時に利用していたデータ(例えば、コンテナ内のディレクトリに出力していたログファイルなど)は消滅してしまいます。コンテナからPersistent Volumeを使えるようにしておけば、コンテナの外にデータを保持することができるので、コンテナを再起動しても以前のデータを利用することができます。Persistent Volumeは、管理者がStorage Poolとして切り出してコンテナから利用できるようにします。

Persistent Volume Claimによって、コンテナはPersistent Volumeを要求します。Kubernetesは、要求に該当するPersistent Volumeをコンテナに割り当てます。

Replication Controller

Podが不正終了したり、削除された場合にはPodを新たに起動し、指定よりも多くPodが起動されている場合は、Podを停止して、Pod を一定数に保ちます。

OpenShiftのコンポーネント

Kubernetesのコンポーネントはコンテナ型のアプリケーションを実行するために必要なものがメインですが、OpenShiftのコンポーネントではコンテナ型のアプリケーションとして実行するためのDocker Imageの作成やデプロイに関わる機能を追加しています。
また、OpenShiftそのもののインフラとして機能するコンポーネントもあります。

OpenShiftそのもののインフラとして機能するコンポーネント

Integrated Docker Registry

OpenShiftは、コンテナ型アプリケーションとして実行するDocker Imageを内部で保持します。Docker Imageを保持するリポジトリがIntegrated Docker Registryです。

Software Defined Network

サーバーをまたいだコンテナ間の通信は、オーバーレイのネットワークを利用します。OpenShiftではデフォルトではシングルテナント(全てのコンテナが同じオーバーレイのネットワークを利用する)のネットワークを構成しますが、マルチテナント(プロジェクトごとに異なるオーバーレイのネットワークを利用)するように構成することも可能です。

ビルドとデプロイの自動化で利用するコンポーネント

Build Configuration

コンテナ型のアプリケーションとして実行するための、Docker Imageを作成するための定義です。
Dockerfile、Source to Image(後述)でのビルドはこの定義に従って、Docker Imageを作成します。既にできているDocker ImageをインポートしてOpenShift上で実行する場合は、この定義は不要です。

Deployment Configuration

KubernetesのDeploymentsを拡張した、コンテナ型のアプリケーションをデプロイするための定義です。デプロイ対象のImage Stream、デプロイ方式、その他、コンテナ実行時に必要な設定を定義します。

Source to Image

ベースとなるコンテナイメージに、指定されたソースコードリポジトリから取得したソースコードからビルドされたアプリケーションをデプロイして、新たなDocker Imageを作成します。

Image Stream

Docker Imageへのポインターです。Image Streamは、OpenShiftがビルドしたDocker Image、外部のDocker Repositoryで配布されているDocker Imageへのポインターと保持します。

Route

OpenShiftで実行しているコンテナ型のアプリケーションをURL(例:apps.example.com)でアクセスできるようにする仕組みです。

レッドハット・OpenShift ソリューションアーキテクト・プロフィール

大溝 桂

大溝 桂

レッドハット株式会社 OpenShift ソリューションアーキテクト

外資系ベンダーにてC言語/Java言語を利用した基幹業務システムの開発や運用支援などを経験後、2012年にレッドハット株式会社に入社。…
詳細はこちら »