본문으로 건너뛰기

NFS 파일 시스템 마운트

NFS 파일 시스템은 Virtual Machine 인스턴스와 Kubernetes Engine 워크로드에 마운트하여 사용할 수 있습니다.

Virtual Machine 환경에 마운트

Virtual Machine 인스턴스에 NFS 파일 시스템을 마운트하는 방법은 다음과 같습니다.

Virtual Machine 인스턴스 접속

  1. 카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.
  2. 인스턴스 메뉴에서 마운트할 Virtual Machine 인스턴스의 [⋮] 버튼 > SSH 연결을 선택합니다.
  3. SSH 연결 팝업에서 [복사] 버튼을 클릭해 실행 명령어를 복사합니다.
  4. 복사한 명령어를 사용하여 인스턴스에 연결합니다. SSH를 사용한 인스턴스 연결에 대한 자세한 설명은 Virtual Machine > 인스턴스 생성 및 연결을 참고하세요.

NFS 패키지 설치

  1. 인스턴스의 OS를 확인한 후, 다음 명령어로 NFS 패키지를 설치합니다.

    CentOS
    sudo yum install -y nfs-utils
  2. 설치가 완료되었는지 확인합니다.

NFS 마운트

  1. Virtual Machine 인스턴스에 접속하여 NFS 마운트 디렉터리를 생성합니다.

    mkdir {마운트 디렉터리}
  2. 마운트 디렉터리의 생성 여부를 확인합니다.

    ls -la
  3. 다음과 같이 nfs-mount 디렉터리가 생성된 것을 확인합니다.

    drwxr-xr-x 2 deploy deploy 4096 Dec 13 06:17 nfs-mount
  4. 파일 시스템 상세 정보에서 확인한 마운트 정보와 생성한 마운트 디렉터리를 사용하여 마운트합니다.

    sudo mount -t nfs {파일 시스템 프라이빗 IP}:/{파일 공유 이름} {생성한 마운트 디렉터리}
  5. 마운트 여부를 확인합니다.

    mount
  6. 다음과 같이 마운트가 성공적으로 완료되었는지 확인합니다.

    11.111.11.111:/share_storage on /home/deploy/nfs-mount type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.183.51.186,local_lock=none,addr=11.111.11.111)

NFS 마운트 해제

NFS 마운트 연결을 해제하려면 다음 명령어를 실행합니다.

umount {마운트 디렉터리}

Kubernetes Engine 환경에 마운트

Kubernetes Engine에서 NFS 파일 시스템을 마운트하는 방법은 다음과 같습니다.

NFS 접근 허용

  1. Kubernetes Engine의 Worker Node IP를 확인합니다.

    kubectl --kubeconfig={kube_config} get nodes -o wide

    이미지. Worker Node IP 확인 Worker Node IP 확인

  2. File Storage 접근 제어 설정에서 Worker Node IP를 허용합니다.

    • File Storage > Basic 파일 시스템 > 네트워크 탭의 접근 제어 설정에서 허용된 프라이빗 IP 주소에 Worker Node IP를 추가합니다.

PV 생성

  1. PV(Persistent Volume) 생성을 위한 YAML 파일을 생성합니다.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: pv-nfs-share-storage
    spec:
    capacity:
    storage: 1Gi
    accessModes:
    - ReadWriteMany
    nfs:
    server: {파일 시스템 프라이빗 IP}
    path: /{파일 공유 이름}
    storageClassName: "nfs-share-storage"
  2. 생성한 PV YAML 파일을 Kubernetes Engine에 적용합니다.

    kubectl --kubeconfig={kube_config} apply -f nfs-pv.yaml
  3. 적용 여부를 확인합니다.

    kubectl --kubeconfig={kube_config} get pv

    이미지. PV 적용 여부 확인 PV 적용 여부 확인

PVC 생성

  1. Persistent Volume을 포함하는 PVC(Persistent Volume Claim) YAML 파일을 생성합니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc-nfs-share-storage
    spec:
    storageClassName: "nfs-share-storage"
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 1Gi
  2. PVC YAML 파일을 Kubernetes Engine에 적용합니다.

    kubectl --kubeconfig={kube_config} apply -f nfs-pvc.yaml
  3. 적용 여부를 확인합니다.

    kubectl --kubeconfig={kube_config} get pvc
  4. 다음과 같이 적용된 것을 확인할 수 있습니다.

    이미지. PV 적용 여부 확인 PV 적용 여부 확인

Deployment 생성

  1. Kubernetes Engine에 배포되는 Pod에 PVC를 마운트하기 위해 Deployment YAML 파일을 생성합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: {Deployment 이름}
    spec:
    selector:
    matchLabels:
    app: {Label 이름}
    replicas: 2
    template:
    metadata:
    labels:
    app: {Label 이름}
    spec:
    containers:
    - name: master
    image: {사용자 컨테이너 URL}
    ports:
    - containerPort: 77
    volumeMounts:
    - mountPath: /data/share-storage
    name: pvc-volume
    volumes:
    - name: pvc-volume
    persistentVolumeClaim:
    claimName: pvc-nfs-share-storage
  2. Deployment YAML 파일을 Kubernetes Engine에 적용합니다.

    kubectl --kubeconfig={kube_config} apply -f deployment.yaml
  3. 적용 여부를 확인합니다.

    kubectl --kubeconfig={kube_config} get deployments
  4. 다음과 같이 적용된 것을 확인합니다.

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-demo 2/2 2 2 1d
  5. Deployment에 의해 생성된 Pod를 확인합니다.

    kubectl --kubeconfig={kube_config} get pods
  6. 생성한 Pod를 확인합니다.

    NAME                          READY   STATUS    RESTARTS   AGE
    nginx-demo- 1/1 Running 0 1d
    nginx-demo- 1/1 Running 0 1d

마운트 여부 확인

  1. 생성한 Pod에 접속합니다.

    kubectl --kubeconfig={kube_config} exec -it {Pod 이름} -- /bin/bash
  2. 마운트가 정상적으로 완료되었는지 확인합니다.

    $ mount
    ip:/share_storage on /data/share-storage type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=ip,local_lock=none,addr=ip)