본문 바로가기
Backend MLOps/On-premise setting

[k8s] NFS 기반 PersistentVolume 직접 구축하기 - 1

by SteadyForDeep 2023. 9. 2.
반응형

이 글은 아래의 시리즈에 의존성을 가진다.

2023.08.27 - [Backend MLOps/On-premise setting] - [k8s] 라즈베리파이 클러스터링 -1

 

[클러스터링] 라즈베리파이 클러스터링 -1

라즈베리파이를 4대 사왔다. 연결해서 클러스터링을 연습 해보려고 한다. 필요한 준비물은 아래와 같다. 1. 라즈베리파이 2대 이상 2. microSD card 같은 수량 3. microSD card 리더기 4. hdmi to mini hdmi 케이

davi06000.tistory.com

2023.08.17 - [Backend MLOps/On-premise setting] - [k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 1

 

[k8s] kubeadm 을 이용해서 싱글노드 쿠버네티스 환경 구축 - 1

최근 흥미로운 주제가 생겨서 이 시리즈를 적어 본다. 싱글 노드 쿠버네티스를 구성하는 방법은 여러가지가 있다. 쿠버네티스 연습이 필요한 경우 혹은 회사에서 쿠버네티스 환경을 구축해야하

davi06000.tistory.com

2023.03.01 - [Backend MLOps/On-premise setting] - [k8s] 쿠버네티스 찍먹 - 1

 

[k8s] 쿠버네티스 찍먹 - 1

우선은 http://www.yes24.com/Product/Goods/102099414 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - YES24 실무에 바로 적용할 수 있는 컨테이너 인프라 환경 기술!IT 자원을 효율적으로 빠르게 사용할

davi06000.tistory.com

 

우선은 nfs를 간략하게 알아보자.

nfs는 Network File System의 약자로

네트워크로 연결된 특정 스토리지를 마치 파일시스템처럼 사용할 수 있게 만들어주는 툴을 말한다.

쿠버네티스의 각 파드의 경우 영구적이지 못한 스토리지를 가지는데

컨테이너의 특성상 마운트된 특정 볼륨이 없는 경우 컨테이너가 내려가는 순간

격리된 스토리지가 사라지기 때문이다.

이를 방지하기 위해서 영구적인 볼륨을 만들고 컨테이너에 마운트 시켜줘야하는데

이전 글들에서 사용한 HostPath 방식은 컨테이너가 올라가는 노드 안에서만 쓸 수 있으므로

클러스터 전체가 사용할 수 있는 볼륨을 구성하려면 네트워크 상에 떠 있는 볼륨을 생성해주어야 한다.

이 역할을 nfs가 수행하게 된다.

 

1. 우분투서버에 nfs 설치

 

sudo apt update
sudo apt install nfs-kernel-server

커널이 새로 설치되었으니 재시작을 해서 적용하라는 경고가 뜬다.

재 시작 해 주자.

 

나는 접근이 용이하도록 그냥 내 계정 아래에 공유할 디렉토리를 생성해 주도록 하겠다.

 

mkdir -p $HOME/nfs/shared

 

/etc/exports 로 가서 nfs파일의 접근 권한을 설정해 준다.

기본적으로 이 파일은 아래의 문법을 따른다.

<directory> <host1>(<options>) <host2>(<options>) ...

# <directory> : 공유할 디렉토리
# <host#> : 접근할 수 있게 권한을 부여할 호스트
# <options> : 해당 호스트에게 부여할 권한들
# # rw : Read Write
# # ro : Read Only
# # sync : nfs 서버가 요청받은 사항을 반영할 때까지 클라이언트의 응답을 지연
# # async : 일단 응답하고난 후 요청사항을 기록
# # no_subtree_check : 서브 디렉토리들이 export 되어있는지 확인하는 옵션을 끈다.
# #                    보통은 서브디렉토리가 모두 노출되어 있으므로 이 옵션으로 성능을 향상할 수 있다.
# # 
# # root_squash / no_root_squash : 루트 사용자로 접근하는 경우 root 그대로 사용할 것인지 아니면 nobody로 사용할 것인지 지정한다.

 

나는 아래와 같이 설정할 수 있다.

/home/manager/nfs/shared/ 192.168.0.11(rw,sync,no_subtree_check)
/home/manager/nfs/shared/ 192.168.0.12(rw,sync,no_subtree_check)
/home/manager/nfs/shared/ 192.168.0.13(rw,sync,no_subtree_check)
/home/manager/nfs/shared/ 192.168.0.14(rw,sync,no_subtree_check)

 

변경사항을 적용하고 nfs 서비스를 다시 시작한다.

sudo exportfs -a
sudo systemctl restart nfs-kernel-server

# 부팅시 nfs 활성화
sudo systemctl enable nfs-kernel-server

 

 

2. nfs 클라이언트로 간단한 텍스트파일 저장

 

라즈베리파이로 가서 nfs클라이언트를 설치해 준다.

sudo apt update
sudo apt install nfs-common

 

마운트 할 디렉토리를 생성해 준다.

mkdir ./nfs-mount/

 

이제 마운트해준다.

sudo mount <nfs-server-ip>:<nfs-path> ./nfs-mount/

이렇게 클라이언트에서 생성한 파일이

 

서버에도 생기면

성공이다.

 

이제 마운트를 풀어준다.

 sudo umount ./nfs-mount/
반응형

댓글