#chiroito ’s blog

Java を中心とした趣味の技術について

OpenShift でプロジェクトのテンプレートを変更する

プロジェクト(名前空間)を作る時に最初からいろいろな制限など決まり切った内容を毎回行う場合があると思います。そのような作業を減らすため、テンプレートを使って最初から反映したプロジェクトを作れるようにしてみます。

テンプレートの変更

まずはテンプレートを取得します。

$ oc adm create-bootstrap-project-template -o yaml > template.yaml

テンプレートの中身は以下の様になっています。

template.yaml

apiVersion: template.openshift.io/v1
kind: Template
metadata:
  creationTimestamp: null
  name: project-request
objects:
- apiVersion: project.openshift.io/v1
  kind: Project
  metadata:
    annotations:
      openshift.io/description: ${PROJECT_DESCRIPTION}
      openshift.io/display-name: ${PROJECT_DISPLAYNAME}
      openshift.io/requester: ${PROJECT_REQUESTING_USER}
    creationTimestamp: null
    name: ${PROJECT_NAME}
  spec: {}
  status: {}
- apiVersion: rbac.authorization.k8s.io/v1
  kind: RoleBinding
  metadata:
    creationTimestamp: null
    name: admin
    namespace: ${PROJECT_NAME}
  roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: admin
  subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: ${PROJECT_ADMIN_USER}
parameters:
- name: PROJECT_NAME
- name: PROJECT_DISPLAYNAME
- name: PROJECT_DESCRIPTION
- name: PROJECT_ADMIN_USER
- name: PROJECT_REQUESTING_USER

このテンプレートを変更することで新しくプロジェクトを作った場合にその変更が適用されます。以下はネットワークポリシー(NetworkPolicy)、podごとのリソースの制限(LimitRange)、プロジェクトごとのリソースの制限(ResourceQuota)を設定した物です。

apiVersion: template.openshift.io/v1
kind: Template
(略)
objects:
- apiVersion: project.openshift.io/v1
  kind: Project
(略)
- apiVersion: rbac.authorization.k8s.io/v1
  kind: RoleBinding
(略)
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
(略)
- apiVersion: v1
  kind: LimitRange
(略)
- apiVersion: v1
  kind: ResourceQuota
(略)
parameters:
(略)

変更したテンプレートファイルからテンプレートを作成します。

$ oc create -f template.yaml -n openshift-config

テンプレートが読み込まれるように設定を変更します。

$ oc edit project.config.openshift.io/cluster

spec:に以下を足します。

  projectRequestTemplate:
    name: project-request

変更されることを確認

プロジェクトを作成してリソース制限などがきちんと掛かっていることを確認します。

$ oc new-project my-prj
$ oc project my-prj

$ oc describe quota
Name:             project-quota
Namespace:        my-prj
Resource          Used  Hard
--------          ----  ----
limits.cpu        0     6
limits.memory     0     16Gi
pods              0     10
requests.cpu      0     4
requests.memory   0     8Gi
requests.storage  0     20G

$ oc describe limits
Name:       project-limits
Namespace:  my-prj
Type        Resource  Min  Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---  ---  ---------------  -------------  -----------------------
Container   memory    -    -    500Mi            1Gi            -
Container   cpu       -    -    500m             1              -

参考