Ein Git Repository in einen Kubernetes Container mounten

Es gibt in Kubernetes https://kubernetes.io/docs/concepts/storage/volumes/#gitrepo um ein Git Repository einzufügen. Diese Storage Art ist aber bereits als deprecated markiert und wird nicht mehr empfohlen.

Git Repos lassen sich dennoch recht einfach als Volume in einen Container einbinden. Man muss dafür einen InitContainer verwenden, der das Repository auscheckt und in einem Verzeichnir bereitstellt. Diese mounted man per emptyDir{} in den Container. Nun stehen die zuvor ausgecheckten Dateien aus dem Repository im Container bereit.

Beispiel

# Beispiel wie man InitContainers für die Bereitstellung
# eines GIT Repository nutzt. Die GitRepo Volumes sind
# deprecated und sollten nicht mehr verwendet werden. Dieses
# Beispiel nutzt den Ansatz das Git klonen in einem
# InitContainer auszuführen.
apiVersion: v1
kind: Pod
metadata:
  name: git-repository-demo
  annotations:
    seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
spec:
  initContainers:
    # Dieser InitContainer klont das gewünschte Repository
    # in das EmptyDir Volume Verzeichnis
    - name: git-clone
      image: alpine/git # Alpine Linux mit Git
      args:
        - clone
        - --single-branch
        - --
        - https://github.com/test/testrepo # Das Repository
        - /repo # Put it in the volume
      securityContext:
        runAsUser: 1 # Hier ggf. Anpassungen vornehmen
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true
      volumeMounts:
        - name: git-repo
          mountPath: /repo
  containers:
    # Hier muss das richtige Image angegeben werden
    # das genutzt werden soll. Bsp. BusyBox
    - name:  busybox
      image: busybox
      args: ['tail','-f','/dev/null'] # Demo tue nichts
      volumeMounts:
        - name: git-repo
          mountPath: /repo
  volumes:
    - name: git-repo
      emptyDir: {}