Модуль 4.5: Усунення несправностей зберігання
Складність:
[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 Довідник ключових команд»# Налагодження на рівні Подаk describe pod <pod-name>k get pod <pod-name> -o yamlk logs <pod-name>
# Налагодження PVCk get pvck describe pvc <pvc-name>k get pvc <pvc-name> -o yaml
# Налагодження PVk get pvk describe pv <pv-name>k get pv <pv-name> -o yaml
# Налагодження StorageClassk get sck describe sc <sc-name>
# Events (часто найкорисніші!)k get events --sort-by='.lastTimestamp'k get events --field-selector involvedObject.name=<pvc-name>
# Налагодження CSIk get pods -n kube-system | grep csik logs -n kube-system <csi-pod> -c <container>Частина 2: Проблеми прив’язки PVC
Розділ «Частина 2: Проблеми прив’язки PVC»2.1 PVC застряг у стані Pending
Розділ «2.1 PVC застряг у стані Pending»Симптоми: PVC показує STATUS: Pending, ніколи не стає Bound
k get pvc# NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS# my-pvc Pending fast-ssdКроки налагодження:
# Крок 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:
# Перевірте, що потрібно PVCk 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Рішення:
# Список доступних StorageClassesk get sc
# Виправте PVC для використання існуючого StorageClassk 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
k get pvc my-pvc# STATUS: Pending (це нормально, поки Под не використає його!)
k get sc fast-ssd -o jsonpath='{.volumeBindingMode}'# WaitForFirstConsumerРішення: Це очікувана поведінка! Створіть Под, який використовує PVC, і він прив’яжеться.
2.3 Невідповідність режиму доступу
Розділ «2.3 Невідповідність режиму доступу»Симптоми: PVC не прив’язується, хоча PV існує
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
Рішення:
# Варіант 1: Змінити PVC для відповідності PVk delete pvc my-pvc# Перестворити з RWO
# Варіант 2: Створити новий PV з RWX (якщо сховище підтримує)2.4 Невідповідність StorageClass
Розділ «2.4 Невідповідність StorageClass»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
k get pods# NAME READY STATUS RESTARTS AGE# my-pod 0/1 ContainerCreating 0 5mНалагодження:
k describe pod my-pod# Шукайте помилки, пов'язані з томами, в Events3.2 Поширені помилки монтування
Розділ «3.2 Поширені помилки монтування»Помилка 1: PVC не знайдено
Events: Warning FailedMount Unable to attach or mount volumes: persistentvolumeclaim "my-pvc" not foundРішення:
# Перевірте, що PVC існує в тому самому namespacek 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 том приєднаний до іншого вузла (типово під час збоїв вузлів)
Рішення:
# Зачекайте завершення старого Пода або примусово видалітьk delete pod <old-pod> --force --grace-period=0
# Якщо використовуєте StatefulSet, можливо, потрібно видалити старе приєднання PVk 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Рішення:
# Використовуйте тип DirectoryOrCreatevolumes:- name: data hostPath: path: /data/myapp type: DirectoryOrCreate # Замість Directory3.3 Тайм-аут монтування
Розділ «3.3 Тайм-аут монтування»Events: Warning FailedMount Unable to attach or mount volumes: timeout expired waiting for volumes to attachПричини:
- CSI-драйвер не відповідає
- Бекенд сховища недоступний
- Проблеми з вузлом
Налагодження:
# Перевірте Поди 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: Проблеми з ємністю»4.1 Том заповнений
Розділ «4.1 Том заповнений»Симптоми: Помилки додатка про дисковий простір
Налагодження:
# Перевірте ємність PVCk get pvc my-pvc# CAPACITY: 10Gi
# Перевірте фактичне використання в Подіk exec my-pod -- df -h /data# Показує фактичне використанняРішення 1: Розширити PVC (якщо StorageClass підтримує)
# Перевірте, чи дозволене розширенняk get sc <storageclass> -o jsonpath='{.allowVolumeExpansion}'# true
# Розширте PVCk patch pvc my-pvc -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'
# Моніторте статус розширенняk describe pvc my-pvc | grep -A5 ConditionsРішення 2: Очистити дані
k exec my-pod -- rm -rf /data/tmp/*4.2 Недостатня ємність
Розділ «4.2 Недостатня ємність»Events: Warning ProvisioningFailed insufficient capacityПричини:
- Бекенд сховища заповнений
- Квота перевищена
- Регіональні обмеження ємності (хмара)
Налагодження:
# Перевірте ResourceQuotak get resourcequota -n <namespace>
# Перевірте LimitRangek get limitrange -n <namespace>
# Для хмари перевірте консоль хмари на ємністьЧастина 5: Проблеми з CSI-драйвером
Розділ «Частина 5: Проблеми з CSI-драйвером»5.1 CSI-драйвер не встановлений
Розділ «5.1 CSI-драйвер не встановлений»Симптоми: PVC застряг у pending, події згадують CSI
k describe pvc my-pvc# Events:# Warning ProvisioningFailed error getting CSI driver nameНалагодження:
# Список CSI-драйверівk get csidrivers
# Перевірте, чи Поди драйвера працюютьk get pods -n kube-system | grep csi
# Перевірте об'єкти CSINodek get csinode5.2 CSI-драйвер у CrashLoop
Розділ «5.2 CSI-драйвер у CrashLoop»k get pods -n kube-system | grep csi# NAME READY STATUS RESTARTS# ebs-csi-controller-xxx 0/6 CrashLoopBackOff 5Налагодження:
# Перевірте логиk logs -n kube-system ebs-csi-controller-xxx -c csi-provisionerk logs -n kube-system ebs-csi-controller-xxx -c csi-attacher
# Поширені причини:# - Відсутні хмарні облікові дані# - Неправильні IAM-дозволи# - Проблеми з мережевим з'єднанням5.3 Дозволи CSI-драйвера
Розділ «5.3 Дозволи CSI-драйвера»Для хмарного сховища CSI-драйверам потрібні відповідні дозволи:
AWS: IAM-роль з дозволами EBS
# Перевірте service accountk get sa -n kube-system ebs-csi-controller-sa -o yaml# Шукайте анотацію eks.amazonaws.com/role-arnGCP: 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 error | RWO том на кількох вузлах | Спочатку видаліть старий Под |
permission denied | Дозволи файлової системи | Встановіть fsGroup/runAsUser |
path does not exist | hostPath відсутній | Використовуйте DirectoryOrCreate |
timeout waiting for volumes | Проблема CSI-драйвера | Перевірте Поди/логи CSI |
insufficient capacity | Немає місця в бекенді сховища | Розширте або очистіть |
volume is already attached | Застаріле приєднання тому | Видаліть VolumeAttachment |
6.2 Швидкі команди налагодження
Розділ «6.2 Швидкі команди налагодження»# Однорядкова перевірка типових проблем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 першим |
| Ігнорування namespace | PVC в іншому namespace, ніж Под | Перевірте відповідність namespace |
| Забули про WaitForFirstConsumer | Думати, що PVC зламаний, коли Pending | Перевірте volumeBindingMode |
| Видалення PVC перед Подом | Под не може коректно розмонтувати | Спочатку видаліть Под |
| Не перевіряти логи CSI | Загальні помилки приховують справжню причину | Перевірте Поди CSI-драйвера |
| Неправильний відступ YAML | Специфікація тому невалідна | Використовуйте --dry-run=client -o yaml |
Тест
Розділ «Тест»Q1: Перший крок налагодження
Розділ «Q1: Перший крок налагодження»Под застряг у ContainerCreating. Яку команду слід виконати першою?
Відповідь
k describe pod <pod-name>Це показує секцію Events, яка зазвичай містить конкретне повідомлення про помилку, чому Под не може запуститися. Шукайте помилки, пов’язані з томами, як-от FailedMount або FailedAttach.
Q2: Аналіз Pending PVC
Розділ «Q2: Аналіз Pending PVC»PVC застряг у стані Pending. Як дізнатися, чому?
Відповідь
k describe pvc <pvc-name>Перевірте секцію Events на наявність попереджень, як-от:
- “no persistent volumes available” — немає відповідного PV
- “storageclass not found” — неправильне ім’я SC
- “waiting for first consumer” — очікувано з WaitForFirstConsumer
Q3: Помилка Multi-Attach
Розділ «Q3: Помилка Multi-Attach»Ви бачите “Multi-Attach error for volume”. Що це означає і як це виправити?
Відповідь
Помилка означає, що RWO (ReadWriteOnce) том вже приєднаний до іншого вузла, зазвичай від старого Пода, який не був коректно розмонтований.
Виправлення:
- Знайдіть та видаліть старий Под:
k get pods -o wide, щоб знайти Под, який використовує том - Якщо Под застряг при завершенні:
k delete pod <name> --force --grace-period=0 - Перевірте VolumeAttachment за потреби:
k get volumeattachment
Q4: WaitForFirstConsumer
Розділ «Q4: WaitForFirstConsumer»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, якому належать файли тому, або користувач контейнера повинен мати дозволи на запис.
Q6: Пошук помилок CSI
Розділ «Q6: Пошук помилок CSI»Де шукати помилки CSI-драйвера?
Відповідь
# Знайдіть Поди CSIk get pods -n kube-system | grep csi
# Перевірте логи контролера CSIk logs -n kube-system <csi-controller-pod> -c csi-provisionerk logs -n kube-system <csi-controller-pod> -c csi-attacher
# Перевірте логи CSI node plugink logs -n kube-system <csi-node-pod> -c csi-driverТакож перевірте k get csidrivers та k get csinode для статусу реєстрації драйвера.
Практична вправа: Сценарії усунення несправностей зберігання
Розділ «Практична вправа: Сценарії усунення несправностей зберігання»Налаштування
Розділ «Налаштування»# Створити namespacek create ns storage-debug
# Ми створимо зламані конфігурації та виправимо їхСценарій 1: PVC не прив’язується (неправильний StorageClass)
Розділ «Сценарій 1: PVC не прив’язується (неправильний StorageClass)»# Створити PVC з неправильним StorageClasscat <<EOF | k apply -f -apiVersion: v1kind: PersistentVolumeClaimmetadata: name: broken-pvc-1 namespace: storage-debugspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: nonexistent-classEOF
# Перевірити статусk get pvc -n storage-debug broken-pvc-1
# Налагодженняk describe pvc -n storage-debug broken-pvc-1# Шукайте: storageclass "nonexistent-class" not found
# Виправлення: Перелічіть доступні StorageClasses та перестворіть PVCk get sck delete pvc -n storage-debug broken-pvc-1
# Перестворити з правильним StorageClass (використовуйте SC вашого кластера)cat <<EOF | k apply -f -apiVersion: v1kind: PersistentVolumeClaimmetadata: name: broken-pvc-1 namespace: storage-debugspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: standard # Використовуйте фактичне ім'я SCEOFСценарій 2: Под не може змонтувати (неправильне ім’я PVC)
Розділ «Сценарій 2: Под не може змонтувати (неправильне ім’я PVC)»# Створити валідний PVCcat <<EOF | k apply -f -apiVersion: v1kind: PersistentVolumeClaimmetadata: name: correct-pvc namespace: storage-debugspec: accessModes: - ReadWriteOnce resources: requests: storage: 1GiEOF
# Створити Под з неправильним посиланням на PVCcat <<EOF | k apply -f -apiVersion: v1kind: Podmetadata: name: broken-pod-1 namespace: storage-debugspec: 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: v1kind: Podmetadata: name: broken-pod-1 namespace: storage-debugspec: 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»# Створити Под зі строгим типом hostPathcat <<EOF | k apply -f -apiVersion: v1kind: Podmetadata: name: broken-pod-2 namespace: storage-debugspec: 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
# Виправлення: Використовуйте DirectoryOrCreatek delete pod -n storage-debug broken-pod-2
cat <<EOF | k apply -f -apiVersion: v1kind: Podmetadata: name: broken-pod-2 namespace: storage-debugspec: 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
Очищення
Розділ «Очищення»k delete ns storage-debugПрактичні вправи
Розділ «Практичні вправи»Вправа 1: Швидка перевірка статусу (1 хв)
Розділ «Вправа 1: Швидка перевірка статусу (1 хв)»# Завдання: Перевірити, чи всі PVC у namespace прив'язаніk get pvc -n <namespace># Шукайте будь-які, що не показують "Bound"Вправа 2: Знайти події PVC (1 хв)
Розділ «Вправа 2: Знайти події PVC (1 хв)»# Завдання: Отримати події для конкретного PVCk describe pvc <pvc-name> | grep -A20 EventsВправа 3: Перевірити том у Поді (2 хв)
Розділ «Вправа 3: Перевірити том у Поді (2 хв)»# Завдання: Перевірити, що том правильно змонтований у Подіk exec <pod> -- df -hk exec <pod> -- ls -la /dataВправа 4: Налагодити ContainerCreating (2 хв)
Розділ «Вправа 4: Налагодити ContainerCreating (2 хв)»# Завдання: Знайти, чому Под застряг у ContainerCreatingk describe pod <pod-name># Перевірте Events на помилки монтуванняВправа 5: Перевірити статус CSI-драйвера (2 хв)
Розділ «Вправа 5: Перевірити статус CSI-драйвера (2 хв)»# Завдання: Перевірити, що CSI-драйвер працюєk get pods -n kube-system | grep csik get csidriversВправа 6: Знайти відповідний PV (2 хв)
Розділ «Вправа 6: Знайти відповідний PV (2 хв)»# Завдання: Знайти, чому PVC не прив'язується до існуючого PVk 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 хв)»# Завдання: Вивести всі приєднання томівk get volumeattachment# Корисно для налагодження помилок Multi-AttachВправа 8: Отримати нещодавні події зберігання (1 хв)
Розділ «Вправа 8: Отримати нещодавні події зберігання (1 хв)»# Завдання: Отримати нещодавні події, пов'язані з PVCk get events --field-selector reason=FailedBindingk 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: Усунення несправностей.