Налаштування 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: {}
  1. Створіть Pod:

    kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
    
  2. Перевірте, що контейнер Podʼа працює, а потім спостерігайте за змінами в Podʼі:

    kubectl get pod redis --watch
    

    Вивід буде подібний до цього:

    NAME      READY     STATUS    RESTARTS   AGE
    redis     1/1       Running   0          13s
    
  3. В іншому терміналі отримайте доступ до оболонки запущеного контейнера:

    kubectl exec -it redis -- /bin/bash
    
  4. У вашій оболонці перейдіть до /data/redis, а потім створіть файл:

    root@redis:/data# cd /data/redis/
    root@redis:/data/redis# echo Hello > test-file
    
  5. У вашій оболонці виведіть список запущених процесів:

    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
    
  6. У вашій оболонці завершіть процес Redis:

    root@redis:/data/redis# kill <pid>
    

    де <pid> — це ідентифікатор процесу Redis (PID).

  7. У вашому початковому терміналі спостерігайте за змінами в 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.

  1. Отримайте доступ до оболонки в перезапущеному контейнері:

    kubectl exec -it redis -- /bin/bash
    
  2. У вашій оболонці перейдіть до /data/redis та перевірте, що test-file все ще там.

    root@redis:/data/redis# cd /data/redis/
    root@redis:/data/redis# ls
    test-file
    
  3. Видаліть Pod, який ви створили для цього завдання:

    kubectl delete pod redis
    

Що далі

  • Дивіться Volume.

  • Дивіться Pod.

  • Крім локального сховища на диску, яке надає emptyDir, Kubernetes підтримує багато різних рішень для мережевого сховища, включаючи PD на GCE та EBS на EC2, які бажані для критичних даних та будуть обробляти деталі, такі як монтування та розмонтування пристроїв на вузлах. Дивіться Volumes для отримання додаткової інформації.

Змінено August 22, 2024 at 6:59 PM PST: upstream sync (b7f2b32b60)