Configuring a user namespace
Learn how to use Che
to synchronize ConfigMaps, Secrets, PersistentVolumeClaim and other Kubernetes objects
from eclipse-che namespace to numerous user-specific namespaces.
The Che automates the synchronization of important configuration data, such as
shared credentials, configuration files, and certificates to user namespaces.
If you make changes to a Kubernetes resource in an eclipse-che namespace, Che will immediately synchronize the changes across all users namespaces. In reverse, if a Kubernetes resource is modified in a user namespace, Che will immediately revert the changes.
-
Create the
ConfigMapbelow to create and mount it into every workspace.kind: ConfigMap apiVersion: v1 metadata: name: che-user-configmap namespace: eclipse-che labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config data: ...To enhance the configurability, you can customize the
ConfigMapby adding additional labels and annotations.Add the following labels if you do not want the ConfigMap to be mounted automatically:
controller.devfile.io/watch-configmap: "false" controller.devfile.io/mount-to-devworkspace: "false"Add the annotation below if you want the ConfigMap to be retained in a user namespace after being deleted from eclipse-che namespace:
che.eclipse.org/sync-retain-on-delete: "true"See the mounting volumes, configmaps, and secrets for other possible labels and annotations.
-
Create the
Secretbelow to create and mount it into every workspace.kind: Secret apiVersion: v1 metadata: name: che-user-secret namespace: eclipse-che labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config stringData: ...To enhance the configurability, you can customize the
Secretby adding additional labels and annotations.Add the labels if you do not want the Secret to be mounted automatically:
controller.devfile.io/watch-secret: "false" controller.devfile.io/mount-to-devworkspace: "false"Add the annotation below if you want the Secret to be retained in a user namespace after being deleted from eclipse-che namespace:
che.eclipse.org/sync-retain-on-delete: "true"See the mounting volumes, configmaps, and secrets for other possible labels and annotations.
-
Create the
PersistentVolumeClaimbelow to create it to every user namespace.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: che-user-pvc namespace: eclipse-che labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config spec: ...To enhance the configurability, you can customize the
PersistentVolumeClaimby adding additional labels and annotations.The
PersistentVolumeClaimis not deleted in a user namespace by default, if the one from eclipse-che is deleted. Add the annotation below if you want thePersistentVolumeClaimto be deleted in a user namespace as well:che.eclipse.org/sync-retain-on-delete: "false"See the mounting volumes, configmaps, and secrets for other possible labels and annotations.
-
To leverage the OpenShift Kubernetes Engine, you can create a
Templateobject to replicate all resources defined within the template across each user namespace.Aside from the previously mentioned
ConfigMap,Secret, andPersistentVolumeClaim,Templateobjects can include:-
LimitRange -
NetworkPolicy -
ResourceQuota -
Role -
RoleBindingapiVersion: template.openshift.io/v1 kind: Template metadata: name: che-user-namespace-configurator namespace: eclipse-che labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config objects: ... parameters: - name: PROJECT_NAME - name: PROJECT_ADMIN_USERThe
parametersare optional and define which parameters can be used. Currently, onlyPROJECT_NAMEandPROJECT_ADMIN_USERare supported.PROJECT_NAMEis the name of the Che namespace, whilePROJECT_ADMIN_USERis the Che user of the namespace.The namespace name in objects will be replaced with the user’s namespace name during synchronization.
Example 1. Replicating Kubernetes resources to a user namespace:apiVersion: template.openshift.io/v1 kind: Template metadata: name: che-user-namespace-configurator namespace: eclipse-che labels: app.kubernetes.io/part-of: che.eclipse.org app.kubernetes.io/component: workspaces-config objects: - apiVersion: v1 kind: ResourceQuota metadata: name: che-user-resource-quota spec: ... - apiVersion: v1 kind: LimitRange metadata: name: che-user-resource-constraint spec: ... - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: che-user-roles rules: ... - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: che-user-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: che-user-roles subjects: - kind: User apiGroup: rbac.authorization.k8s.io name: ${PROJECT_ADMIN_USER} parameters: - name: PROJECT_ADMIN_USERCreating Template Kubernetes resources is supported only on OpenShift.
-