Skip to content

Continue PVC support Community Contribution

Shinya Maeda requested to merge continue-pvc-support into master

Description

This MR continues the awesome contribution which is halted because the original author/contributor too busy to continue.

Note

In order to minimize the change size, this MR does NOT include the following changes:

  • Specify an existing PVC
  • PVC support in Worker Deployments

We'll follow-up in the next MR.

Original Title

This provides the ability to mount one PVC to one folder in the container via Helm parameters specified using the HELM_UPGRADE_EXTRA_ARGS CI variable.

This is a continuation of MR gitlab-org/charts/auto-deploy-app!65 (closed)

Related to #75 (closed)

Manual QA

Setup

  1. Run a new Auto DevOps pipeline. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484286837
  2. Confirm that the application is up and running. =>
  3. Confirm that the no PVCs have been created. =>
When Production finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                                     READY   STATUS    RESTARTS   AGE
pod/production-canary-84754c5794-j7dr8   1/1     Running   0          3m36s

NAME                                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/production-canary-auto-deploy   ClusterIP   10.88.24.236   <none>        80/TCP    3m36s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production-canary   1/1     1            1           3m36s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/production-canary-84754c5794   1         1         1       3m37s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
No resources found in production namespace.

PVC addition

  1. Add the following configuration in .gitlab/auto-deploy-values.yaml. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484288232
persistence:
  enabled: true
  volumes:
    - name: data
      mount:
        path: "/pvc-mount"
      claim:
        accessMode: ReadWriteOnce
        size: 8Gi
  1. Confirm that the PVC is created, the physical volume is accessible from a application container and put a sample file in the mounted volume. =>
When Canary finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                                     READY   STATUS    RESTARTS   AGE
pod/production-7f977b74c5-h7n92          1/1     Running   0          5m24s
pod/production-canary-77b88b8cc6-28drw   1/1     Running   0          93s

NAME                                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy          ClusterIP   10.88.28.64    <none>        80/TCP    5m25s
service/production-canary-auto-deploy   ClusterIP   10.88.19.168   <none>        80/TCP    95s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production          1/1     1            1           5m25s
deployment.apps/production-canary   1/1     1            1           95s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/production-7f977b74c5          1         1         1       5m25s
replicaset.apps/production-canary-77b88b8cc6   1         1         1       95s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-canary-auto-deploy-data   Bound    pvc-8f009023-4f0c-48b9-845d-860e0e34348c   8Gi        RWO            standard       97s
When Production finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                            READY   STATUS    RESTARTS   AGE
pod/production-9d65ddbb-8f2wg   1/1     Running   0          75s

NAME                             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy   ClusterIP   10.88.28.64   <none>        80/TCP    9m36s

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production   1/1     1            1           9m36s

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/production-7f977b74c5   0         0         0       9m37s
replicaset.apps/production-9d65ddbb     1         1         1       76s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-data   Bound    pvc-afe6e735-9ce1-418a-a1fe-a66264232b8a   8Gi        RWO            standard       78s
Putting a sample file
/app # echo 'hoge' > /pvc-mount/text.log
/app # ls -l /pvc-mount
total 20
drwx------    2 root     root         16384 Mar  4 05:35 lost+found
-rw-r--r--    1 root     root             5 Mar  4 05:37 text.log
  1. Change the application code and re-deploy. This will re-start the application container. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484291161
  2. Confirm that the sample file in the mounted volume still exists. =>
When Canary finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                                     READY   STATUS    RESTARTS   AGE
pod/production-9d65ddbb-8f2wg            1/1     Running   0          5m49s
pod/production-canary-7456c6bd87-67vqw   1/1     Running   0          63s

NAME                                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy          ClusterIP   10.88.28.64   <none>        80/TCP    14m
service/production-canary-auto-deploy   ClusterIP   10.88.30.20   <none>        80/TCP    64s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production          1/1     1            1           14m
deployment.apps/production-canary   1/1     1            1           64s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/production-7f977b74c5          0         0         0       14m
replicaset.apps/production-9d65ddbb            1         1         1       5m50s
replicaset.apps/production-canary-7456c6bd87   1         1         1       64s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-data          Bound    pvc-afe6e735-9ce1-418a-a1fe-a66264232b8a   8Gi        RWO            standard       5m58s
production-canary-auto-deploy-data   Bound    pvc-9a4549e2-88b8-46f6-aeab-0942599f32fe   8Gi        RWO            standard       72s
When Production finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                              READY   STATUS    RESTARTS   AGE
pod/production-757bfdc9bc-n82jj   1/1     Running   0          119s

NAME                             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy   ClusterIP   10.88.28.64   <none>        80/TCP    17m

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production   1/1     1            1           17m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/production-757bfdc9bc   1         1         1       2m
replicaset.apps/production-7f977b74c5   0         0         0       17m
replicaset.apps/production-9d65ddbb     0         0         0       8m51s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-data   Bound    pvc-afe6e735-9ce1-418a-a1fe-a66264232b8a   8Gi        RWO            standard       8m56s
Checking a sample file existence
shinya@shinya-B550-VISION-D:~/workspace$ k exec -ti pod/production-757bfdc9bc-n82jj -n production -- /bin/sh
/app # ls -l /pvc-mount/
total 20
drwx------    2 root     root         16384 Mar  4 05:35 lost+found
-rw-r--r--    1 root     root             5 Mar  4 05:37 text.log

PVC deletion

  1. Disable the persistence.enable to false in .gitlab/auto-deploy-values.yaml. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484293432
  2. Confirm that the PVCs have been deleted and the application is up and running. =>
When Canary finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                                     READY   STATUS    RESTARTS   AGE
pod/production-757bfdc9bc-n82jj          1/1     Running   0          7m29s
pod/production-canary-6c77b8b45f-xcbm2   1/1     Running   0          103s

NAME                                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy          ClusterIP   10.88.28.64    <none>        80/TCP    22m
service/production-canary-auto-deploy   ClusterIP   10.88.20.183   <none>        80/TCP    104s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production          1/1     1            1           22m
deployment.apps/production-canary   1/1     1            1           104s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/production-757bfdc9bc          1         1         1       7m30s
replicaset.apps/production-7f977b74c5          0         0         0       22m
replicaset.apps/production-9d65ddbb            0         0         0       14m
replicaset.apps/production-canary-6c77b8b45f   1         1         1       104s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-data   Bound    pvc-afe6e735-9ce1-418a-a1fe-a66264232b8a   8Gi        RWO            standard       14m
When Production finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                             READY   STATUS    RESTARTS   AGE
pod/production-57b894bd8-dg77h   1/1     Running   0          54s

NAME                             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy   ClusterIP   10.88.28.64   <none>        80/TCP    24m

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production   1/1     1            1           24m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/production-57b894bd8    1         1         1       54s
replicaset.apps/production-757bfdc9bc   0         0         0       9m12s
replicaset.apps/production-7f977b74c5   0         0         0       24m
replicaset.apps/production-9d65ddbb     0         0         0       16m
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
No resources found in production namespace.
Checking a mount volume is not accessible
shinya@shinya-B550-VISION-D:~/workspace$ k exec -ti pod/production-57b894bd8-dg77h -n production -- /bin/sh
/app # ls -l /pvc-mount/
ls: /pvc-mount/: No such file or directory

Multi PVCs addition

  1. Add the following configuration in .gitlab/auto-deploy-values.yaml. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484295232
volumes:
  - name: log-dir
    mount:
      path: "/log"
    claim:
      accessMode: ReadWriteOnce
      size: 20Gi
  - name: config
    mount:
      path: "/app-config"
      subPath: "config.txt"
    claim:
      accessMode: ReadWriteOnce
      size: 8Gi
  1. Confirm that the PVCs are created, the physical volumes are accessible from a application container and put a sample file in the mounted volumes. =>
When Canary finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                                    READY   STATUS    RESTARTS   AGE
pod/production-57b894bd8-dg77h          1/1     Running   0          6m22s
pod/production-canary-fcbcfb677-gk2cj   1/1     Running   0          2m24s

NAME                                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy          ClusterIP   10.88.28.64    <none>        80/TCP    29m
service/production-canary-auto-deploy   ClusterIP   10.88.19.127   <none>        80/TCP    2m24s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production          1/1     1            1           29m
deployment.apps/production-canary   1/1     1            1           2m25s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/production-57b894bd8          1         1         1       6m23s
replicaset.apps/production-757bfdc9bc         0         0         0       14m
replicaset.apps/production-7f977b74c5         0         0         0       29m
replicaset.apps/production-9d65ddbb           0         0         0       21m
replicaset.apps/production-canary-fcbcfb677   1         1         1       2m25s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-canary-auto-deploy-config    Bound    pvc-42dc068a-198d-47d2-aaff-920d76a21225   8Gi        RWO            standard       2m30s
production-canary-auto-deploy-log-dir   Bound    pvc-db854943-557e-4165-b2f0-b3bf32a70777   20Gi       RWO            standard       2m30s
When Production finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                             READY   STATUS    RESTARTS   AGE
pod/production-69b9d7b68-7xbj5   1/1     Running   0          119s

NAME                             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy   ClusterIP   10.88.28.64   <none>        80/TCP    32m

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production   1/1     1            1           32m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/production-57b894bd8    0         0         0       9m24s
replicaset.apps/production-69b9d7b68    1         1         1       2m
replicaset.apps/production-757bfdc9bc   0         0         0       17m
replicaset.apps/production-7f977b74c5   0         0         0       32m
replicaset.apps/production-9d65ddbb     0         0         0       24m
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-config    Bound    pvc-5ec02b91-c8c8-4f4c-9272-98cbc5c8a232   8Gi        RWO            standard       2m3s
production-auto-deploy-log-dir   Bound    pvc-a297b494-9087-432c-b872-c1c88ac76d57   20Gi       RWO            standard       2m3s
Putting sample files
shinya@shinya-B550-VISION-D:~/workspace$ k exec -ti pod/production-69b9d7b68-7xbj5 -n production -- /bin/sh
/app # echo 'hoge' > /log/text.log
/app # echo 'hoge' > /app-config/config.txt
/app # ls -l /log
total 20
drwx------    2 root     root         16384 Mar  4 05:58 lost+found
-rw-r--r--    1 root     root             5 Mar  4 06:00 text.log
/app # ls -l /app-config
total 4
-rw-r--r--    1 root     root             5 Mar  4 06:00 config.txt
  1. Change the application code and re-deploy. This will re-start the application container. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484298785
  2. Confirm that the sample file in the mounted volume still exists. =>
When Canary finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                                     READY   STATUS    RESTARTS   AGE
pod/production-69b9d7b68-7xbj5           1/1     Running   0          5m49s
pod/production-canary-66f46cd496-rdx9z   1/1     Running   0          81s

NAME                                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy          ClusterIP   10.88.28.64   <none>        80/TCP    36m
service/production-canary-auto-deploy   ClusterIP   10.88.18.89   <none>        80/TCP    82s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production          1/1     1            1           36m
deployment.apps/production-canary   1/1     1            1           82s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/production-57b894bd8           0         0         0       13m
replicaset.apps/production-69b9d7b68           1         1         1       5m50s
replicaset.apps/production-757bfdc9bc          0         0         0       21m
replicaset.apps/production-7f977b74c5          0         0         0       36m
replicaset.apps/production-9d65ddbb            0         0         0       28m
replicaset.apps/production-canary-66f46cd496   1         1         1       82s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-config           Bound    pvc-5ec02b91-c8c8-4f4c-9272-98cbc5c8a232   8Gi        RWO            standard       5m56s
production-auto-deploy-log-dir          Bound    pvc-a297b494-9087-432c-b872-c1c88ac76d57   20Gi       RWO            standard       5m56s
production-canary-auto-deploy-config    Bound    pvc-a1a3c96f-0fad-42fd-8ff6-0a34f308b6ee   8Gi        RWO            standard       87s
production-canary-auto-deploy-log-dir   Bound    pvc-c0eaf91c-88f4-42e3-bd40-43f4f792595b   20Gi       RWO            standard       87s
When Production finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                              READY   STATUS    RESTARTS   AGE
pod/production-76856664c5-njs8g   1/1     Running   0          75s

NAME                             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy   ClusterIP   10.88.28.64   <none>        80/TCP    39m

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production   1/1     1            1           39m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/production-57b894bd8    0         0         0       15m
replicaset.apps/production-69b9d7b68    0         0         0       8m17s
replicaset.apps/production-757bfdc9bc   0         0         0       23m
replicaset.apps/production-76856664c5   1         1         1       76s
replicaset.apps/production-7f977b74c5   0         0         0       39m
replicaset.apps/production-9d65ddbb     0         0         0       30m
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-config    Bound    pvc-5ec02b91-c8c8-4f4c-9272-98cbc5c8a232   8Gi        RWO            standard       8m20s
production-auto-deploy-log-dir   Bound    pvc-a297b494-9087-432c-b872-c1c88ac76d57   20Gi       RWO            standard       8m20s
Checking sample files
shinya@shinya-B550-VISION-D:~/workspace$ k exec -ti pod/production-76856664c5-njs8g -n production -- /bin/sh
/app # ls -l /log
total 20
drwx------    2 root     root         16384 Mar  4 05:58 lost+found
-rw-r--r--    1 root     root             5 Mar  4 06:00 text.log
/app # ls -l /app-config
total 4
-rw-r--r--    1 root     root             5 Mar  4 06:00 config.txt

Multi PVCs deletion

  1. Disable the persistence.enable to false in .gitlab/auto-deploy-values.yaml. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484302824
  2. Confirm that the PVCs have been deleted and the application is up and running. =>
When Canary finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                                     READY   STATUS    RESTARTS   AGE
pod/production-76856664c5-njs8g          1/1     Running   0          4m37s
pod/production-canary-84754c5794-gnnqm   1/1     Running   0          74s

NAME                                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy          ClusterIP   10.88.28.64    <none>        80/TCP    42m
service/production-canary-auto-deploy   ClusterIP   10.88.27.239   <none>        80/TCP    75s

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production          1/1     1            1           42m
deployment.apps/production-canary   1/1     1            1           75s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/production-57b894bd8           0         0         0       19m
replicaset.apps/production-69b9d7b68           0         0         0       11m
replicaset.apps/production-757bfdc9bc          0         0         0       27m
replicaset.apps/production-76856664c5          1         1         1       4m38s
replicaset.apps/production-7f977b74c5          0         0         0       42m
replicaset.apps/production-9d65ddbb            0         0         0       34m
replicaset.apps/production-canary-84754c5794   1         1         1       75s
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
production-auto-deploy-config    Bound    pvc-5ec02b91-c8c8-4f4c-9272-98cbc5c8a232   8Gi        RWO            standard       11m
production-auto-deploy-log-dir   Bound    pvc-a297b494-9087-432c-b872-c1c88ac76d57   20Gi       RWO            standard       11m
When Production finished
shinya@shinya-B550-VISION-D:~/workspace$ k get all -n production
NAME                              READY   STATUS    RESTARTS   AGE
pod/production-7f977b74c5-5jrg6   1/1     Running   0          65s

NAME                             TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/production-auto-deploy   ClusterIP   10.88.28.64   <none>        80/TCP    44m

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/production   1/1     1            1           44m

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/production-57b894bd8    0         0         0       21m
replicaset.apps/production-69b9d7b68    0         0         0       13m
replicaset.apps/production-757bfdc9bc   0         0         0       29m
replicaset.apps/production-76856664c5   0         0         0       6m37s
replicaset.apps/production-7f977b74c5   1         1         1       44m
replicaset.apps/production-9d65ddbb     0         0         0       36m
shinya@shinya-B550-VISION-D:~/workspace$ k get pvc -n production
No resources found in production namespace.
Checking sample files
shinya@shinya-B550-VISION-D:~/workspace$ k exec -ti pod/production-7f977b74c5-5jrg6 -n production -- /bin/sh
/app # ls -l /log
ls: /log: No such file or directory
/app # ls -l /app-config
ls: /app-config: No such file or directory
Edited by Shinya Maeda

Merge request reports