はじめに
前回、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の利用がおすすめです。利用方法は以下を参照ください。
Projectの作成
CLIを使い、oc new-project
で作成できます。
1 |
$ oc new-project pj-test |
Projectと同時に、同じ名前のNamespaceも作成されています。
1 2 3 4 5 6 7 |
$ oc get projects pj-test NAME DISPLAY NAME STATUS pj-test Active $ oc get ns pj-test NAME STATUS AGE pj-test Active 16m |
アノテーションの確認
「プロジェクト は追加のアノテーションを持つ Kubernetes namespace」と書いてあったので、確認してみます。
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 |
$ oc describe projects pj-test Name: pj-test Created: 18 minutes ago Labels: <none> Annotations: openshift.io/description= openshift.io/display-name= openshift.io/requester=system:admin openshift.io/sa.scc.mcs=s0:c25,c10 openshift.io/sa.scc.supplemental-groups=1000620000/10000 openshift.io/sa.scc.uid-range=1000620000/10000 Display Name: <none> Description: <none> Status: Active Node Selector: <none> Quota: <none> Resource limits: <none> $ oc describe ns pj-test Name: pj-test Labels: <none> Annotations: openshift.io/description: openshift.io/display-name: openshift.io/requester: system:admin openshift.io/sa.scc.mcs: s0:c25,c10 openshift.io/sa.scc.supplemental-groups: 1000620000/10000 openshift.io/sa.scc.uid-range: 1000620000/10000 Status: Active No resource quota. No LimitRange resource. |
Projectとして見ても、Namespaceとして見ても、同様のAnnotations
がついています。ラベルと同じく、key: value
またはkey=value
方式です。openshift.io/description
、openshift.io/display-name
、openshift.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用語。2openshift.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です。
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
$ oc get projects NAME DISPLAY NAME STATUS default Active kube-node-lease Active kube-public Active kube-system Active openshift Active openshift-apiserver Active openshift-apiserver-operator Active openshift-authentication Active openshift-authentication-operator Active openshift-cloud-credential-operator Active openshift-cluster-machine-approver Active openshift-cluster-node-tuning-operator Active openshift-cluster-samples-operator Active openshift-cluster-storage-operator Active openshift-cluster-version Active openshift-config Active openshift-config-managed Active openshift-console Active openshift-console-operator Active openshift-controller-manager Active openshift-controller-manager-operator Active openshift-dns Active openshift-dns-operator Active openshift-etcd Active openshift-etcd-operator Active openshift-image-registry Active openshift-infra Active openshift-ingress Active openshift-ingress-operator Active openshift-insights Active openshift-kni-infra Active openshift-kube-apiserver Active openshift-kube-apiserver-operator Active openshift-kube-controller-manager Active openshift-kube-controller-manager-operator Active openshift-kube-scheduler Active openshift-kube-scheduler-operator Active openshift-kube-storage-version-migrator Active openshift-kube-storage-version-migrator-operator Active openshift-machine-api Active openshift-machine-config-operator Active openshift-marketplace Active openshift-monitoring Active openshift-multus Active openshift-network-operator Active openshift-node Active openshift-openstack-infra Active openshift-operator-lifecycle-manager Active openshift-operators Active openshift-ovirt-infra Active openshift-sdn Active openshift-service-ca Active openshift-service-ca-operator Active openshift-service-catalog-apiserver-operator Active openshift-service-catalog-controller-manager-operator Active openshift-user-workload-monitoring Active openshift-vsphere-infra Active |
実際の運用体制
クラスター管理者がProjectの作成を行い、プロジェクトの管理権限をユーザーに割り当てることで開発・開発を進めていくことになるかと思います。
さいごに
今回の話をまとめると、以下の通りです。
- Projectは、Namespaceにアノテーションが付いたもの
このシリーズ
以上.
コメント