dnskr opened a new pull request, #14:
URL: https://github.com/apache/ozone-helm-charts/pull/14

   ## What changes were proposed in this pull request?
   
   The PR adds support for resource requests and limits to be set to Datanode, 
Ozone Manager, S3 Gateway and Storage Container Manager containers.
   
   ## What is the link to the Apache JIRA
   
   https://issues.apache.org/jira/browse/HDDS-11918
   
   ## How was this patch tested?
   
   **1. Test that `StatefulSet` templates don't have `resources` field by 
default**
   ```shell
   helm template ozone charts/ozone -s 
templates/datanode/datanode-statefulset.yaml \
                                    -s templates/om/om-statefulset.yaml \
                                    -s templates/s3g/s3g-statefulset.yaml \
                                    -s templates/scm/scm-statefulset.yaml
   ```
   
   ```yaml
   ---
   # Source: ozone/templates/datanode/datanode-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-datanode
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: datanode
   spec:
     replicas: 3
     serviceName: ozone-datanode-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: datanode
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: datanode
       spec:
         containers:
           - name: datanode
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - datanode
             env:
               ...
             ports:
               - name: ui
                 containerPort: 9882
             livenessProbe:
               httpGet:
                 path: /
                 port: ui
               initialDelaySeconds: 30
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-datanode
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-datanode
             emptyDir: {}
   ---
   # Source: ozone/templates/om/om-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-om
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: om
   spec:
     replicas: 1
     serviceName: ozone-om-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: om
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: om
       spec:
         containers:
           - name: om
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - om
             env:
               ...
             ports:
               - name: rpc
                 containerPort: 9862
               - name: ui
                 containerPort: 9874
             livenessProbe:
               httpGet:
                 path: /
                 port: ui
               initialDelaySeconds: 60
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-om
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-om
             emptyDir: {}
   ---
   # Source: ozone/templates/s3g/s3g-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-s3g
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: s3g
   spec:
     replicas: 1
     serviceName: ozone-s3g-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: s3g
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: s3g
       spec:
         containers:
           - name: s3g
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - s3g
             env:
               ...
             ports:
               - name: rest
                 containerPort: 9878
             livenessProbe:
               httpGet:
                 path: /
                 port: rest
               initialDelaySeconds: 30
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-s3g
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-s3g
             emptyDir: {}
   ---
   # Source: ozone/templates/scm/scm-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-scm
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: scm
   spec:
     replicas: 1
     serviceName: ozone-scm-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: scm
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: scm
       spec:
         initContainers:
           - name: init
             image: "apache/ozone:1.4.1-rocky"
             args: ["ozone", "scm", "--init"]
             env:
               ...
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-scm
                 mountPath: /data
         containers:
           - name: scm
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - scm
             env:
               ...
             ports:
               - name: rpc-client
                 containerPort: 9860
               - name: rpc-datanode
                 containerPort: 9861
               - name: ui
                 containerPort: 9876
             livenessProbe:
               httpGet:
                 path: /
                 port: ui
               initialDelaySeconds: 30
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-scm
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-scm
             emptyDir: {}
   ```
   
   **2. Test that templates are correct with provided resource values**
   ```shell
   helm template ozone charts/ozone --set datanode.resources.requests.cpu=101m \
                                    --set datanode.resources.limits.cpu=1001m \
                                    --set om.resources.requests.cpu=102m \
                                    --set om.resources.limits.cpu=1002m \
                                    --set s3g.resources.requests.cpu=103m \
                                    --set s3g.resources.limits.cpu=1003m \
                                    --set scm.resources.requests.cpu=104m \
                                    --set scm.resources.limits.cpu=1004m \
                                    -s 
templates/datanode/datanode-statefulset.yaml \
                                    -s templates/om/om-statefulset.yaml \
                                    -s templates/s3g/s3g-statefulset.yaml \
                                    -s templates/scm/scm-statefulset.yaml
   ```
   ```yaml
   ---
   # Source: ozone/templates/datanode/datanode-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-datanode
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: datanode
   spec:
     replicas: 3
     serviceName: ozone-datanode-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: datanode
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: datanode
       spec:
         containers:
           - name: datanode
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - datanode
             env:
               ...
             ports:
               - name: ui
                 containerPort: 9882
             livenessProbe:
               httpGet:
                 path: /
                 port: ui
               initialDelaySeconds: 30
             resources:
               limits:
                 cpu: 1001m
               requests:
                 cpu: 101m
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-datanode
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-datanode
             emptyDir: {}
   ---
   # Source: ozone/templates/om/om-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-om
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: om
   spec:
     replicas: 1
     serviceName: ozone-om-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: om
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: om
       spec:
         containers:
           - name: om
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - om
             env:
               ...
             ports:
               - name: rpc
                 containerPort: 9862
               - name: ui
                 containerPort: 9874
             livenessProbe:
               httpGet:
                 path: /
                 port: ui
               initialDelaySeconds: 60
             resources:
               limits:
                 cpu: 1002m
               requests:
                 cpu: 102m
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-om
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-om
             emptyDir: {}
   ---
   # Source: ozone/templates/s3g/s3g-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-s3g
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: s3g
   spec:
     replicas: 1
     serviceName: ozone-s3g-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: s3g
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: s3g
       spec:
         containers:
           - name: s3g
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - s3g
             env:
               ...
             ports:
               - name: rest
                 containerPort: 9878
             livenessProbe:
               httpGet:
                 path: /
                 port: rest
               initialDelaySeconds: 30
             resources:
               limits:
                 cpu: 1003m
               requests:
                 cpu: 103m
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-s3g
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-s3g
             emptyDir: {}
   ---
   # Source: ozone/templates/scm/scm-statefulset.yaml
   apiVersion: apps/v1
   kind: StatefulSet
   metadata:
     name: ozone-scm
     labels:
       helm.sh/chart: ozone-0.1.1
       app.kubernetes.io/name: ozone
       app.kubernetes.io/instance: ozone
       app.kubernetes.io/version: "1.4.1-rocky"
       app.kubernetes.io/managed-by: Helm
       app.kubernetes.io/component: scm
   spec:
     replicas: 1
     serviceName: ozone-scm-headless
     selector:
       matchLabels:
         app.kubernetes.io/name: ozone
         app.kubernetes.io/instance: ozone
         app.kubernetes.io/component: scm
     template:
       metadata:
         annotations:
           checksum/config: 
1b660e279be09a3478618699d32bc5d39aa745dadb24ecab06fe5d37e616839f
         labels:
           app.kubernetes.io/name: ozone
           app.kubernetes.io/instance: ozone
           app.kubernetes.io/component: scm
       spec:
         initContainers:
           - name: init
             image: "apache/ozone:1.4.1-rocky"
             args: ["ozone", "scm", "--init"]
             env:
               ...
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-scm
                 mountPath: /data
         containers:
           - name: scm
             image: "apache/ozone:1.4.1-rocky"
             imagePullPolicy: IfNotPresent
             args:
               - ozone
               - scm
             env:
               ...
             ports:
               - name: rpc-client
                 containerPort: 9860
               - name: rpc-datanode
                 containerPort: 9861
               - name: ui
                 containerPort: 9876
             livenessProbe:
               httpGet:
                 path: /
                 port: ui
               initialDelaySeconds: 30
             resources:
               limits:
                 cpu: 1004m
               requests:
                 cpu: 104m
             volumeMounts:
               - name: config
                 mountPath: /opt/hadoop/etc/hadoop
               - name: ozone-scm
                 mountPath: /data
         volumes:
           - name: config
             projected:
               sources:
                 - configMap:
                     name: ozone-ozone
           - name: ozone-scm
             emptyDir: {}
   ```
   
   **3. Test that the chart can be installed with provided resource values**
   ```shell
   helm install ozone charts/ozone --set datanode.resources.requests.cpu=101m \
                                   --set datanode.resources.limits.cpu=1001m \
                                   --set om.resources.requests.cpu=102m \
                                   --set om.resources.limits.cpu=1002m \
                                   --set s3g.resources.requests.cpu=103m \
                                   --set s3g.resources.limits.cpu=1003m \
                                   --set scm.resources.requests.cpu=104m \
                                   --set scm.resources.limits.cpu=1004m
   ```
   
   ```shell
   kubectl get pod -o 
custom-columns='NAME:.metadata.name,CPU_REQUESTS:.spec.containers[0].resources.requests.cpu,CPU_LIMITS:.spec.containers[0].resources.limits.cpu'
   NAME               CPU_REQUESTS   CPU_LIMITS
   ozone-datanode-0   101m           1001m
   ozone-datanode-1   101m           1001m
   ozone-datanode-2   101m           1001m
   ozone-om-0         102m           1002m
   ozone-s3g-0        103m           1003m
   ozone-scm-0        104m           1004m
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to