AKS(Azure Kubernetes Service)를 사용하여 Linux NFS(네트워크 파일 시스템) 서버를 수동으로 만들고 사용합니다.
컨테이너 간에 데이터를 공유하는 것은 종종 컨테이너 기반 서비스 및 애플리케이션의 필수 구성 요소입니다. 일반적으로 외부 영구적 볼륨에서 동일한 정보에 액세스해야 하는 다양한 Pod가 있습니다. Azure Files는 옵션이지만 Azure VM에서 NFS 서버를 만드는 것은 또 다른 형태의 영구 공유 스토리지입니다.
이 문서에서는 Azure Ubuntu 가상 머신에서 NFS 서버를 만들고 이 공유 파일 컴퓨터에 대한 액세스 권한이 있는 AKS 클러스터를 영구 볼륨으로 설정하는 방법을 보여 줍니다.
시작하기 전에
이 문서에서는 이 구성을 지원하기 위해 다음이 있다고 가정합니다.
- 기존 AKS 클러스터 AKS 클러스터가 없는 경우 AKS의 엔터프라이즈 규모 구현 설계에 대한 참고 자료는 AKS 디자인 계획을 참조하세요.
- AKS 클러스터는 NFS 서버와 동일하거나 피어링된 Azure VNet(가상 네트워크)에 있어야 합니다. 클러스터는 NFS 서버 VM과 동일한 VNet일 수 있는 기존 VNet에 만들어야 합니다. 기존 VNet으로 구성하는 단계는 기존 VNET에서 AKS 클러스터 만들기 및 VNET 피어링으로 가상 네트워크 연결 문서에 설명되어 있습니다.
- 버전 18.04 이상을 실행하는 Azure Ubuntu Linux 가상 머신. Azure에 Linux VM을 배포하려면 Linux VM 만들기 및 관리를 참조하세요.
AKS 클러스터를 먼저 배포하는 경우 Azure는 Azure Ubuntu VM을 배포할 때 가상 네트워크 설정을 자동으로 채우고 Ubuntu VM을 동일한 VNet에 연결합니다. 대신 피어링된 네트워크를 사용하려는 경우 위의 설명서를 참조하세요.
가상 머신에 NFS 서버 배포
Azure Ubuntu 가상 머신에 NFS 서버를 배포하려면 다음 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 서버의 다시 시작을 시작하고 이후에 AKS 클러스터에서 NFS 서버 연결을 계속할 수 있습니다.
Linux VM을 만든 후 다음 명령을 사용하여 이전 단계에서 만든 파일을 로컬 컴퓨터에서 VM으로 복사합니다.
scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
파일을 복사한 후 VM에 대한 SSH(보안 셸) 연결을 열고 다음 명령을 실행합니다.
sudo ./nfs-server-setup.sh
권한 거부 오류로 인해 실행이 실패한 경우 다음 명령을 실행하여 모두에 대해 실행 권한을 설정합니다.
chmod +x ~/nfs-server-setup.sh
NFS 서버에 AKS 클러스터 연결
볼륨에 액세스하는 방법을 지정하는 영구 볼륨 및 영구 볼륨 클레임을 프로비전하여 AKS 클러스터에서 NFS 서버에 연결할 수 있습니다. 동일하거나 피어링된 가상 네트워크에서 두 리소스를 연결해야 합니다. 동일한 VNet에서 클러스터를 설정하는 방법을 알아보려면 기존 VNet에서 AKS 클러스터 만들기를 참조하세요.
두 리소스가 동일한 가상 또는 피어링된 VNet에 있으면 AKS 클러스터에서 영구 볼륨 및 영구 볼륨 클레임을 프로비전합니다. 그런 다음 컨테이너는 NFS 드라이브를 로컬 디렉터리에 탑재할 수 있습니다.
PersistentVolume으로 pv-azurefilesnfs.yaml이라는 YAML 매니페스트를 만듭니다. 예시:
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 서버의 실제 설정으로 바꿉니다.
PersistentVolume을 사용하는 PersistentVolumeClaim으로 pvc-azurefilesnfs.yaml이라는 YAML 매니페스트를 만듭니다. 예시:
Important
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 서버 VM에 액세스할 수 있는 충분한 권한이 없는 문제일 수 있습니다.
내보내기 디렉터리와 해당 부모 디렉터리 모두에 777 권한이 부여되어 있는지 확인합니다.
다음 명령을 실행하여 권한을 확인할 수 있으며 디렉터리에는 'drwxrwxrwx' 권한이 있어야 합니다.
ls -l
다음 단계
- 관련 모범 사례는 AKS에서 스토리지 및 백업에 대한 모범 사례를 참조하세요.
- NFS 서버 설정에 대해 자세히 알아보거나 문제를 디버그하는 데 도움이 되도록 Ubuntu 커뮤니티 NFS 자습서의 다음 자습서를 참조하세요.
Azure Kubernetes Service