내가 보기 위한 쿠버네티스 정리글 - 4 (volume)

아카이브 · 2021. 5. 7. 00:29

오늘은 쿠버네티스의 볼륨에 대하여 알아볼 예정이다.

 

먼저 쿠버네티스에서 지원하는 볼륨에는 아래와 같이 다양한 유형들이 존재한다.

 

  • awsElasticBlockStore - AWS Elastic Block Store (EBS)
  • azureDisk - Azure Disk
  • azureFile - Azure File
  • cephfs - CephFS 볼륨
  • cinder - Cinder (오픈스택 블록 스토리지) (사용 중단)
  • csi - 컨테이너 스토리지 인터페이스 (CSI)
  • fc - Fibre Channel (FC) 스토리지
  • flexVolume - FlexVolume
  • flocker - Flocker 스토리지
  • gcePersistentDisk - GCE Persistent Disk
  • glusterfs - Glusterfs 볼륨
  • hostPath - HostPath 볼륨 (단일 노드 테스트 전용. 다중-노드 클러스터에서 작동하지 않음. 대신 로컬 볼륨 사용 고려)
  • iscsi - iSCSI (SCSI over IP) 스토리지
  • local - 노드에 마운트된 로컬 스토리지 디바이스
  • nfs - 네트워크 파일 시스템 (NFS) 스토리지
  • photonPersistentDisk - Photon 컨트롤러 퍼시스턴트 디스크. (이 볼륨 유형은 해당 클라우드 공급자가 없어진 이후 더 이상 작동하지 않는다.)
  • portworxVolume - Portworx 볼륨
  • quobyte - Quobyte 볼륨
  • rbd - Rados Block Device (RBD) 볼륨
  • scaleIO - ScaleIO 볼륨 (사용 중단)
  • storageos - StorageOS 볼륨
  • vsphereVolume - vSphere VMDK 볼륨

이번 챕터에서는 nfs서버를 구축한후 pv와 pvc를 생성할 예정이다.

 

먼저 pv를 생성하기전에 pv와 pvc가 뭔지 알아보자

 

PersitentVolume(pv) PersistentVolumeClaim(pvc)

 

일반적으로 디스크 볼륨을 설정하려면 물리적 디스크를 생성해야 하고, 이러한 물리적 디스크에 대한 설정을 자세하게 이해할 필요가 있다.

쿠버네티스는 인프라에 대한 복잡성을 추상화를 통해서 간단하게 하고, 개발자들이 손쉽게 필요한 인프라 (컨테이너,디스크, 네트워크)를 설정할 수 있도록 하는 개념을 가지고 있다

 

시스템관리자는 물리적디스크를 생성한 후에  이를 PersistentVolume이라는 이름으로 쿠버네티스에 등록을 한다.

개발자는 pod를 생성한후, 볼륨을 정의하고, 이 볼륨 정의 부분에 pvc를 지정하여 관리자가 생성한 pv와 연결한다.

 

이때 pv는 쿠버네티스 클러스터에 의해서 관리되면 pod와 상관없이 별도로 관리되기 때문에 직접 생성하고 삭제해야한다. 

 

자 이제 nfs 구축부터 시작하겠다.


워커노드의 vm을 구축했던것과 같이 nfs서버를 같은 방식으로 만든 후 편의상 아래와같이 ssh로 접속해서 작업을 진행할 것이다.

 

 

그 후 Advanced Packaging Tool을 사용하여 nfs 패키지를 설치해준다.

apt-get update

apt install nfs-common nfs-kernel-server portmap

 

설치가 완료되었으면 파일을 공유할 폴더를 생성한후 폴더 권한을 부여한다.

mkdir /home/share/nfs -p

chmod 777 /home/share/nfs

 

그 후 나노 에디터를 통하여 /etc/exports 파일의 공유폴더의 허용 hosts 및 권한을 설정한다.

 nano /etc/exports
 
 
 #####
 /home/share/nfs       10.0.1.*(rw,sync,no_subtree_check)
 #####

 

그 후 변경된 사항을 적용하기 위해 아래와 같이 nfs_server를 재시작 한다.

service nfs-server restart

systemctl status nfs-server.service

 

서버를 재시작 한 후에 공유폴더를 특정 폴더에 마운트 시킨다.

mount -t nfs <ip>:/home/share/nfs /mnt

 

그 후 마스터 노드에 접근해서 PersistentVolume을 생성한다.

  • jenkins-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
  namespace: jenkins
  labels:
    name: jenkins-pv
spec:
  capacity:
    storage: 32Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  storageClassName: slow
  nfs:
    path: /home/share/nfs
    server: 10.0.1.9
  • jenkins-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
  namespace: jenkins
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 5Gi
  storageClassName: slow

 

이제 kubectl 명령어로 yaml을 생성해준다.

kubectl create -f jenkins-pv.yaml
kubectl create -f jenkins-pvc.yaml

kubectl get pv,pvc -o wide --all-namespaces

이제 kubectl 명령어로 yaml을 생성해준다.

 

 

kubectl get pv,pvc -o wide --all-namespaces 해당 명령어를 사용해서 상태를 확인해보자

이제 pv,pvc를 성공적으로 구축하였다. 다음챕터에서는 젠킨스 화면을 띄우는과정을 진행해볼 예정이다.