Перейти до вмісту

Модуль 4.5: Усунення несправностей зберігання

Hands-On Lab Available
K8s Cluster advanced 40 min
Launch Lab ↗

Opens in Killercoda in a new tab

Складність: [MEDIUM] — Діагностика та виправлення проблем зберігання

Час на виконання: 35–45 хвилин

Передумови: Модулі 4.1–4.4 (всі попередні модулі з зберігання)


Що ви зможете робити

Розділ «Що ви зможете робити»

Після цього модуля ви зможете:

  • Діагностувати збої сховища систематично (PVC Pending, помилки монтування, проблеми ємності, відмова в доступі)
  • Простежити ланцюжок виділення сховища від PVC → StorageClass → провізіонер → PV → монтування
  • Виправити типові проблеми сховища: застряглі фіналайзери, осиротілі PV, відновлення після пошкодження файлової системи
  • Спроєктувати чек-лист для усунення проблем сховища в сценаріях іспиту CKA

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Проблеми зберігання є одними з найпоширеніших у кластерах Kubernetes. Поди, що застрягли в ContainerCreating, PVC, які ніколи не прив’язуються, помилки дозволів та проблеми з ємністю можуть зупинити роботу додатків. На іспиті CKA активно перевіряють навички усунення несправностей, і проблеми зберігання з’являються часто. Цей модуль дає вам систематичний підхід до діагностики та виправлення проблем зберігання.

Аналогія з детективом

Усунення несправностей зберігання — це як бути детективом. Под не запускається — це злочин. Ваші інструменти — kubectl describe, kubectl logs та kubectl get events — ваша лупа, набір для зняття відбитків та опитування свідків. Ви слідуєте за доказами: Под → PVC → PV → StorageClass → CSI-драйвер. Кожен крок розкриває підказки, поки ви не знайдете винуватця.


Після завершення цього модуля ви зможете:

  • Систематично усувати проблеми зберігання
  • Налагоджувати проблеми прив’язки PVC
  • Виправляти помилки монтування томів
  • Діагностувати проблеми CSI-драйверів
  • Вирішувати проблеми з дозволами та ємністю

  • Більшість проблем зберігання — це помилки конфігурації: Неправильне ім’я StorageClass, невідповідні режими доступу або відсутні мітки спричиняють 80% проблем
  • Events — ваш найкращий друг: kubectl describe показує нещодавні події, які часто містять точне повідомлення про помилку
  • CSI-драйвери мають власні логи: Коли звичайні команди не допомагають, перевірте логи контролера та вузла CSI

Частина 1: Фреймворк усунення несправностей

Розділ «Частина 1: Фреймворк усунення несправностей»

1.1 Шлях налагодження зберігання

Розділ «1.1 Шлях налагодження зберігання»
┌─────────────────────────────────────────────────────────────────────┐
│ Шлях усунення несправностей зберігання │
│ │
│ Проблема з Подом │
│ │ │
│ ▼ │
│ 1. k describe pod <name> │
│ └─► Перевірте секцію Events │
│ └─► Перевірте помилки монтування томів │
│ │ │
│ ▼ │
│ 2. k get pvc <name> │
│ └─► Чи STATUS "Bound"? │
│ └─► Якщо "Pending", перевірте Events │
│ │ │
│ ▼ │
│ 3. k get pv │
│ └─► Чи існує відповідний PV? │
│ └─► Чи STATUS "Available" або "Bound"? │
│ │ │
│ ▼ │
│ 4. k get sc <storageclass> │
│ └─► Чи існує StorageClass? │
│ └─► Чи правильний provisioner? │
│ │ │
│ ▼ │
│ 5. Перевірте CSI-драйвер │
│ └─► Чи встановлений драйвер? │
│ └─► Перевірте логи Подів драйвера │
│ │
└─────────────────────────────────────────────────────────────────────┘

1.2 Довідник ключових команд

Розділ «1.2 Довідник ключових команд»
Terminal window
# Налагодження на рівні Пода
k describe pod <pod-name>
k get pod <pod-name> -o yaml
k logs <pod-name>
# Налагодження PVC
k get pvc
k describe pvc <pvc-name>
k get pvc <pvc-name> -o yaml
# Налагодження PV
k get pv
k describe pv <pv-name>
k get pv <pv-name> -o yaml
# Налагодження StorageClass
k get sc
k describe sc <sc-name>
# Events (часто найкорисніші!)
k get events --sort-by='.lastTimestamp'
k get events --field-selector involvedObject.name=<pvc-name>
# Налагодження CSI
k get pods -n kube-system | grep csi
k logs -n kube-system <csi-pod> -c <container>

Частина 2: Проблеми прив’язки PVC

Розділ «Частина 2: Проблеми прив’язки PVC»

2.1 PVC застряг у стані Pending

Розділ «2.1 PVC застряг у стані Pending»

Симптоми: PVC показує STATUS: Pending, ніколи не стає Bound

Terminal window
k get pvc
# NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS
# my-pvc Pending fast-ssd

Кроки налагодження:

Terminal window
# Крок 1: Перевірити події
k describe pvc my-pvc
# Подивіться секцію Events на наявність помилок

2.2 Поширені причини Pending

Розділ «2.2 Поширені причини Pending»

Причина 1: Немає відповідного PV (статичне надання)

Events:
Type Reason Message
---- ------ -------
Normal FailedBinding no persistent volumes available for this claim

Рішення: Створіть PV, що відповідає вимогам PVC:

Terminal window
# Перевірте, що потрібно PVC
k get pvc my-pvc -o yaml | grep -A5 spec:
# Створіть відповідний PV або виправте PVC для відповідності існуючому PV

Причина 2: StorageClass не існує

Events:
Type Reason Message
---- ------ -------
Warning ProvisioningFailed storageclass.storage.k8s.io "fast-ssd" not found

Рішення:

Terminal window
# Список доступних StorageClasses
k get sc
# Виправте PVC для використання існуючого StorageClass
k patch pvc my-pvc -p '{"spec":{"storageClassName":"standard"}}'
# Примітка: Можливо, потрібно видалити та перестворити PVC

Причина 3: Немає CSI-драйвера/provisioner

Events:
Type Reason Message
---- ------ -------
Warning ProvisioningFailed failed to provision volume: no csi driver

Рішення: Встановіть необхідний CSI-драйвер для вашого бекенду сховища

Причина 4: Режим WaitForFirstConsumer

Terminal window
k get pvc my-pvc
# STATUS: Pending (це нормально, поки Под не використає його!)
k get sc fast-ssd -o jsonpath='{.volumeBindingMode}'
# WaitForFirstConsumer

Рішення: Це очікувана поведінка! Створіть Под, який використовує PVC, і він прив’яжеться.

2.3 Невідповідність режиму доступу

Розділ «2.3 Невідповідність режиму доступу»

Симптоми: PVC не прив’язується, хоча PV існує

Terminal window
k get pv
# NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS
# pv-1 100Gi RWO Retain Available
k get pvc
# NAME STATUS ACCESS MODES STORAGECLASS
# my-pvc Pending RWX manual

Проблема: PVC запитує RWX, PV пропонує лише RWO

Рішення:

Terminal window
# Варіант 1: Змінити PVC для відповідності PV
k delete pvc my-pvc
# Перестворити з RWO
# Варіант 2: Створити новий PV з RWX (якщо сховище підтримує)

2.4 Невідповідність StorageClass

Розділ «2.4 Невідповідність StorageClass»
Terminal window
k get pv pv-1 -o jsonpath='{.spec.storageClassName}'
# manual
k get pvc my-pvc -o jsonpath='{.spec.storageClassName}'
# fast

Проблема: PVC та PV мають різний storageClassName

Рішення: Вирівняйте storageClassName на обох ресурсах


Частина 3: Помилки монтування томів

Розділ «Частина 3: Помилки монтування томів»

3.1 Под застряг у ContainerCreating

Розділ «3.1 Под застряг у ContainerCreating»

Симптоми: Под залишається в стані ContainerCreating

Terminal window
k get pods
# NAME READY STATUS RESTARTS AGE
# my-pod 0/1 ContainerCreating 0 5m

Налагодження:

Terminal window
k describe pod my-pod
# Шукайте помилки, пов'язані з томами, в Events

3.2 Поширені помилки монтування

Розділ «3.2 Поширені помилки монтування»

Помилка 1: PVC не знайдено

Events:
Warning FailedMount Unable to attach or mount volumes:
persistentvolumeclaim "my-pvc" not found

Рішення:

Terminal window
# Перевірте, що PVC існує в тому самому namespace
k get pvc my-pvc -n <namespace>
# Виправте специфікацію Пода, якщо ім'я PVC неправильне

Помилка 2: Том вже приєднаний до іншого вузла

Events:
Warning FailedAttachVolume Multi-Attach error for volume "pvc-xxx":
Volume is already attached to node "node-1"

Причина: RWO том приєднаний до іншого вузла (типово під час збоїв вузлів)

Рішення:

Terminal window
# Зачекайте завершення старого Пода або примусово видаліть
k delete pod <old-pod> --force --grace-period=0
# Якщо використовуєте StatefulSet, можливо, потрібно видалити старе приєднання PV
k get volumeattachment

Помилка 3: Відмова в дозволі

Events:
Warning FailedMount MountVolume.SetUp failed:
mount failed: exit status 32, permission denied

Рішення:

# Додайте securityContext до Пода
spec:
securityContext:
fsGroup: 1000 # ID групи для тому
containers:
- name: app
securityContext:
runAsUser: 1000 # ID користувача

Помилка 4: hostPath не існує

Events:
Warning FailedMount hostPath type check failed:
path /data/myapp does not exist

Рішення:

# Використовуйте тип DirectoryOrCreate
volumes:
- name: data
hostPath:
path: /data/myapp
type: DirectoryOrCreate # Замість Directory

3.3 Тайм-аут монтування

Розділ «3.3 Тайм-аут монтування»
Events:
Warning FailedMount Unable to attach or mount volumes:
timeout expired waiting for volumes to attach

Причини:

  • CSI-драйвер не відповідає
  • Бекенд сховища недоступний
  • Проблеми з вузлом

Налагодження:

Terminal window
# Перевірте Поди CSI-драйвера
k get pods -n kube-system | grep csi
# Перевірте логи CSI-драйвера
k logs -n kube-system <csi-controller-pod> -c csi-provisioner
# Перевірте стан вузла
k describe node <node-name> | grep -A5 Conditions

Частина 4: Проблеми з ємністю

Розділ «Частина 4: Проблеми з ємністю»

Симптоми: Помилки додатка про дисковий простір

Налагодження:

Terminal window
# Перевірте ємність PVC
k get pvc my-pvc
# CAPACITY: 10Gi
# Перевірте фактичне використання в Поді
k exec my-pod -- df -h /data
# Показує фактичне використання

Рішення 1: Розширити PVC (якщо StorageClass підтримує)

Terminal window
# Перевірте, чи дозволене розширення
k get sc <storageclass> -o jsonpath='{.allowVolumeExpansion}'
# true
# Розширте PVC
k patch pvc my-pvc -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'
# Моніторте статус розширення
k describe pvc my-pvc | grep -A5 Conditions

Рішення 2: Очистити дані

Terminal window
k exec my-pod -- rm -rf /data/tmp/*

4.2 Недостатня ємність

Розділ «4.2 Недостатня ємність»
Events:
Warning ProvisioningFailed insufficient capacity

Причини:

  • Бекенд сховища заповнений
  • Квота перевищена
  • Регіональні обмеження ємності (хмара)

Налагодження:

Terminal window
# Перевірте ResourceQuota
k get resourcequota -n <namespace>
# Перевірте LimitRange
k get limitrange -n <namespace>
# Для хмари перевірте консоль хмари на ємність

Частина 5: Проблеми з CSI-драйвером

Розділ «Частина 5: Проблеми з CSI-драйвером»

5.1 CSI-драйвер не встановлений

Розділ «5.1 CSI-драйвер не встановлений»

Симптоми: PVC застряг у pending, події згадують CSI

Terminal window
k describe pvc my-pvc
# Events:
# Warning ProvisioningFailed error getting CSI driver name

Налагодження:

Terminal window
# Список CSI-драйверів
k get csidrivers
# Перевірте, чи Поди драйвера працюють
k get pods -n kube-system | grep csi
# Перевірте об'єкти CSINode
k get csinode

5.2 CSI-драйвер у CrashLoop

Розділ «5.2 CSI-драйвер у CrashLoop»
Terminal window
k get pods -n kube-system | grep csi
# NAME READY STATUS RESTARTS
# ebs-csi-controller-xxx 0/6 CrashLoopBackOff 5

Налагодження:

Terminal window
# Перевірте логи
k logs -n kube-system ebs-csi-controller-xxx -c csi-provisioner
k logs -n kube-system ebs-csi-controller-xxx -c csi-attacher
# Поширені причини:
# - Відсутні хмарні облікові дані
# - Неправильні IAM-дозволи
# - Проблеми з мережевим з'єднанням

5.3 Дозволи CSI-драйвера

Розділ «5.3 Дозволи CSI-драйвера»

Для хмарного сховища CSI-драйверам потрібні відповідні дозволи:

AWS: IAM-роль з дозволами EBS

Terminal window
# Перевірте service account
k get sa -n kube-system ebs-csi-controller-sa -o yaml
# Шукайте анотацію eks.amazonaws.com/role-arn

GCP: Workload Identity або service account вузла Azure: Managed Identity або service principal


Частина 6: Швидкий довідник: Повідомлення про помилки

Розділ «Частина 6: Швидкий довідник: Повідомлення про помилки»

6.1 Шпаргалка повідомлень про помилки

Розділ «6.1 Шпаргалка повідомлень про помилки»
Повідомлення про помилкуЙмовірна причинаШвидке виправлення
no persistent volumes availableНемає відповідного PV для статичного наданняСтворіть відповідний PV
storageclass not foundНеправильне ім’я StorageClassПеревірте k get sc
waiting for first consumerРежим WaitForFirstConsumerСтворіть Под, що використовує PVC
Multi-Attach errorRWO том на кількох вузлахСпочатку видаліть старий Под
permission deniedДозволи файлової системиВстановіть fsGroup/runAsUser
path does not existhostPath відсутнійВикористовуйте DirectoryOrCreate
timeout waiting for volumesПроблема CSI-драйвераПеревірте Поди/логи CSI
insufficient capacityНемає місця в бекенді сховищаРозширте або очистіть
volume is already attachedЗастаріле приєднання томуВидаліть VolumeAttachment

6.2 Швидкі команди налагодження

Розділ «6.2 Швидкі команди налагодження»
Terminal window
# Однорядкова перевірка типових проблем
echo "=== PVCs ===" && k get pvc && \
echo "=== PVs ===" && k get pv && \
echo "=== StorageClasses ===" && k get sc && \
echo "=== Нещодавні події ===" && k get events --sort-by='.lastTimestamp' | tail -20

ПомилкаПроблемаРішення
Не перевіряти EventsПропуск фактичного повідомлення про помилкуЗавжди k describe першим
Ігнорування namespacePVC в іншому namespace, ніж ПодПеревірте відповідність namespace
Забули про WaitForFirstConsumerДумати, що PVC зламаний, коли PendingПеревірте volumeBindingMode
Видалення PVC перед ПодомПод не може коректно розмонтуватиСпочатку видаліть Под
Не перевіряти логи CSIЗагальні помилки приховують справжню причинуПеревірте Поди CSI-драйвера
Неправильний відступ YAMLСпецифікація тому неваліднаВикористовуйте --dry-run=client -o yaml

Q1: Перший крок налагодження

Розділ «Q1: Перший крок налагодження»

Под застряг у ContainerCreating. Яку команду слід виконати першою?

Відповідь
Terminal window
k describe pod <pod-name>

Це показує секцію Events, яка зазвичай містить конкретне повідомлення про помилку, чому Под не може запуститися. Шукайте помилки, пов’язані з томами, як-от FailedMount або FailedAttach.

PVC застряг у стані Pending. Як дізнатися, чому?

Відповідь
Terminal window
k describe pvc <pvc-name>

Перевірте секцію Events на наявність попереджень, як-от:

  • “no persistent volumes available” — немає відповідного PV
  • “storageclass not found” — неправильне ім’я SC
  • “waiting for first consumer” — очікувано з WaitForFirstConsumer

Ви бачите “Multi-Attach error for volume”. Що це означає і як це виправити?

Відповідь

Помилка означає, що RWO (ReadWriteOnce) том вже приєднаний до іншого вузла, зазвичай від старого Пода, який не був коректно розмонтований.

Виправлення:

  1. Знайдіть та видаліть старий Под: k get pods -o wide, щоб знайти Под, який використовує том
  2. Якщо Под застряг при завершенні: k delete pod <name> --force --grace-period=0
  3. Перевірте VolumeAttachment за потреби: k get volumeattachment

PVC показує Pending, але немає помилок у подіях. StorageClass використовує WaitForFirstConsumer. Це проблема?

Відповідь

Ні, це очікувана поведінка. З WaitForFirstConsumer PVC залишається Pending, поки не буде заплановано Под, який його використовує. Це насправді бажано для зонального сховища, щоб забезпечити створення тому в тій самій зоні, що й Под.

Щоб продовжити, створіть Под, який посилається на PVC, і PV буде надано при плануванні Пода.

Q5: Відмова в дозволі

Розділ «Q5: Відмова в дозволі»

Том монтується, але додаток отримує “permission denied” при записі. Що слід перевірити?

Відповідь

Перевірте security context Пода:

spec:
securityContext:
fsGroup: <gid> # Група для власності тому
containers:
- securityContext:
runAsUser: <uid> # Користувач, під яким працює контейнер

fsGroup повинен збігатися з GID, якому належать файли тому, або користувач контейнера повинен мати дозволи на запис.

Де шукати помилки CSI-драйвера?

Відповідь
Terminal window
# Знайдіть Поди CSI
k get pods -n kube-system | grep csi
# Перевірте логи контролера CSI
k logs -n kube-system <csi-controller-pod> -c csi-provisioner
k logs -n kube-system <csi-controller-pod> -c csi-attacher
# Перевірте логи CSI node plugin
k logs -n kube-system <csi-node-pod> -c csi-driver

Також перевірте k get csidrivers та k get csinode для статусу реєстрації драйвера.


Практична вправа: Сценарії усунення несправностей зберігання

Розділ «Практична вправа: Сценарії усунення несправностей зберігання»
Terminal window
# Створити namespace
k create ns storage-debug
# Ми створимо зламані конфігурації та виправимо їх

Сценарій 1: PVC не прив’язується (неправильний StorageClass)

Розділ «Сценарій 1: PVC не прив’язується (неправильний StorageClass)»
Terminal window
# Створити PVC з неправильним StorageClass
cat <<EOF | k apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: broken-pvc-1
namespace: storage-debug
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nonexistent-class
EOF
# Перевірити статус
k get pvc -n storage-debug broken-pvc-1
# Налагодження
k describe pvc -n storage-debug broken-pvc-1
# Шукайте: storageclass "nonexistent-class" not found
# Виправлення: Перелічіть доступні StorageClasses та перестворіть PVC
k get sc
k delete pvc -n storage-debug broken-pvc-1
# Перестворити з правильним StorageClass (використовуйте SC вашого кластера)
cat <<EOF | k apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: broken-pvc-1
namespace: storage-debug
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard # Використовуйте фактичне ім'я SC
EOF

Сценарій 2: Под не може змонтувати (неправильне ім’я PVC)

Розділ «Сценарій 2: Под не може змонтувати (неправильне ім’я PVC)»
Terminal window
# Створити валідний PVC
cat <<EOF | k apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: correct-pvc
namespace: storage-debug
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF
# Створити Под з неправильним посиланням на PVC
cat <<EOF | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: broken-pod-1
namespace: storage-debug
spec:
containers:
- name: app
image: busybox:1.36
command: ['sleep', '3600']
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: wrong-pvc-name # Це не існує!
EOF
# Перевірити статус Пода
k get pod -n storage-debug broken-pod-1
# STATUS: ContainerCreating
# Налагодження
k describe pod -n storage-debug broken-pod-1
# Шукайте: persistentvolumeclaim "wrong-pvc-name" not found
# Виправлення
k delete pod -n storage-debug broken-pod-1
cat <<EOF | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: broken-pod-1
namespace: storage-debug
spec:
containers:
- name: app
image: busybox:1.36
command: ['sleep', '3600']
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: correct-pvc # Виправлено!
EOF

Сценарій 3: Помилка типу hostPath

Розділ «Сценарій 3: Помилка типу hostPath»
Terminal window
# Створити Под зі строгим типом hostPath
cat <<EOF | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: broken-pod-2
namespace: storage-debug
spec:
containers:
- name: app
image: busybox:1.36
command: ['sleep', '3600']
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /tmp/nonexistent-path-xyz
type: Directory # Зазнає невдачі, якщо каталог не існує
EOF
# Налагодження
k describe pod -n storage-debug broken-pod-2
# Може показати: hostPath type check failed
# Виправлення: Використовуйте DirectoryOrCreate
k delete pod -n storage-debug broken-pod-2
cat <<EOF | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: broken-pod-2
namespace: storage-debug
spec:
containers:
- name: app
image: busybox:1.36
command: ['sleep', '3600']
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
hostPath:
path: /tmp/nonexistent-path-xyz
type: DirectoryOrCreate # Створює, якщо відсутній
EOF
  • Визначено помилку StorageClass з подій
  • PVC виправлено для використання правильного StorageClass
  • Визначено неправильне ім’я PVC з подій Пода
  • Под виправлено для посилання на правильний PVC
  • Зрозуміли вимоги до типів hostPath
Terminal window
k delete ns storage-debug

Вправа 1: Швидка перевірка статусу (1 хв)

Розділ «Вправа 1: Швидка перевірка статусу (1 хв)»
Terminal window
# Завдання: Перевірити, чи всі PVC у namespace прив'язані
k get pvc -n <namespace>
# Шукайте будь-які, що не показують "Bound"

Вправа 2: Знайти події PVC (1 хв)

Розділ «Вправа 2: Знайти події PVC (1 хв)»
Terminal window
# Завдання: Отримати події для конкретного PVC
k describe pvc <pvc-name> | grep -A20 Events

Вправа 3: Перевірити том у Поді (2 хв)

Розділ «Вправа 3: Перевірити том у Поді (2 хв)»
Terminal window
# Завдання: Перевірити, що том правильно змонтований у Поді
k exec <pod> -- df -h
k exec <pod> -- ls -la /data

Вправа 4: Налагодити ContainerCreating (2 хв)

Розділ «Вправа 4: Налагодити ContainerCreating (2 хв)»
Terminal window
# Завдання: Знайти, чому Под застряг у ContainerCreating
k describe pod <pod-name>
# Перевірте Events на помилки монтування

Вправа 5: Перевірити статус CSI-драйвера (2 хв)

Розділ «Вправа 5: Перевірити статус CSI-драйвера (2 хв)»
Terminal window
# Завдання: Перевірити, що CSI-драйвер працює
k get pods -n kube-system | grep csi
k get csidrivers

Вправа 6: Знайти відповідний PV (2 хв)

Розділ «Вправа 6: Знайти відповідний PV (2 хв)»
Terminal window
# Завдання: Знайти, чому PVC не прив'язується до існуючого PV
k get pvc <pvc-name> -o yaml | grep -E 'storage:|accessModes:|storageClassName:'
k get pv <pv-name> -o yaml | grep -E 'storage:|accessModes:|storageClassName:'
# Порівняйте значення

Вправа 7: Перевірити VolumeAttachments (1 хв)

Розділ «Вправа 7: Перевірити VolumeAttachments (1 хв)»
Terminal window
# Завдання: Вивести всі приєднання томів
k get volumeattachment
# Корисно для налагодження помилок Multi-Attach

Вправа 8: Отримати нещодавні події зберігання (1 хв)

Розділ «Вправа 8: Отримати нещодавні події зберігання (1 хв)»
Terminal window
# Завдання: Отримати нещодавні події, пов'язані з PVC
k get events --field-selector reason=FailedBinding
k get events --field-selector reason=ProvisioningFailed

Підсумок: Контрольний список усунення несправностей зберігання

Розділ «Підсумок: Контрольний список усунення несправностей зберігання»
□ Под застряг? → k describe pod → перевірте Events
□ PVC Pending? → k describe pvc → перевірте Events
□ StorageClass існує? → k get sc
□ PV доступний? → k get pv
□ Режими доступу збігаються? → Порівняйте PVC та PV
□ StorageClassName збігається? → Порівняйте PVC та PV
□ CSI-драйвер працює? → k get pods -n kube-system | grep csi
□ Проблема з дозволами? → Перевірте securityContext fsGroup
□ Проблема з ємністю? → Перевірте квоти та бекенд сховища

Вітаємо! Ви завершили Частину 4: Зберігання. Тепер ви повинні вміти:

  • Налаштовувати томи (emptyDir, hostPath, projected)
  • Працювати з PersistentVolumes та PersistentVolumeClaims
  • Використовувати StorageClasses для динамічного надання
  • Створювати та відновлювати зі знімків томів
  • Усувати типові проблеми зберігання

Переходьте до Кумулятивний тест Частини 4, щоб перевірити свої знання, а потім до Частина 5: Усунення несправностей.