Поделиться через


Варианты хранения приложений в AKS, включенные Azure Arc

Область применения: AKS в Azure Stack HCI 22H2, AKS на Windows Server

Приложения, которые выполняются в развертываниях AKS с помощью Служба Azure Kubernetes, включенных Azure Arc, могут потребоваться хранить и извлекать данные. Для некоторых рабочих нагрузок приложений данные могут использовать локальное, быстрое хранилище на ненужном узле при удалении модулей pod (Kubernetes использует модули pod для запуска экземпляра приложения).

Для других рабочих нагрузок может потребоваться хранилище, которое сохраняется на более регулярных томах данных. Для нескольких модулей pod может потребоваться совместно использовать одни и те же тома данных или повторно подключить тома данных, если модуль pod перепланирован на другом узле. Кроме того, может потребоваться возможность хранения, если модули pod содержат конфиденциальные данные или сведения о конфигурации приложения.

Образ хранилища архитектуры, показывающий главный кластер и узел.

В этой статье представлены основные понятия, которые предоставляют хранилище для приложений в AKS Arc, включая следующие:

  • Объемы
  • перенос постоянных томов;
  • Классы хранилищ
  • Утверждения постоянного тома (ПВХ)

Объемы

Приложениям часто нужна возможность хранить и извлекать данные. Так как Kubernetes обычно обрабатывает отдельные модули pod как временные, удаленные ресурсы, различные подходы доступны для приложений для использования и сохранения данных. Том представляет собой способ хранения, извлечения и сохранения данных в модулях pod и в жизненном цикле приложения.

В Kubernetes тома могут представлять не только традиционные данные, в которых хранятся и извлекаются сведения. Тома Kubernetes также можно использовать как способ вставки данных в модуль pod для использования контейнеров. Ниже перечислены некоторые распространенные типы томов Kubernetes:

  • emptyDir — этот том обычно используется в качестве временного хранилища для pod. Все контейнеры в pod могут обращаться к данных в томе. Данные, записанные в том этого типа, хранятся только в течение времени существования pod. Этот том удаляется вместе с pod. Этот том обычно использует базовое хранилище дисков локального узла, хотя оно также может существовать исключительно в памяти узла.

  • секрет . Этот том используется для включения конфиденциальных данных, таких как пароли, в модули pod. Сначала вы создадите секрет с помощью API Kubernetes. При определении модуля pod или развертывания можно запросить определенный секрет. Секреты предоставляются только узлам с запланированным модулем pod, который требует его, и секрет хранится в tmpfs, а не записывается на диск. При удалении последнего модуля pod на узле, требующем секрета, секрет удаляется из tmpfs узла. Тома Secret хранятся в указанном пространстве имен и доступны только элементам pod в этом пространстве имен.

  • configMap — этот тип тома используется для внедрения в элементы pod пар свойств "ключ-значение", например сведений о конфигурации приложения. Вместо определения сведений о конфигурации приложения в образе контейнера его можно определить как ресурс Kubernetes, который можно легко обновить и применить к новым экземплярам модулей pod по мере их развертывания. Как и при использовании секрета, сначала создайте ConfigMap с помощью API Kubernetes. Затем этот файл конфигурации можно запросить при определении модуля pod или развертывания. ConfigMap хранятся в заданном пространстве имен и могут обращаться только к модулям pod в том же пространстве имен.

перенос постоянных томов;

Тома, которые определяются и создаются в ходе жизненного цикла pod, существуют только до удаления pod. Нередко элементам pod нужно сохранить используемое ими хранилище, если pod переносится на другой узел во время события обслуживания, особенно в наборах с отслеживанием состояния. Постоянный том — это ресурс хранилища, созданный и управляемый API Kubernetes, который может существовать за пределами времени существования отдельного модуля pod.

Вы можете использовать тома дисков AKS, поддерживаемые VHDX, которые подключены как ReadWriteOnce и доступны для одного узла одновременно. Кроме того, можно использовать тома файлов AKS, поддерживаемые общими папками SMB или NFS. Они подключены как ReadWriteMany и доступны для нескольких узлов одновременно.

Администратор кластера может статически создать постоянный том, или том можно динамически создать сервером API Kubernetes. Если модуль pod запланирован и запрашивает хранилище, которое в настоящее время недоступно, Kubernetes может создать базовый VHDX-файл, а затем подключить его к модулем pod. Динамическая подготовка использует StorageClass для определения типа хранилища, который необходимо создать.

Классы хранилищ

Чтобы определить различные уровни (и расположение) хранилища, можно создать StorageClass. Класс storageClass также определяет восстановлениеpolicy. При удалении модуля pod этот метод reclaimPolicy управляет поведением базового ресурса хранилища, а постоянный том больше не требуется. Базовый ресурс хранилища можно удалить или сохранить для использования с будущим модулем pod.

В AKS Arc класс хранилища по умолчанию создается автоматически и использует CSV-файл для создания томов, поддерживаемых VHDX. Политика восстановления гарантирует, что базовый VHDX удаляется при удалении постоянного тома, используемого им. Класс хранилища также настраивает постоянные тома для расширения, поэтому необходимо изменить утверждение постоянного тома с новым размером.

Если для постоянного тома не указано значение StorageClass, используется класс storageClass по умолчанию. При запросе постоянных томов убедитесь, что они используют соответствующее хранилище. Вы можете создать StorageClass для дополнительных потребностей.

утверждения постоянного тома.

PersistentVolumeClaim запрашивает хранилище ReadWriteOnce или ReadWriteMany определенного класса storageClass и размера. Сервер API Kubernetes может динамически подготавливать базовый ресурс хранилища в AKS Arc, если нет существующего ресурса для выполнения утверждения на основе определенного класса StorageClass. Определение pod включает в себя подключение тома после его присоединения к pod.

PersistentVolume привязан к PersistentVolumeClaim после назначения доступного ресурса хранилища модулем pod, запрашивающего его. Постоянные тома и утверждения сопоставляются как один к одному.

В следующем примере манифеста YAML показано утверждение постоянного тома, которое использует класс storageClass по умолчанию и запрашивает диск 5Gi:

apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
  name: aks-hci-vhdx 
spec: 
  accessModes: 
  - ReadWriteOnce 
  storageClassName: default 
  resources: 
    requests: 
      storage: 5Gi 

При создании определения pod необходимо указать утверждение постоянного тома для запроса требуемого хранилища. Затем можно указать volumeMount приложения для чтения и записи данных. В следующем примере манифеста YAML показано, как можно использовать предыдущее утверждение постоянного тома для подключения тома в /mnt/aks-hci:

kind: Pod 
apiVersion: v1 
metadata: 
  name: nginx 
spec: 
  containers: 
    - name: myfrontend 
      image: k8s.gcr.io/nginx 
      volumeMounts: 
      - mountPath: "/mnt/aks-hci" 
        name: volume
  nodeSelector:
      kubernetes.io/os: linux
  volumes: 
    - name: volume 
      persistentVolumeClaim: 
        claimName: aks-hci-vhdx 

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

volumeMounts: 
        - mountPath: "d:" 
          name: volume 
        - mountPath: "c:\k" 
          name: k-dir 

Следующие шаги