OpenShiftのProjectとNamespaceの違い

OpenShift

はじめに

前回、KubernetesとOpenshiftをふんわり比較した記事を書きました。思ったより多くの方に読んでいただいたようです。ありがとうございます。

Kubernetesと比較したOpenShiftの特徴
はじめに転職を機にOpenShiftばかり触っています。最近はだんだんと慣れてきたので、この辺でKubernetesとOpenShiftの違いについて、わかりやすそうにまとめてみます。わかりやすくするために、「違い」と言ってもあまり細か...(続く)

この記事のリソースの違いという節で、OpenShift独自のリソースについて紹介しました。具体的には、以下のようなリソースがあります。

  • Project
  • DeploymentConfig
  • BuildConfig
  • Route
  • ImageStream
  • ImageStreamTag など

今回から、これらについて簡単に解説する記事を書いていきます。まずは、Projectをとりあげます。



OpenShift Projectとは

何もわからないので、公式ドキュメントの記載を見てみます。

A project allows a community of users to organize and manage their content in isolation from other communities.

ユーザーのコミュニティごとに、コンテンツを独立させることができるという旨の記載かと思います。つまり、OpenShiftクラスター内で、リソースを仮想的に独立させ、マルチテナントを実現できる機能です。

Kubernetes Namespaceとの違いは?

こう聞くと、「それって、KubernetesのNamespace(名前空間)と同じじゃないの?」と思いますよね。私もそう思います。

両者の違いについても、公式ドキュメントに書いています。

プロジェクト は追加のアノテーションを持つ Kubernetes namespace であり、通常ユーザーのリソースへのアクセスが管理される中心的な手段です。

つまり「Project = Namespace + α」というくらいに理解して間違いはありません。追加のアノテーションというのがどう言ったものかは、この後見ていきます。

実際に検証してみる

手軽に試したい方は、CRCの利用がおすすめです。利用方法は以下を参照ください。

Red Hat CodeReady Containersで、OpenShift 4をローカルでお手軽に試す
NishipyOpenShift 4 の簡易版であるCodeReady Containersを、自宅ラップトップに導入したときのメモです。はじめにOpenShiftRed Hat社が提供するコンテナオーケストレーションプ...(続く)

Projectの作成

CLIを使い、oc new-projectで作成できます。

Projectと同時に、同じ名前のNamespaceも作成されています。

アノテーションの確認

「プロジェクト は追加のアノテーションを持つ Kubernetes namespace」と書いてあったので、確認してみます。

Projectとして見ても、Namespaceとして見ても、同様のAnnotationsがついています。ラベルと同じく、key: valueまたはkey=value方式です。openshift.io/descriptionopenshift.io/display-nameopenshift.io/requesterの意味は読んだ通りでわかりやすいと思います。

openshift.io/sa.scc.で始まるのは、SCC(Security Context Constraints)に関するアノテーションです。SCCは、Podの権限を制御する機能で、Podの受入制御(Admission Control)が行われます。

今回登場したアノテーションをまとめておきます1。間違っていたらご指摘ください。

  • openshift.io/sa.scc.mcs: レベルが設定されていないMustRunAsのSELinuxContextストラテジーについて、Admission Controllerは、このアノテーションを探してレベルを設定する。MCSは、SELinux用語。2
  • openshift.io/sa.scc.supplemental-groups: PodがsupplementalGroupsを定義する場合に、設定可能なGID範囲。<start>/<length>表記。
  • openshift.io/sa.scc.uid-range: PodがrunAsUserを定義する場合に、設定可能なUID範囲。<start>/<length>表記。



少し実用的な話

デフォルトのProject

openshift-kube-で始まるものは、OpenShiftインストール時に生成されるデフォルトプロジェクト3です。OpenShiftクラスターが動作するために必要なリソースが含まれています。例えば、コントロールプレーンのコンポーネントなど重要なPod4が実行されている重要なProjectです。

実際の運用体制

クラスター管理者がProjectの作成を行い、プロジェクトの管理権限をユーザーに割り当てることで開発・開発を進めていくことになるかと思います。

さいごに

今回の話をまとめると、以下の通りです。

  • Projectは、Namespaceにアノテーションが付いたもの

以上.


  1. この辺に書いてありますが、古いドキュメントなので注意。 
  2. MLS/MCSについては、この記事がわかりやすかった。 
  3. デフォルトプロジェクトについて、詳しくはこちら。 
  4. OpenShift 4では、API ServerやScheduler、EtcdなどのコンポーネントがPod(コンテナ)として実行される。 

コメント