
Изд. № 29
.pdf
accessModes:
- ReadWriteOnce resources:
requests: storage: 4Gi
EOF
Проверьте состояние объекта:
kubectl get pvc mypvc
Далее начинается создание узла busybox и использование созданного
PersistentVolumeClaim:
cat <<'EOF'> busybox-pod-one.yaml | kubectl apply -f busybox-pod- one.yaml
apiVersion: v1 kind: Pod metadata:
creationTimestamp: null labels:
run: busybox name: busybox
spec:
volumes:
-name: my-vol # has to match volumeMounts.name persistentVolumeClaim:
claimName: mypvc
containers:
-args:
-/bin/sh
--c
-sleep 3600 image: busybox
imagePullPolicy: IfNotPresent name: busybox
resources: {}
volumeMounts:
-name: my-vol # has to match volumes.name mountPath: /etc/foo
EOF
100

Проверьте состояние узла:
watch kubectl get pod busybox CTRL+C to exit
Далее начинаем проверку сохранности данных, подключившись к модулю и скопировав '/etc/passwd' в '/etc/foo/passwd', а затем удалив его:
kubectl exec busybox -it -- cp /etc/passwd /etc/foo/passwd
Удалите узел:
kubectl delete pod busybox --force --grace-period 0
Затем начинается создание второго узла, идентичного тому, который создан. Смонтировать его на том же томе и проверить, существует ли скопированный нами файл:
cat <<'EOF'> busybox-pod-two.yaml | kubectl apply -f busybox-pod- two.yaml
apiVersion: v1 kind: Pod metadata:
creationTimestamp: null labels:
run: busybox-two name: busybox-two
spec:
volumes:
-name: my-vol # has to match volumeMounts.name persistentVolumeClaim:
claimName: mypvc
containers:
-args:
-/bin/sh
--c
-sleep 3600 image: busybox
imagePullPolicy: IfNotPresent name: busybox
resources: {}
volumeMounts:
-name: my-vol # has to match volumes.name mountPath: /etc/foo
EOF
101

Проверьте состояние узла:
watch kubectl get pod busybox-two CTRL+C to exit
Verify that '/etc/foo' contains the 'passwd' file.
kubectl exec busybox-two -- ls /etc/foo # will show 'passwd'
Можно видеть файл, который скопирован, поскольку данные сохраняются в постоянном томе, который создан после удаления первого узла.
Моментальные снимки тома и классы моментальных снимков
В этом упражнении рассматривается создание моментального снимка
тома.
Шаг 2 – создать моментальные снимки тома
При создании моментального снимка тома необходимо зарегистрировать классы моментальных снимков тома в кластере. Класс моментальных снимков тома по умолчанию называется csi-hostpath-sn:
kubectl get volumesnapshotclasses
Затем создайте заявку на постоянный том, чтобы динамически создавать постоянный том:
cat <<'EOF'> csi-pvc.yaml | kubectl apply -f csi-pvc.yaml apiVersion: v1
kind: PersistentVolumeClaim metadata:
name: csi-pvc spec:
accessModes:
- ReadWriteOnce resources:
requests: storage: 1Gi
storageClassName: csi-hostpath-sc EOF
Можно подтвердить, что постоянный том создан с помощью следующей команды:
kubectl get pv
102

Можно сделать снимок тома для заявки на постоянный том:
cat <<'EOF'> snapshot-demo.yaml | kubectl apply -f snapshotdemo.yaml
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot
metadata:
name: snapshot-demo spec:
volumeSnapshotClassName: csi-hostpath-snapclass source:
persistentVolumeClaimName: csi-pvc
EOF
Ключевые термины в приведенном выше фрагменте перечислены далее.
Имя PersistentVolumeClaim - это имя источника данных PersistentVolumeClaim для моментального снимка.
Моментальный снимок тома может запросить определенный класс, указав имя VolumeSnapshotClass, используя атрибут volumeSnapshotClassName. Если ничего не задано, используется класс по умолчанию.
Можно подтвердить свой моментальный снимок тома следующей командой:
kubectl get volumesnapshot
Восстановление из моментального снимка тома
Шаг 3 – восстановить из моментального снимка
Чтобы выполнить операцию восстановления, нужно использовать созданный моментальный снимок в новом ресурсе persistentvolumeclaim:
cat <<'EOF'> csi-pvc-restore.yaml | kubectl apply -f csi-pvc- restore.yaml
apiVersion: v1
kind: PersistentVolumeClaim metadata:
name: csi-pvc-restore spec:
storageClassName: csi-hostpath-sc dataSource:
name: snapshot-demo kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io accessModes:
103

- ReadWriteOnce resources:
requests: storage: 1Gi
EOF
Можно подтвердить, что постоянное утверждение тома было создано с помощью VolumeSnapshot:
kubectl get pvc
Резервное копирование и аварийное восстановление Kasten K10
Шаг 4 – произвести резервное копирование и аварийное восстановление
В приведенном ниже разделе представлен полный пример того, как расширить приложение для поддержки универсального резервного копирования и восстановления с помощью Kasten K10.
Откройте вкладку Терминал и запустите приведенную ниже команду, чтобы создать новое пространство имен для размещения нашего приложения:
kubectl create namespace kasten-demo
Скопируйте спецификацию приложения ниже и разверните приложение demo-app в пространстве имен kasten-demo:
cat <<'EOF'> deployment.yaml | kubectl apply -f deployment.yaml apiVersion: v1
kind: PersistentVolumeClaim metadata:
namespace: kasten-demo name: demo-pvc labels:
app: demo pvc: demo
spec:
accessModes:
- ReadWriteOnce resources:
requests: storage: 1Gi
---
apiVersion: apps/v1 kind: Deployment metadata:
namespace: kasten-demo name: demo-app
104

labels: app: demo
spec: replicas: 1 selector:
matchLabels: app: demo
template:
metadata:
labels: app: demo
spec:
containers:
-name: demo-container image: alpine:3.7 resources:
requests: memory: 256Mi cpu: 100m
command: ["tail"]
args: ["-f", "/dev/null"] volumeMounts:
-name: data mountPath: /data
volumes:
-name: data persistentVolumeClaim:
claimName: demo-pvc
EOF
Теперь необходимо проверить статус развернутого приложения:
POD_NAME=$(kubectl --namespace kasten-demo get pods -l app=demo - -no-headers | awk '{print $1}')
kubectl --namespace kasten-demo get pods "$POD_NAME"
Вставка данных
Шаг 5 – вставить данные
Самый простой способ вставить данные в демонстрационное приложение - это скопировать их:
kubectl cp /etc/passwd kasten-demo/${POD_NAME}:/data/ -c democontainer
105

Проверьте, что данные были успешно скопированы:
kubectl --namespace kasten-demo exec ${POD_NAME} -c democontainer -- ls -l /data
Резервное копирование данных Мы собираемся создать резервную копию приложения, создав
пользовательскую политику резервного копирования.
cat <<'EOF'> custom-policy.yaml | kubectl apply -f custompolicy.yaml
kind: Policy
apiVersion: config.kio.kasten.io/v1alpha1 metadata:
name: sample-custom-backup-policy namespace: kasten-io
spec:
frequency: "@hourly" retention:
hourly: 24 daily: 7 weekly: 4 monthly: 12 yearly: 7
selector:
matchExpressions:
-key: k10.kasten.io/appNamespace operator: In
values:
-kasten-demo
actions:
- action: backup
EOF
Для получения дополнительной информации о пользовательском ресурсе Policy, нужно обратиться к странице документации Policy API.
После применения, открыть вкладку Kasten K10 и в окне панели мониторинга принять лицензионное соглашение и выбрать Политики.
Затем выбрать политику с именем sample-custom-backup-policy, нажать "Выполнить один раз", чтобы запустить политику сейчас. Это немедленно приведет к выполнению действий в политике sample-custom-backup-policy.
Вернуться на панель мониторинга и посмотреть выполняемые действия.
106

Уничтожение данных
Шаг 6 – уничтожить данные
Чтобы уничтожить данные вручную, необходимо вернуться в окно терминала и выполнить следующую команду:
kubectl -n kasten-demo exec ${POD_NAME} -c demo-container -- rm - rf /data/passwd
Проверить:
kubectl -n kasten-demo exec ${POD_NAME} -c demo-container -- cat /data/passwd
Восстановление данных
Шаг 7 – восстановить данные
Открыть вкладку Kasten K10 и в окне панели мониторинга выбрать Приложения.
На карточке приложения kasten-demo нажать "Восстановить", выбрать соответствующую точку восстановления и снова нажать "Восстановить".
Вернуться на панель мониторинга, чтобы просмотреть выполняемое действие восстановления и дождаться его завершения.
Проверка данных
После восстановления нужно убедиться, что данные не повреждены. Один из способов проверить, это - использовать инструмент diff.
Шаг 8 – проверить данные
Скопируйте восстановленные данные обратно в локальную среду env:
POD_NAME=$(kubectl --namespace kasten-demo get pods -l app=demo - -no-headers | awk '{print $1}')
kubectl cp kasten-demo/${POD_NAME}:data/passwd /tmp/passwd -c demo-container
Запустите diff для обоих файлов:
diff /etc/passwd /tmp/passwd
107
Содержание отчета
1.Титульный лист.
2.Цель работы.
4. Задание из практической работы.
5. Скриншоты пройденного тестирования.
6. Скриншоты выполнения практической работы.
7. Краткий ответ на пять контрольных вопросов.
Контрольные вопросы
1.В чем разница между постоянными и эфемерными томами?
2.Моментальный снимок тома, он аналогичен PersistentVolumeClaim?
3.Kasten K10 помогает защитить приложения от сбоев с помощью
чего?
4.На какие три основные категории делятся объемы?
5.Какие типы источников томов могут быть спроектированы в настоящее время?
108
Список использованных источников
1.Kubernetes в действии. - М.: ДМК Пресс, 2019. – 672 с. Марко Лукша / пер. с англ. А. В. Логунов.
2.Архитектура цифровых платформ для защищённых ЦОД. Ч. 1. Общие подходы и используемые технологии: учебное пособие / МТУСИ.
–М., 2021. – 90 с. В.А. Докучаев, С.В. Запольских, В.В. Маклачкова, В.М. Матросов, А.В. Шведов, О.В. Щербина / Под ред. д.т.н., проф. В.А. Докучаева.
3.Kybercapmus.io Build Your First Kubernetes Cluster | Course 1 [Электронный ресурс] - URL: https://kubecampus.io/kubernetes/courses/first- kubernetes-cluster/ (дата обращения: 24.02.2024).
4.Kybercapmus.io Использование minikube для создания кластера
[Электронный ресурс] - URL: https://kubernetes.io/ru/docs/tutorials/kubernetes- basics/create-cluster/cluster-intro/ (дата обращения: 25.02.2024).
5.Kybercapmus.io Build Kubernetes Application | Course 2 [Электронный ресурс] - URL: https://kubecampus.io/kubernetes/courses/build- kubernetes-application/ (дата обращения: 24.02.2024).
6.Kybercapmus.io Backup Your Kubernetes Application | Course 3 [Электронный ресурс] - URL: https://kubecampus.io/kubernetes/courses/backup- kubernetes-application/ (дата обращения: 26.02.2024).
7.Kybercapmus.io Application Consistency | Course 4 [Электронный ресурс] - URL: https://kubecampus.io/kubernetes/courses/application-consistency/
(дата обращения: 27.02.2024).
8.Kybercapmus.io Storage and Applications in Kubernetes| Course 5 [Электронный ресурс] - URL: https://kubecampus.io/kubernetes/courses/storage- and-applications-in-kubernetes/ (дата обращения: 27.02.2024).
9.Маркелов Андрей. Введение в технологии контейнеров и Kubernetes; Редактор Д.А. Мовчан. – М.: ДМК-Пресс, 2019; ISBN · 978-5- 97060-775-6.
10.Райс Лиз. Безопасность контейнеров. Фундаментальный подход к
защите контейнеризированных приложений / |
Пер. с англ. И. Пальти. |
— (Сер. «Бестселлеры O'Reilly»). – СПб.: |
Питер, 2021. - 224 с. |
-ISBN 978-5-4461-1850-2. - URL: https://www.ibooks.ru/bookshelf/377949/reading (дата обращения: 08.05.2024).
-Текст: электронный.
109