Хранение данных приложений с использованием PersistentVolume

KubernetesKubernetesIntermediate
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (Lab) вы научитесь хранить данные приложения с использованием PersistentVolumes в Kubernetes.

PersistentVolumes (PVs) - это ресурсы Kubernetes, представляющие участок сетевого хранилища в кластере. Они могут использоваться для хранения данных приложения таким образом, чтобы это было независимо от жизненного цикла контейнера. Это означает, что данные могут быть сохранены, даже если контейнер завершает работу или перемещается на другой узел.

В этом лабораторном занятии вы создадите PersistentVolume и используете его для хранения данных простого веб-приложения. Затем вы измените приложение так, чтобы оно использовало PersistentVolumeClaim (PVC) для доступа к PersistentVolume. Наконец, вы измените PVC, чтобы запросить определенные ресурсы хранения.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-9685{{"Хранение данных приложений с использованием PersistentVolume"}} kubernetes/get -.-> lab-9685{{"Хранение данных приложений с использованием PersistentVolume"}} kubernetes/create -.-> lab-9685{{"Хранение данных приложений с использованием PersistentVolume"}} kubernetes/delete -.-> lab-9685{{"Хранение данных приложений с использованием PersistentVolume"}} kubernetes/edit -.-> lab-9685{{"Хранение данных приложений с использованием PersistentVolume"}} kubernetes/apply -.-> lab-9685{{"Хранение данных приложений с использованием PersistentVolume"}} kubernetes/exec -.-> lab-9685{{"Хранение данных приложений с использованием PersistentVolume"}} end

Запуск кластера Minikube

Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    • Эта команда настраивает однокузловой кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы запуск Minikube может занять несколько минут.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    • Проверьте, чтобы компоненты, такие как kubelet и apiserver, были перечислены как Running (работающие).
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы с запуском Minikube, используйте команду minikube delete для сброса среды при необходимости.

Создание PersistentVolume

На этом шаге вы создадите PersistentVolume, который можно использовать для хранения данных. Создайте файл YAML с именем pv.yaml со следующим содержимым:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data

Этот файл создает PersistentVolume с емкостью 1Gi и режимом доступа ReadWriteOnce. Поле hostPath указывает, что данные будут храниться на хост-машине по пути /mnt/data. Поле persistentVolumeReclaimPolicy установлено в значение Retain, что означает, что данные будут сохранены, даже если PersistentVolume будет удален.

Примените PersistentVolume к вашему кластеру с помощью следующей команды:

kubectl apply -f pv.yaml

Развертывание простого веб-приложения

На этом шаге вы развернете простое веб-приложение, которое будет хранить данные на PersistentVolume, созданном на шаге 1. Создайте файл YAML с именем web-app.yaml со следующим содержимым:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: web-app
          image: nginx
          volumeMounts:
            - name: data
              mountPath: /usr/share/nginx/html/data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: my-pvc

Этот файл создает Deployment с одним репликой и контейнером, который запускает образ nginx. Поле volumeMounts указывает, что контейнер должен подключить PersistentVolume по пути /usr/share/nginx/html/data. Поле volumes указывает, что контейнер должен использовать PersistentVolumeClaim с именем my-pvc.

Примените Deployment к вашему кластеру с помощью следующей команды:

kubectl apply -f web-app.yaml

Создание PersistentVolumeClaim

На этом шаге вы создадите PersistentVolumeClaim (запрос на постоянный том), который будет использоваться для запроса хранилища из PersistentVolume, созданного на шаге 1. Создайте файл YAML с именем pvc.yaml со следующим содержимым:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

Этот файл создает PersistentVolumeClaim с режимом доступа ReadWriteOnce и запросом на 500Mi хранилища из PersistentVolume.

Примените PersistentVolumeClaim к вашему кластеру с помощью следующей команды:

kubectl apply -f pvc.yaml

Проверка сохранения данных

На этом шаге вы убедитесь, что данные сохраняются на PersistentVolume. Вы получите доступ к веб-приложению, запущенному в контейнере, и запишите некоторые данные на PersistentVolume.

Сначала найдите имя пода, в котором запущено ваше приложение, выполнив следующую команду:

kubectl get pods -l app=web-app

Вы должны увидеть один под, в котором запущено ваше приложение. Запишите имя этого пода.

Затем выполните следующую команду, чтобы открыть сеанс оболочки в контейнере, в котором запущено ваше приложение:

kubectl exec -it /bin/sh < pod-name > --

Замените <pod-name> именем пода, которое вы записали ранее.

После того как вы войдете в сеанс оболочки, выполните следующую команду, чтобы добавить файл test.txt:

echo "This is a test file." > /usr/share/nginx/html/data/test.txt

Эта команда создает файл с именем test.txt с текстом "This is a test file." в директории данных PersistentVolume.

Удалите веб-приложение с помощью следующей команды:

kubectl delete deployment web-app

Восстановите веб-приложение с помощью следующей команды:

kubectl apply -f web-app.yaml

Убедитесь, что файл, который вы создали в директории данных, по-прежнему существует, выполнив следующие команды:

kubectl get pods -l app=web-app
kubectl exec cat /usr/share/nginx/html/data/test.txt < pod-name > --

Замените <pod-name> именем пода, которое вы записали ранее.

Изменение ресурсов хранилища PVC

На этом шаге вы измените PersistentVolumeClaim (PVC), чтобы запросить определенные ресурсы хранилища из PersistentVolume. Вы измените файл pvc.yaml, чтобы запросить 1Gi хранилища вместо 500Mi.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Добавьте поле allowVolumeExpansion: true в storageclass (класс хранилища) в последней строке.

kubectl edit storageclass standard
Пример изменения хранилища PVC

Примените обновленный PersistentVolumeClaim к вашему кластеру с помощью следующих команд:

kubectl delete deployment web-app
kubectl delete pvc my-pvc
kubectl apply -f web-app.yaml
kubectl apply -f pvc.yaml

Итоги

В этом лабораторном занятии вы узнали, как хранить данные приложения с использованием PersistentVolume (постоянных томов) в Kubernetes. Вы создали PersistentVolume, развернули простое веб-приложение, которое использовало этот PersistentVolume, создали PersistentVolumeClaim (запрос на постоянный том) для запроса хранилища из PersistentVolume и изменили PersistentVolumeClaim, чтобы запросить определенные ресурсы хранилища. Вы также убедились, что данные сохраняются на PersistentVolume, даже если контейнер завершает работу или перемещается на другой узел.