プロジェクト(名前空間)を作る時に最初からいろいろな制限など決まり切った内容を毎回行う場合があると思います。そのような作業を減らすため、テンプレートを使って最初から反映したプロジェクトを作れるようにしてみます。
テンプレートの変更
まずはテンプレートを取得します。
$ 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 -
参考