Kubernetes Volume [Static Provisioning]
[kubernetes volume 관련 글 목록]
Kubernetes Volume Object 개념
Kubernetes Volume [Static Provisioning]
Kubernetes Volume [Dynamic Provisioning]
Kubernetes StatefulSet Controller
목표
Kubernetes Volume을 이해하기 위해
Static Provisioning 방식으로
hostpath와 nfs server Volume을 사용해봄.
kubernetes volume 개념 글을 반드시 이해해야함.
환경
Master Node server
OS = CentOS 7
리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64
docker version : 1.13.1
Worker Node server
OS = CentOS 7
리눅스 커널 버전 : Linux 3.10.0-1062.el7.x86_64
docker version : 1.13.1
Kubernetes version
1.18
Static Provisioning hostPath PV 사용.
1. PV (PersistentVolume) 생성
내부디스크 (Local Storage ) Type의 hostPath 를 사용해서 만들어봄
PV Type을 hostpath로 설정
[hostPath Type이란?]
Worker Node 의 로컬 디스크 경로를 Pods에 마운트해서 사용하는 방법
Worker Node 가 다수일경우 랜덤하게 특정 Worker Node의 로컬 디스크 경로를 사용함
주의할점 중의 하나는 Pod가 재시작되서 다른 Worker Node에서 기동될 경우,
해당 Worker Node의 hostPath를 사용하기 때문에,
이전에 다른 Worker Node에서 사용한 hostPath의 파일 내용은 액세스가 불가능.
[pv.yaml]
해당 설정의 자세한 설명을 kubernetes volume 개념 글을 참고 바람.
apiVersion: v1 kind: PersistentVolume metadata: name: iksoon-pv-hostpah labels: storage: iksoon-pv-test spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce volumeMode: Filesystem persistentVolumeReclaimPolicy: Delete hostPath: path: /volumeK8s |
Host의 "/volumeK8s " 를 mount 대상으로 설정.
여기서 말하는 Host는 해당 PV를 사용한 Pod가 배포된 Worker Node를 의미함.
2. PVC (PersistentVolumeClaim) 생성
[ pvct.yaml ]
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: iksoon-pvc-hostpath spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: # PV 자원 중 어느정도의 자원을 사용할 것인지 명시 requests: storage: 1Gi |
[생성 결과]
상위에서 생성했던 PV가 PVC와 연결되어서 상태가 Bound 로 나오는 것을 확인할 수 있음
3. Pod에서 PVC Volume 사용하기
상위에서 만든 PV, PVC를 이용해서
Pod에 PVC를 붙여서 Volume Object 를 사용.
[Deployment.yaml]
apiVersion: apps/v1 kind: Deployment metadata: name: iksoon-deployment labels: app: iksoon-tomcat spec: replicas: 3 selector: matchLabels: app: iksoon-pod template: metadata: labels: app: iksoon-pod spec: containers: - name: iksoon-tomcat image: peksoon/iksoon_tomcat:1.0.4 ports: - containerPort: 8080 volumeMounts: # Volume object를 Pod에 적용 - mountPath: /IksoonVolumeTest # Mount 경로 설정 name: iksoon-volume # volume name에 해당하는 volume을 pod 에 적용 volumes: # volume object 를 생성 - name: iksoon-volume # volume object 이름을 iksoon-volume으로 설정 persistentVolumeClaim: # PVC를 설정 claimName: iksoon-pvc-hostpath # PVC이름이 iksoon-pvc-hostpath 인 volume object를 생성 |
4. 생성 후 해당 Pod에 접속해서 Mount 된 Volume object Directory 확인
상위에서 설정한대로 /IksoonVolumeTest 디렉토리가 확인되고
해당 디렉토리 안에 파일을 생성해봄
그후 다른 Pod에 접속하여 동일한 /IksoonVolumeTest 디렉토리에 가보면
생성했던 makePod1 파일을 확인할 수 있음
hostPath 설정으로 만들어진 PV 임으로
WorkerNode 의 PV에서 설정한 volumeK8s 디렉토리에 가보면
Pod에서 생성했던 파일이 그대로 있음을 확인 할 수 있음
참고) hostPath Type 의 Volume object 임으로
Pod, PVC, PV를 모두 삭제해도 생성했던 파일은 그대로 남아있음.
Pod, PVC, PV 다시 생성하면 기존에 생성했던 파일을 Pods에서 다시 확인할 수 있음
Static Provisioning NFS Server PV 사용.
Volume 종류 중 외부 디스크 (Network Stroage)를 사용하는 방법 중 하나인
NFS 를 사용해서 Volume Object 를 구성해봄.
Static Provisioning 사용하는 과정으로 PV 와 PVC 를 수동으로 생성하는 방법을 사용
1. NFS Server 구성
Volume 종류 중 외부 디스크 (Network Stroage)를 사용하는 방법 중 하나인
NFS를 구성해놓아야함.
NFS란?
네트워크 상에서 다른 컴퓨터의 파일 시스템을 마운트해서 공유하는 것을 의미.
다른 컴퓨터의 파일 시스템을 사용할 수 있음
Network Attached Storage
1:N 지원
NFS 서버 구성
1. NFS서버 패키지 설치
yum install -y portmap nfs-utils libssapi
2. NFS서버 exports 설정
mkdir /k8sNFS
vi /etc/exports
NFS 서버의 특정 IP 호스트 접속을 허용하는 설정
/k8sNFS 아이피(rw,sync,no_root_squash)
주의 옵션에 띄워쓰기 없어야함
[괄호에 들어가는 옵션 설명 참고]
rw : 읽기, 쓰기 가능
ro : 읽기만 가능
secure : 클라이언트 마운트 요청시 포트를 1024 이하로 함
noaccess : 액세스 거부
root_squach : 클라이언트의 root가 서버의 root권한을 획득하는 것을 막음
no_root_squash : 클라이언트의 root와 서버의 root를 동일하게 함
sync : 파일 시스템이 변경되면 즉시 동기화.
all_squach : root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정.
no_all_squach : root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정.
3. NFS 실행
systemctl start nfs
systemctl start rpcbind
4. NFS 공유 디렉토리 정상동작 확인
exportfs -v
NFS 클라이언트 구성
client에서 진행
1. NFS 패키지 설치
yum install -y nfs-utils
2. mount 후 정상동작 확인
mount -t nfs 10.0.2.5:/k8sNFS /kubeYamlTest/volume_test/k8sNfsMount
df -h
정상동작 확인 후 mount 해제
umount -t nfs 10.0.2.5:/k8sNFS /kubeYamlTest/volume_test/k8sNfsMount
2. PV 생성.
nfs type 의 PV를 생성
상위에서 생성한 NFS Server의 IP가 10.0.2.5 임으로
PV가 10.0.2.5에 있는 NFS Server를 바라봐야함.
[ pv.yaml ]
apiVersion: v1 kind: PersistentVolume metadata: name: iksoon-pv-nfs labels: storage: iksoon-pv-test spec: capacity: storage: 5Gi accessModes: - ReadWriteMany volumeMode: Filesystem persistentVolumeReclaimPolicy: Delete nfs: server: 10.0.2.5 path: /k8sNFS |
3. PVC 생성.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: iksoon-pvc-nfs spec: accessModes: - ReadWriteMany volumeMode: Filesystem resources: requests: storage: 1Gi selector: matchLabels: storage: iksoon-pv-test |
4. Deployment에서 NFS PVC 사용.
apiVersion: apps/v1 kind: Deployment metadata: name: iksoon-deployment labels: app: iksoon-tomcat spec: replicas: 1 selector: matchLabels: app: iksoon-pod template: metadata: labels: app: iksoon-pod spec: containers: - name: iksoon-tomcat image: peksoon/iksoon_tomcat:1.0.4 ports: - containerPort: 8080 volumeMounts: - mountPath: /IksoonVolumeTest name: iksoon-volume volumes: - name: iksoon-volume persistentVolumeClaim: claimName: iksoon-pvc-nfs |
5. Volume mount 동작 확인
PV, PVC 정상 생성 확인
NFS volume object 사용한 deployment 정상 생성
동작확인
생성된 3개의 Pod 중 1개의 pod로 들어가서
nfs 공유 디렉토리 존재 확인
testNFS 라는 디렉토리 생성
nfs server 의 디렉토리에서 확인 결과 pod에서 생성한 testNFS 디렉토리 확인
생성된 모든 pod 의 공유 디렉토리에서 동일하게 변경내용 확인.
[삭제 결과]
Deployment를 삭제 후 재생성 결과
이전에 생성했던 디렉토리가 삭제되지 않고 여전히 존재함
[deployment 와 PVC 삭제 후 재생성]
PVC 삭제 시
PV 의 STATUS 가 Failed 상태가 됨
Failed : 자동 초기화가 실패한 상태
PV 가 Failed 상태에서 PVC 재생성하면
pvc 는 pending 상태로 무한으로 있음
[deployment 와 PVC, PV 삭제 후 재생성]
모두 삭제 후 재생성하면
처음과 같이 정상 생성됨
NFS의 공유 디렉토리 내용은 삭제되지 않고 유지 됨
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
'Kubernetes > Volume' 카테고리의 다른 글
Kubernetes Volume [Dynamic Provisioning] (0) | 2020.12.03 |
---|---|
Kubernetes Volume 개념 (0) | 2020.08.17 |