Browse Source

Backport changes for glusterfs, heketi, s3 and block templates

Signed-off-by: Saravanakumar Arumugam <sarumuga@redhat.com>
Saravanakumar Arumugam 7 years ago
parent
commit
27c60fa67a

+ 5 - 7
roles/openshift_storage_glusterfs/files/v3.6/deploy-heketi-template.yml

@@ -73,13 +73,11 @@ objects:
           - name: HEKETI_EXECUTOR
             value: ${HEKETI_EXECUTOR}
           - name: HEKETI_FSTAB
-            value: /var/lib/heketi/fstab
+            value: ${HEKETI_FSTAB}
           - name: HEKETI_SNAPSHOT_LIMIT
             value: '14'
           - name: HEKETI_KUBE_GLUSTER_DAEMONSET
             value: '1'
-          - name: HEKETI_KUBE_NAMESPACE
-            value: ${HEKETI_KUBE_NAMESPACE}
           ports:
           - containerPort: 8080
           volumeMounts:
@@ -115,10 +113,10 @@ parameters:
   displayName: heketi executor type
   description: Set the executor type, kubernetes or ssh
   value: kubernetes
-- name: HEKETI_KUBE_NAMESPACE
-  displayName: Namespace
-  description: Set the namespace where the GlusterFS pods reside
-  value: default
+- name: HEKETI_FSTAB
+  displayName: heketi fstab path
+  description: Set the fstab path, file that is populated with bricks that heketi creates
+  value: /var/lib/heketi/fstab
 - name: HEKETI_ROUTE
   displayName: heketi route name
   description: Set the hostname for the route URL

+ 67 - 0
roles/openshift_storage_glusterfs/files/v3.6/gluster-s3-pvcs-template.yml

@@ -0,0 +1,67 @@
+---
+kind: Template
+apiVersion: v1
+metadata:
+  name: gluster-s3-pvcs
+  labels:
+    glusterfs: s3-pvcs-template
+    gluster-s3: pvcs-template
+  annotations:
+    description: Gluster S3 service template
+    tags: glusterfs,heketi,gluster-s3
+objects:
+- kind: PersistentVolumeClaim
+  apiVersion: v1
+  metadata:
+    name: "${PVC}"
+    labels:
+      glusterfs: s3-${CLUSTER_NAME}-${S3_ACCOUNT}-storage
+      gluster-s3: ${CLUSTER_NAME}-${S3_ACCOUNT}-pvc
+    annotations:
+      volume.beta.kubernetes.io/storage-class: "glusterfs-${CLUSTER_NAME}"
+  spec:
+    accessModes:
+    - ReadWriteMany
+    resources:
+      requests:
+        storage: "${PVC_SIZE}"
+- kind: PersistentVolumeClaim
+  apiVersion: v1
+  metadata:
+    name: "${META_PVC}"
+    labels:
+      glusterfs: s3-${CLUSTER_NAME}-${S3_ACCOUNT}-storage
+      gluster-s3: ${CLUSTER_NAME}-${S3_ACCOUNT}-meta-pvc
+    annotations:
+      volume.beta.kubernetes.io/storage-class: "glusterfs-${CLUSTER_NAME}"
+  spec:
+    accessModes:
+    - ReadWriteMany
+    resources:
+      requests:
+        storage: "${META_PVC_SIZE}"
+parameters:
+- name: S3_ACCOUNT
+  displayName: S3 Account Name
+  description: S3 storage account which will provide storage on GlusterFS volumes
+  required: true
+- name: PVC
+  displayName: Primary GlusterFS-backed PVC
+  description: GlusterFS-backed PVC for object storage
+  required: true
+- name: PVC_SIZE
+  displayName: Primary GlusterFS-backed PVC capacity
+  description: Capacity for GlusterFS-backed PVC for object storage
+  value: 2Gi
+- name: META_PVC
+  displayName: Metadata GlusterFS-backed PVC
+  description: GlusterFS-backed PVC for object storage metadata
+  required: true
+- name: META_PVC_SIZE
+  displayName: Metadata GlusterFS-backed PVC capacity
+  description: Capacity for GlusterFS-backed PVC for object storage metadata
+  value: 1Gi
+- name: CLUSTER_NAME
+  displayName: GlusterFS cluster name
+  description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances
+  value: storage

+ 140 - 0
roles/openshift_storage_glusterfs/files/v3.6/gluster-s3-template.yml

@@ -0,0 +1,140 @@
+---
+kind: Template
+apiVersion: v1
+metadata:
+  name: gluster-s3
+  labels:
+    glusterfs: s3-template
+    gluster-s3: template
+  annotations:
+    description: Gluster S3 service template
+    tags: glusterfs,heketi,gluster-s3
+objects:
+- kind: Service
+  apiVersion: v1
+  metadata:
+    name: gluster-s3-${CLUSTER_NAME}-${S3_ACCOUNT}-service
+    labels:
+      glusterfs: s3-${CLUSTER_NAME}-${S3_ACCOUNT}-service
+      gluster-s3: ${CLUSTER_NAME}-${S3_ACCOUNT}-service
+  spec:
+    ports:
+    - protocol: TCP
+      port: 8080
+      targetPort: 8080
+    selector:
+      glusterfs: s3-pod
+    type: ClusterIP
+    sessionAffinity: None
+  status:
+    loadBalancer: {}
+- kind: Route
+  apiVersion: v1
+  metadata:
+    name: gluster-s3-${CLUSTER_NAME}-${S3_ACCOUNT}-route
+    labels:
+      glusterfs: s3-${CLUSTER_NAME}-${S3_ACCOUNT}-route
+      gluster-s3: ${CLUSTER_NAME}-${S3_ACCOUNT}-route
+  spec:
+    to:
+      kind: Service
+      name: gluster-s3-${CLUSTER_NAME}-${S3_ACCOUNT}-service
+- kind: DeploymentConfig
+  apiVersion: v1
+  metadata:
+    name: gluster-s3-${CLUSTER_NAME}-${S3_ACCOUNT}-dc
+    labels:
+      glusterfs: s3-${CLUSTER_NAME}-${S3_ACCOUNT}-dc
+      gluster-s3: ${CLUSTER_NAME}-${S3_ACCOUNT}-dc
+    annotations:
+      openshift.io/scc: privileged
+      description: Defines how to deploy gluster s3 object storage
+  spec:
+    replicas: 1
+    selector:
+      glusterfs: s3-${CLUSTER_NAME}-${S3_ACCOUNT}-pod
+    template:
+      metadata:
+        name: gluster-${CLUSTER_NAME}-${S3_ACCOUNT}-s3
+        labels:
+          glusterfs: s3-${CLUSTER_NAME}-${S3_ACCOUNT}-pod
+          gluster-s3: ${CLUSTER_NAME}-${S3_ACCOUNT}-pod
+      spec:
+        containers:
+        - name: gluster-s3
+          image: ${IMAGE_NAME}:${IMAGE_VERSION}
+          imagePullPolicy: IfNotPresent
+          ports:
+          - name: gluster
+            containerPort: 8080
+            protocol: TCP
+          env:
+          - name: S3_ACCOUNT
+            value: "${S3_ACCOUNT}"
+          - name: S3_USER
+            value: "${S3_USER}"
+          - name: S3_PASSWORD
+            value: "${S3_PASSWORD}"
+          resources: {}
+          volumeMounts:
+          - name: gluster-vol1
+            mountPath: "/mnt/gluster-object/${S3_ACCOUNT}"
+          - name: gluster-vol2
+            mountPath: "/mnt/gluster-object/gsmetadata"
+          - name: glusterfs-cgroup
+            readOnly: true
+            mountPath: "/sys/fs/cgroup"
+          terminationMessagePath: "/dev/termination-log"
+          securityContext:
+            privileged: true
+        volumes:
+        - name: glusterfs-cgroup
+          hostPath:
+            path: "/sys/fs/cgroup"
+        - name: gluster-vol1
+          persistentVolumeClaim:
+            claimName: ${PVC}
+        - name: gluster-vol2
+          persistentVolumeClaim:
+            claimName: ${META_PVC}
+        restartPolicy: Always
+        terminationGracePeriodSeconds: 30
+        dnsPolicy: ClusterFirst
+        serviceAccountName: default
+        serviceAccount: default
+        securityContext: {}
+parameters:
+- name: IMAGE_NAME
+  displayName: glusterblock provisioner container image name
+  required: True
+- name: IMAGE_VERSION
+  displayName: glusterblock provisioner container image version
+  required: True
+- name: CLUSTER_NAME
+  displayName: GlusterFS cluster name
+  description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances
+  value: storage
+- name: S3_ACCOUNT
+  displayName: S3 Account Name
+  description: S3 storage account which will provide storage on GlusterFS volumes
+  required: true
+- name: S3_USER
+  displayName: S3 User
+  description: S3 user who can access the S3 storage account
+  required: true
+- name: S3_PASSWORD
+  displayName: S3 User Password
+  description: Password for the S3 user
+  required: true
+- name: PVC
+  displayName: Primary GlusterFS-backed PVC
+  description: GlusterFS-backed PVC for object storage
+  value: gluster-s3-claim
+- name: META_PVC
+  displayName: Metadata GlusterFS-backed PVC
+  description: GlusterFS-backed PVC for object storage metadata
+  value: gluster-s3-meta-claim
+- name: CLUSTER_NAME
+  displayName: GlusterFS cluster name
+  description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances
+  value: storage

+ 104 - 0
roles/openshift_storage_glusterfs/files/v3.6/glusterblock-provisioner.yml

@@ -0,0 +1,104 @@
+---
+kind: Template
+apiVersion: v1
+metadata:
+  name: glusterblock-provisioner
+  labels:
+    glusterfs: block-template
+    glusterblock: template
+  annotations:
+    description: glusterblock provisioner template
+    tags: glusterfs
+objects:
+- kind: ClusterRole
+  apiVersion: v1
+  metadata:
+    name: glusterblock-provisioner-runner
+    labels:
+      glusterfs: block-provisioner-runner-clusterrole
+      glusterblock: provisioner-runner-clusterrole
+  rules:
+    - apiGroups: [""]
+      resources: ["persistentvolumes"]
+      verbs: ["get", "list", "watch", "create", "delete"]
+    - apiGroups: [""]
+      resources: ["persistentvolumeclaims"]
+      verbs: ["get", "list", "watch", "update"]
+    - apiGroups: ["storage.k8s.io"]
+      resources: ["storageclasses"]
+      verbs: ["get", "list", "watch"]
+    - apiGroups: [""]
+      resources: ["events"]
+      verbs: ["list", "watch", "create", "update", "patch"]
+    - apiGroups: [""]
+      resources: ["services"]
+      verbs: ["get"]
+    - apiGroups: [""]
+      resources: ["secrets"]
+      verbs: ["get", "create", "delete"]
+    - apiGroups: [""]
+      resources: ["routes"]
+      verbs: ["get", "list"]
+- apiVersion: v1
+  kind: ServiceAccount
+  metadata:
+    name: glusterblock-${CLUSTER_NAME}-provisioner
+    labels:
+      glusterfs: block-${CLUSTER_NAME}-provisioner-sa
+      glusterblock: ${CLUSTER_NAME}-provisioner-sa
+- apiVersion: v1
+  kind: ClusterRoleBinding
+  metadata:
+    name: glusterblock-${CLUSTER_NAME}-provisioner
+  roleRef:
+    name: glusterblock-provisioner-runner
+  subjects:
+  - kind: ServiceAccount
+    name: glusterblock-${CLUSTER_NAME}-provisioner
+    namespace: ${NAMESPACE}
+- kind: DeploymentConfig
+  apiVersion: v1
+  metadata:
+    name: glusterblock-${CLUSTER_NAME}-provisioner-dc
+    labels:
+      glusterfs: block-${CLUSTER_NAME}-provisioner-dc
+      glusterblock: ${CLUSTER_NAME}-provisioner-dc
+    annotations:
+      description: Defines how to deploy the glusterblock provisioner pod.
+  spec:
+    replicas: 1
+    selector:
+      glusterfs: block-${CLUSTER_NAME}-provisioner-pod
+    triggers:
+    - type: ConfigChange
+    strategy:
+      type: Recreate
+    template:
+      metadata:
+        name: glusterblock-provisioner
+        labels:
+          glusterfs: block-${CLUSTER_NAME}-provisioner-pod
+      spec:
+        serviceAccountName: glusterblock-${CLUSTER_NAME}-provisioner
+        containers:
+        - name: glusterblock-provisioner
+          image: ${IMAGE_NAME}:${IMAGE_VERSION}
+          imagePullPolicy: IfNotPresent
+          env:
+          - name: PROVISIONER_NAME
+            value: gluster.org/glusterblock
+parameters:
+- name: IMAGE_NAME
+  displayName: glusterblock provisioner container image name
+  required: True
+- name: IMAGE_VERSION
+  displayName: glusterblock provisioner container image version
+  required: True
+- name: NAMESPACE
+  displayName: glusterblock provisioner namespace
+  description: The namespace in which these resources are being created
+  required: True
+- name: CLUSTER_NAME
+  displayName: GlusterFS cluster name
+  description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances
+  value: storage

+ 19 - 1
roles/openshift_storage_glusterfs/files/v3.6/glusterfs-template.yml

@@ -35,6 +35,15 @@ objects:
         - name: glusterfs
           image: ${IMAGE_NAME}:${IMAGE_VERSION}
           imagePullPolicy: IfNotPresent
+          env:
+          - name: GB_GLFS_LRU_COUNT
+            value: "${GB_GLFS_LRU_COUNT}"
+          - name: TCMU_LOGDIR
+            value: "${TCMU_LOGDIR}"
+          resources:
+            requests:
+              memory: 100Mi
+              cpu: 100m
           volumeMounts:
           - name: glusterfs-heketi
             mountPath: "/var/lib/heketi"
@@ -83,7 +92,6 @@ objects:
             periodSeconds: 25
             successThreshold: 1
             failureThreshold: 15
-          resources: {}
           terminationMessagePath: "/dev/termination-log"
         volumes:
         - name: glusterfs-heketi
@@ -134,3 +142,13 @@ parameters:
   displayName: GlusterFS cluster name
   description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances
   value: storage
+- name: GB_GLFS_LRU_COUNT
+  displayName: Maximum number of block hosting volumes
+  description: This value is to set maximum number of block hosting volumes.
+  value: "15"
+  required: true
+- name: TCMU_LOGDIR
+  displayName: Tcmu runner log directory
+  description: This value is to set tcmu runner log directory
+  value: "/var/log/glusterfs/gluster-block"
+  required: true

+ 9 - 7
roles/openshift_storage_glusterfs/files/v3.6/heketi-template.yml

@@ -15,6 +15,7 @@ objects:
     name: heketi-${CLUSTER_NAME}
     labels:
       glusterfs: heketi-${CLUSTER_NAME}-service
+      heketi: ${CLUSTER_NAME}-service
     annotations:
       description: Exposes Heketi service
   spec:
@@ -30,6 +31,7 @@ objects:
     name: ${HEKETI_ROUTE}
     labels:
       glusterfs: heketi-${CLUSTER_NAME}-route
+      heketi: ${CLUSTER_NAME}-route
   spec:
     to:
       kind: Service
@@ -40,6 +42,7 @@ objects:
     name: heketi-${CLUSTER_NAME}
     labels:
       glusterfs: heketi-${CLUSTER_NAME}-dc
+      heketi: ${CLUSTER_NAME}-dc
     annotations:
       description: Defines how to deploy Heketi
   spec:
@@ -55,6 +58,7 @@ objects:
         name: heketi-${CLUSTER_NAME}
         labels:
           glusterfs: heketi-${CLUSTER_NAME}-pod
+          heketi: ${CLUSTER_NAME}-pod
       spec:
         serviceAccountName: heketi-${CLUSTER_NAME}-service-account
         containers:
@@ -69,13 +73,11 @@ objects:
           - name: HEKETI_EXECUTOR
             value: ${HEKETI_EXECUTOR}
           - name: HEKETI_FSTAB
-            value: /var/lib/heketi/fstab
+            value: ${HEKETI_FSTAB}
           - name: HEKETI_SNAPSHOT_LIMIT
             value: '14'
           - name: HEKETI_KUBE_GLUSTER_DAEMONSET
             value: '1'
-          - name: HEKETI_KUBE_NAMESPACE
-            value: ${HEKETI_KUBE_NAMESPACE}
           ports:
           - containerPort: 8080
           volumeMounts:
@@ -114,10 +116,10 @@ parameters:
   displayName: heketi executor type
   description: Set the executor type, kubernetes or ssh
   value: kubernetes
-- name: HEKETI_KUBE_NAMESPACE
-  displayName: Namespace
-  description: Set the namespace where the GlusterFS pods reside
-  value: default
+- name: HEKETI_FSTAB
+  displayName: heketi fstab path
+  description: Set the fstab path, file that is populated with bricks that heketi creates
+  value: /var/lib/heketi/fstab
 - name: HEKETI_ROUTE
   displayName: heketi route name
   description: Set the hostname for the route URL

+ 19 - 0
roles/openshift_storage_glusterfs/templates/v3.6/gluster-block-storageclass.yml.j2

@@ -0,0 +1,19 @@
+---
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+  name: glusterfs-{{ glusterfs_name }}-block
+{% if glusterfs_block_storageclass_default is defined and glusterfs_block_storageclass_default %}
+  annotations:
+    storageclass.kubernetes.io/is-default-class: "true"
+{% endif %}
+provisioner: gluster.org/glusterblock
+parameters:
+  resturl: "http://{% if glusterfs_heketi_is_native %}{{ glusterfs_heketi_route }}{% else %}{{ glusterfs_heketi_url }}:{{ glusterfs_heketi_port }}{% endif %}"
+  restuser: "admin"
+  chapauthenabled: "true"
+  hacount: "3"
+{% if glusterfs_heketi_admin_key is defined %}
+  restsecretnamespace: "{{ glusterfs_namespace }}"
+  restsecretname: "heketi-{{ glusterfs_name }}-admin-secret-block"
+{%- endif -%}

+ 0 - 4
roles/openshift_storage_glusterfs/templates/v3.6/glusterfs-storageclass.yml.j2

@@ -3,10 +3,6 @@ apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: glusterfs-{{ glusterfs_name }}
-{% if glusterfs_storageclass_default is defined and glusterfs_storageclass_default %}
-  annotations:
-    storageclass.kubernetes.io/is-default-class: "true"
-{% endif %}
 provisioner: kubernetes.io/glusterfs
 parameters:
   resturl: "http://{% if glusterfs_heketi_is_native %}{{ glusterfs_heketi_route }}{% else %}{{ glusterfs_heketi_url }}:{{ glusterfs_heketi_port }}{% endif %}"

+ 7 - 1
roles/openshift_storage_glusterfs/templates/v3.6/heketi.json.j2

@@ -31,6 +31,12 @@
 			"port" : "{{ glusterfs_heketi_ssh_port }}",
 			"user" : "{{ glusterfs_heketi_ssh_user }}",
 			"sudo" : {{ glusterfs_heketi_ssh_sudo | lower }}
-		}
+		},
+
+		"_auto_create_block_hosting_volume": "Creates Block Hosting volumes automatically if not found or exsisting volume exhausted",
+		"auto_create_block_hosting_volume": {{ glusterfs_block_host_vol_create | lower }},
+
+		"_block_hosting_volume_size": "New block hosting volume will be created in size mentioned, This is considered only if auto-create is enabled.",
+		"block_hosting_volume_size": {{ glusterfs_block_host_vol_size }}
 	}
 }