Continue PVC support Community Contribution
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
- Project: https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo
- Canary Deployment is enabled.
- Result: Passed
✅
Setup
- Run a new Auto DevOps pipeline. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484286837
- Confirm that the application is up and running. =>
✅ - 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
- 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
- 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
- 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
- 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
- Disable the
persistence.enable
tofalse
in.gitlab/auto-deploy-values.yaml
. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484293432 - 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
- 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
- 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
- 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
- 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
- Disable the
persistence.enable
tofalse
in.gitlab/auto-deploy-values.yaml
. => https://gitlab.com/shinya.maeda/my-commerce-kas-and-ado-demo/-/pipelines/484302824 - 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