Налаштування Podʼа для використання тому для зберігання
Ця сторінка показує, як налаштувати Pod для використання тому для зберігання.
Файлова система контейнера існує лише поки існує сам контейнер. Отже, коли контейнер завершує роботу та перезавантажується, зміни в файловій системі втрачаються. Для більш стійкого зберігання, яке не залежить від контейнера, ви можете використовувати том. Це особливо важливо для застосунків, що зберігають стан, таких як бази даних і сховища ключ-значення (наприклад, Redis).
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.Налаштування тому для Podʼа
У цьому завданні ви створюєте Pod, який запускає один контейнер. У цьому Podʼі є том типу emptyDir, який існує протягом усього життєвого циклу Podʼа, навіть якщо контейнер завершиться та перезапуститься. Ось конфігураційний файл для Podʼа:
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-storage
mountPath: /data/redis
volumes:
- name: redis-storage
emptyDir: {}
Створіть Pod:
kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
Перевірте, що контейнер Podʼа працює, а потім спостерігайте за змінами в Podʼі:
kubectl get pod redis --watch
Вивід буде подібний до цього:
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s
В іншому терміналі отримайте доступ до оболонки запущеного контейнера:
kubectl exec -it redis -- /bin/bash
У вашій оболонці перейдіть до
/data/redis
, а потім створіть файл:root@redis:/data# cd /data/redis/ root@redis:/data/redis# echo Hello > test-file
У вашій оболонці виведіть список запущених процесів:
root@redis:/data/redis# apt-get update root@redis:/data/redis# apt-get install procps root@redis:/data/redis# ps aux
Вивід буде схожий на це:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND redis 1 0.1 0.1 33308 3828 ? Ssl 00:46 0:00 redis-server *:6379 root 12 0.0 0.0 20228 3020 ? Ss 00:47 0:00 /bin/bash root 15 0.0 0.0 17500 2072 ? R+ 00:48 0:00 ps aux
У вашій оболонці завершіть процес Redis:
root@redis:/data/redis# kill <pid>
де
<pid>
— це ідентифікатор процесу Redis (PID).У вашому початковому терміналі спостерігайте за змінами в Podʼі Redis. В кінцевому результаті ви побачите щось подібне:
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s redis 0/1 Completed 0 6m redis 1/1 Running 1 6m
На цьому етапі контейнер завершився та перезапустився. Це тому, що Pod Redis має restartPolicy Always
.
Отримайте доступ до оболонки в перезапущеному контейнері:
kubectl exec -it redis -- /bin/bash
У вашій оболонці перейдіть до
/data/redis
та перевірте, щоtest-file
все ще там.root@redis:/data/redis# cd /data/redis/ root@redis:/data/redis# ls test-file
Видаліть Pod, який ви створили для цього завдання:
kubectl delete pod redis
Що далі
Дивіться Volume.
Дивіться Pod.
Крім локального сховища на диску, яке надає
emptyDir
, Kubernetes підтримує багато різних рішень для мережевого сховища, включаючи PD на GCE та EBS на EC2, які бажані для критичних даних та будуть обробляти деталі, такі як монтування та розмонтування пристроїв на вузлах. Дивіться Volumes для отримання додаткової інформації.