Kwoo'S Blog - IT는 어렵다.
k8s에서 NFS Provisioning 사용 본문
Docker에서 볼륨을 사용했듯이 k8s에서 PV,PVC를 통해 볼륨을 연결하고 사용할 수 있다.
볼륨 프로비저닝 종류는 다음과 같이 2가지가 있다.
정적 프로비저닝
단어 그대로 미리 사용 가능한 용량을 산정하고 만들어둔 PV를 할당하는 방법이다. 정적 PV로 만들어둔 용량을 넘어서서 사용하는 요청은 실패한다.
동적 프로비저닝
동적 프로비저닝 같은 경우 사용자는 정적 프로비저닝과 달리 사용자는 PVC를 먼저 만들고 PV가 자동 생성된다.
이때 스토리지클래스를 사용하게 되며, 프로비저너로 사용될 매체(NFS,Local,AWS 등)가 필요하다.
즉, 과정은 다음과 같다.
스토리지클래스 생성 -> PVC 생성 -> PV 생성 -> 바인딩 -> 사용 -> Reclaim 전략에 따른 후처리
대개 AWS를 사용하면 EFS나 EBS를 사용할 수 있겠지만, 가장 간단하면서 쉬운 프로비저너인 NFS와 StorageClass를 통한 동적 프로비저닝을 사용해보겠다.
준비물
- NFS로 사용할 서버
(따로 VM을 띄워서 데이터서버로 운영해도 되지만, 번거롭다면 그냥 k8s의 Master 서버에 구성하는 식으로 해도 된다.)
- k8s 클러스터
과정
NFS 서버 구성 (NFS 서버로 쓸 노드에서 진행)
- nfs 패키지 설치
#Ubuntu
sudo apt update
sudo apt install nfs-kernel-server
#Centos
dnf install nfs-utils
- nfs로 사용할 디렉토리 경로 생성
sudo mkdir /mnt/nfs -p
sudo chown nobody:nogroup /mnt/nfs
sudo chmod 777 /mnt/nfs
(chown 같은 경우 root에서 진행해서 따로 해주진 않았음. 다른 유저를 가지고 하고 있다면 소유자에 대한 설정필요)
sudo vi /etc/exports
후 아래 내용 추가
client ip 전부 허용하기 위해 *로 설정
#/mnt/nfs client_ip(rw,sync,no_subtree_check)
/mnt/nfs *(rw,sync,no_subtree_check)
sudo systemctl restart nfs-kernel-server
exportfs -a
showmount -e
- /mnt/nfs 가 제대로 export 되었는지 확인
k8s 마스터 노드에서 NFS Provisiong
nfs 클라이언트용 패키지 설치
sudo apt install nfs-common
NFS Provisioner 설치
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
기본 네임스페이스 설정들을 전부 치환해준다.
사용하고 싶은 네임스페이스가 있다면 NS={사용하고싶은 네임스페이스}
#default 외 namespace는 따로 미리 생성해두자
NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}')
NAMESPACE=${NS:-default}
sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml ./deploy/deployment.yaml
#rbac 배포
kubectl create -f deploy/rbac.yaml
./deploy/deployment.yaml 에서 다음 Server IP, NFS_PATH 내용들 수정
- name: NFS_SERVER
value: 192.168.56.113 (NFS서버 IP)
- name: NFS_PATH
value: /mnt/nfs
#Deployment 수정 후
kubectl create -f deploy/deployment.yaml
동적 프로비저닝을 위한 StorageClass 설정
./deploy/class.yaml 에서 다음 내용 수정
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
onDelete: delete
pathPattern: "${.PVC.namespace}/${.PVC.name}"
#StorageClass 수정
kubectl create -f deploy/class.yaml
테스트
./deploy 에 있는 test-claim.yaml, test-pod.yaml 사용하여 정삭 작동 확인
kubectl create -f ./deploy/test-claim.yaml
kubectl create -f ./deploy/test-pod.yaml
NFS 서버에서 해당 POD에서 실행된 sh 결과값이 제대로 생성되었는지 확인
ls /mnt/nfs/~~~/SUCCESS
다음과 같이 생성된 PV 정보안에 SUCCESS가 있으면 성공
'Devops > 쿠버네티스' 카테고리의 다른 글
k8s 환경에 Harbor Helm으로 배포하기 (0) | 2022.11.15 |
---|---|
CKA - Networking -2 (0) | 2022.11.09 |
CKA - Networking -1 (0) | 2022.11.08 |
CKA - Storage (0) | 2022.11.08 |