Создание и использование сервера Linux NFS (Network File System) со Службой Azure Kubernetes (AKS) вручную.
Обмен данными между контейнерами часто является необходимым компонентом служб и приложений на основе контейнеров. Скорее всего, у вас имеются различные модули pod, которым требуется доступ к одной и той же информации на внешнем постоянном томе. Хотя Файлы Azure является вариантом, создание сервера NFS на виртуальной машине Azure является другой формой постоянного общего хранилища.
В этой статье показано, как создать сервер NFS на виртуальной машине Azure Ubuntu и настроить кластер AKS с доступом к этой общей файловой системе в качестве постоянного тома.
Подготовка к работе
В этой статье предполагается, что для поддержки этой конфигурации требуется следующее:
- Существующий кластер AKS. Если у вас нет кластера AKS, ознакомьтесь с рекомендациями по проектированию корпоративной реализации AKS, см. в разделе "Планирование проектирования AKS".
- Кластер AKS должен находиться в той же или пиринговой виртуальной сети Azure, что и сервер NFS. Кластер должен быть создан в существующей виртуальной сети, которая может быть той же виртуальной сетью, что и виртуальная машина сервера NFS. Действия по настройке с использованием существующей виртуальной сети см. в документации по созданию кластера AKS в существующей виртуальной сети и подключению виртуальных сетей с помощью пиринга виртуальной сети.
- Виртуальная машина Azure Ubuntu Linux под управлением версии 18.04 или выше. Сведения о развертывании виртуальной машины Linux в Azure см. в статье Создание виртуальных машин Linux и управление ими.
Если вы развертываете свой кластер AKS впервые, Azure автоматически заполнит параметры виртуальной сети при развертывании виртуальной машины Azure Ubuntu, связывая виртуальную машину Ubuntu с той же виртуальной сетью. Если вы хотите работать с одноранговых сетей, обратитесь к приведенной выше документации.
Развертывание сервера NFS на виртуальной машине
Чтобы развернуть сервер NFS на виртуальной машине Azure Ubuntu, скопируйте следующий скрипт Bash и сохраните его на локальном компьютере. Замените значение переменной AKS_SUBNET правильным из кластера AKS, в противном случае указанное по умолчанию значение открывает сервер NFS для всех портов и подключений. В этой статье используется файл
nfs-server-setup.sh
.#!/bin/bash # This script should be executed on Linux Ubuntu Virtual Machine EXPORT_DIRECTORY=${1:-/export/data} DATA_DIRECTORY=${2:-/data} AKS_SUBNET=${3:-*} echo "Updating packages" apt-get -y update echo "Installing NFS kernel server" apt-get -y install nfs-kernel-server echo "Making data directory ${DATA_DIRECTORY}" mkdir -p ${DATA_DIRECTORY} echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}" mkdir -p ${EXPORT_DIRECTORY} echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}" mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY} echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory" chmod 777 ${EXPORT_DIRECTORY} parentdir="$(dirname "$EXPORT_DIRECTORY")" echo "Giving 777 permissions to parent: ${parentdir} directory" chmod 777 $parentdir echo "Appending bound directories into fstab" echo "${DATA_DIRECTORY} ${EXPORT_DIRECTORY} none bind 0 0" >> /etc/fstab echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file" echo "/export ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports echo "/export localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports nohup service nfs-kernel-server restart
Скрипт инициирует перезапуск сервера NFS, после чего вы можете продолжить подключение к серверу NFS из своего кластера AKS.
После создания виртуальной машины Linux скопируйте файл, созданный на предыдущем шаге, с локального компьютера на виртуальную машину с помощью следующей команды.
scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
Когда файл будет скопирован, установите SSH-подключение к виртуальной машине и выполните следующую команду.
sudo ./nfs-server-setup.sh
Если выполнение завершится с ошибкой отказа в разрешении, установите разрешение на выполнение для всех процессов, выполнив следующую команду.
chmod +x ~/nfs-server-setup.sh
Подключение кластера AKS к серверу NFS
Вы можете подключиться к серверу NFS из кластера AKS, подготовив постоянный том и утверждение постоянного тома, указывающее, как получить доступ к тому. Подключение двух служб в одной виртуальной сети или одноранговой виртуальной сети является обязательным. Сведения о настройке кластера в одной виртуальной сети см. в разделе Создание кластера AKS в существующей виртуальной сети.
После того как оба ресурса находятся в одной виртуальной или одноранговой виртуальной сети, подготовьте постоянный том и утверждение постоянного тома в кластере AKS. Затем контейнеры смогут подключить диск NFS к их локальному каталогу.
Создайте манифест YAML с именем pv-azurefilesnfs.yaml с помощью PersistentVolume. Например:
apiVersion: v1 kind: PersistentVolume metadata: name: NFS_NAME labels: type: nfs spec: capacity: storage: 1Gi accessModes: - ReadWriteMany nfs: server: NFS_INTERNAL_IP path: NFS_EXPORT_FILE_PATH
Замените значения NFS_INTERNAL_IP, NFS_NAME и NFS_EXPORT_FILE_PATH фактическими значениями с сервера NFS.
Создайте манифест YAML с именем pvc-azurefilesnfs.yaml с помощью PersistentVolumeClaim , использующего PersistentVolume. Например:
Внимание
Значение storageClassName должно быть пустой строкой, иначе утверждение не будет работать.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: NFS_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 1Gi selector: matchLabels: type: nfs
Замените значение NFS_NAME фактическим значением с сервера NFS.
Устранение неполадок
Если вы не можете подключиться к серверу из своего кластера AKS, проблема может заключаться в том, что экспортированный каталог или его родительский каталог не имеет достаточных разрешений для доступа к виртуальной машине сервера NFS.
Убедитесь, что каталог экспорта и родительский каталог предоставляются 777 разрешений.
Разрешения можно проверить, выполнив следующую команду (каталоги должны иметь разрешения drwxrwxrwx).
ls -l
Следующие шаги
- Соответствующие рекомендации см. в разделе Рекомендации по хранению и резервному копированию в AKS.
- Дополнительные сведения о настройке сервера NFS и устранении проблем см. в руководстве по NFS от сообщества Ubuntu.
Azure Kubernetes Service