In Kubernetes kon een volume aangemaakt worden met een GIT-Repo als bron. Dit type volume is echter ‘deprecated‘ en een betere manier voor dynamische web-content in een Kubernetes deployment is om een ‘init-container‘ te gebruiken die een git-repo in een ‘emptyDir‘ volume plaatst dat gebruikt wordt door de webserver.
HTML-content
De web-content in een simple-html repo kan bestaan uit een index.html pagina met een aantal images in een images-directory. Bijvoorbeeld: https://gitlab.com/nokkie/simple-html
init-container
Een init-container om een git-repo in de html-directory voor nginx te plaatsen, kan er alsvolgt uitzien:
initContainers: - name: git-clone image: nokkie/alpinegit:arm64 args: - git - clone - https://gitlab.com/nokkie/simple-html.git - /var/www/html securityContext: runAsUser: 1000 allowPrivilegeEscalation: false readOnlyRootFilesystem: true volumeMounts: - name: html mountPath: /var/www/html
Hierbij wordt een alpinegit image gebruikt om het git-clone commando uit te kunnen voeren op een Raspberry Pi. Voor andere architecture zoals AMD64, zijn er beschikbare images te vinden op docker hub.
volume
In de nginx container (in dezelfde pod) kan nu een emptyDir volume gebruikt worden naar hetzelfde mountPath:
containers: - name: nginx ... volumeMounts: - mountPath: /var/www/html name: html readOnly: true volumes: - name: html emptyDir: {}
Deze wordt aangeduid met ‘readOnly: true’ zodat alleen een wijziging kan worden gedaan door de git-repo met html-content aan te passen en de Kubernetes pod te vervangen via een re-deployment. (al dan niet met fleet)
deployment
Een complete deployment manifest ziet er dan zo uit:
--- apiVersion: apps/v1 kind: Deployment metadata: name: simple-nginx namespace: simple-nginx spec: template: spec: containers: - name: simple-nginx image: nginx volumeMounts: - name: html mountPath: /var/www/html initContainers: - name: git-clone image: nokkie/alpinegit:arm64 args: - git - clone - https://gitlab.com/nokkie/simple-html.git - /var/www/html volumeMounts: - name: html mountPath: /var/www/html
Wellicht is het noodzakelijk om de juiste git-image te vinden voor de gebruikte architecture op jouw Kubernetes worker nodes. In bovenstaand manifest wordt een ARM64-image gebruikt voor een Raspberry Pi.