Skip to content

Czym są Volumes w Kubernetes?

Jest to najbardziej podstawowy sposób montowania zasobów dyskowych wewnątrz kontenera. Poprzez użycie selektora spec.volumes dla każdego z Podów definiowany jest wolumen. Oraz w sekcji spec.volumes.hostPath określana jest ścieżka gdzie będzie dany wolumen zamontowany na hoście oraz jego rodzaj.

Następnie wewnątrz kontenera, w sekcji spec.containers.volumeMounts ustalana jest nazwa (ta sama, co wcześniej utworzonego wolumenu) oraz ścieżka wolumenu wewnątrz kontenera.

Definicja wolumenu w Podzie, umieszczenie go jako katalog na hoście

Szablon:

apiVersion: v1
kind: Pod
metadata:
    name: <pod_name>
spec:
    containers:
        - name: <container_name>
          image: <image_name>
          volumeMounts: # określamy gdzie będzie zamontowany w kontenerze
              - name: <volume_name> # ta sama nazwa co stworzyliśmy poniżej
                mountPath: /      
    volumes:  # definicja wolumenu w Kubernetes
        - name: <volume_name>
    hostPath: # określenie ścieżki gdzie będzie znajdować się na hoście
        path: <direcory_path_on_host>
        type: Directory

Definicja w przykładowym Podzie:

apiVersion: v1
kind: Pod
metadata:
    name: test-pod
spec:
    containers:
        - name: test-container
          image: ubuntu
          command: ["/bin/sh", "-c"]
          args: ["shuf -i 0-100 -n 1 >> /optnumber.txt;"]
          volumeMounts:
              - mountPath: /opt
                name: data-volume
    volumes:
        - name: data-volume
          hostPath:
            path: /data
            type: Directory

Warning

Nie należy jednak używać hostPath jeżeli używamy więcej niż jeden Node w klastrze, lepiej tworzyć PersistantVolume.