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.