# hostPath 볼륨
- 파드가 동작하는 쿼네티스 클러스터의 노드(호스트)의 로컬 파일시스템의 파일 및 디렉터리를 파드가 사용 할 수 있는 볼륨으로 제공
- 호스트의 디렉토리를 지정해줄 수 있음(데이터를 채워서 또는 빈 디렉토리여도 가능함)
- 네트워크 스토리지가 아니라서 다른 호스트의 파드에게 제공할 수 없음, 각 노드에 각각의 볼륨이 생성
- 쿠버네티스 클러스터 노드에 로그 파일을 저장하거나 CA인증서 및 토큰을 파드에 제공하기 위한 용도로 사용
# hostPath 볼륨생성
# 볼륨 리소스 정의
volumes:
- name: <VOL-NAME>
hostPath:
type: <TYPE>
path: <PATH>
# .volumes.hostPath.type: 볼륨의 종류 지정
DirectoryOrCreate: 지정된 경로의 디렉토리 사용 (없으면 만들어 줌=빈 디렉토리 가능)
Directory: 지정된 경로의 디렉토리 사용(존재해야함)
FileOrCreate: 지정된 경로의 파일 사용(없으면 만들어줌)
File: 지정된 경로의 파일 사용(존재해야함)
Socket: 지정된 경로의 UNIX 소켓 사용(존재해야함)
CharDevice: 지정된 경로의 캐릭터 장치사용(존재해야함)
BlockDevice: 지정된 경로의 블록 장치 사용(존재해야함)
# .volumes.hostPath.path: 공유할 볼륨의 호스트 경로 지정
# hostPath 볼륨에 사용할 노드의 디렉터리 준비
- k-node1 에 hostPath 볼륨에 사용할 디렉토리 생성
# /web_contents 디렉터리를 생성
# /web_contents 디렉터리에 index.html 파일을 생성
# hostPath 볼륨을 사용하는 레플리카셋 생성
vagrant@k-node1:~$ sudo mkdir /web_contents
vagrant@k-node1:~$ echo " ldh hostPath Volumes " | sudo tee /web_contents/index.html
ldh hostPath Volumes
# ldh-rs-hp.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: ldh-rs-hp
spec:
relicas: 2
selector:
matchLabels:
app: ldh-rs-hp
template:
metadata:
labels:
app: ldh-rs-hp
spec:
#nodeName: k-node1
containers:
- name: web-server
image: nginx:alpone
volumeMounts:
- name: web-content
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: web-content
hostPath:
type: Directory
path: /web_contents
레플리카셋 컨트롤러에 의해 web-server 파드는 두개의 복제본을 가진다 (두개의 파드에 같은 웹 컨텐츠를 제공)
# .spec.template.spec.mountPath
: 마운트 경로, /web_contents를 여기에 마운트
# spec.template.spec.volumes
: spec.template.spec.volumes 필드에 web-content hostPath 볼륨을 지정하며 web-server 컨테이너가 해당 볼륨을 사용
# .spec.template.spec.nodename
: nodename :k-node1 이면 k-nod1에 컨테이너 배치 ( 원래는 스케줄러가 정함 ), 복제본을 늘려도 k-node1에 배치
# hostPath 볼륨을 사용하는 레플리카셋을 위한 서비스 오브젝트
# 레플리카셋과 서비스 생성
# ldh-svc-hp.yml
apiVesrion: v1
kind: Service
metadata:
name: ldh-svc-hp
spec:
type: LoadBalancer
ports:
- port: 80
targetport: 80
selector:
app: ldh-rs-hp
# 레플리카셋 생성
vagrant@k-control:~$ kubectl create -f ldh-rs-hp.yml
# 서비스 생성
vagrant@k-control:~$ kubectl create -f ldh-svc-hp.yml
# hostPath 볼륨을 사용하는 리소스 확인
# 레플리카셋 컨트롤러와 파드의 상태를 확인
ldh(myapp)-rs-hp-vhk7s 의 파드는 node1에 배치되었고 Ready 되었다
ldh(myapp)-rs-hp-xt6cl 의 파드는 node2에 배치되었고 Ready 되지 않았다
# ldh(myapp)-rs-hp-xt6cl 의 파드가 준비되지 않은 이유
k-node2는 볼륨을 연결할 수 없어서 준비되지 못했다 - 볼륨을 마운트 할 수 없다고(FailesMount) 보고
# hostPath 볼륨을 사용하는 리소스 변경
레플리카셋 컨트롤러를 삭제하고 ( kubectl delete -f ldh-rs-hp.yml) 레플리카셋 오브젝트(ldh-rs-hp.yml)를 아래와 같이 수정하여 다시 생성( kubectl create -f ldh-rs-hp.yml) 한다 .
# 수정 된 내용 nodename: k-node1 필드 추가
# .spec.template.spec.nodename
: nodename :k-node1 이면 k-nod1에 컨테이너 배치 ( 원래는 스케줄러가 정함 ), 복제본을 늘려도 k-node1에 배치 , nodeSelector는 노드의 레이블 매핑, nodeName은 배치할 노드를 직접 지정
두 파드 모두 k-node1에 배치된 것을 확인하고, 볼륨을 마운트 할 수 있는 준비 상태로 보고
# hostPath 볼륨을 사용하는 리소스 재확인
# index.html 파일 내용이 같은지 확인
vagrant@k-control:~$ kubectl exec myapp-rs-hp-7glwn --cat /usr/share/nginx/html/index.html
ldh hostPath Volumes
vagrant@k-control:~$ kubectl exec myapp-rs-hp-7glwn --cat /usr/share/nginx/html/index.html
ldh hostPath Volumes
'클라우드 > 쿠버네티스(Kubernetes)' 카테고리의 다른 글
쿠버네티스 Kubernetes 스토리지 볼륨 6 / 정적 볼륨 프로비저닝 1 (0) | 2021.07.13 |
---|---|
쿠버네티스 Kubernetes 스토리지 볼륨 5 / PersistenVolume(PV) 및 PersistentVolumeClaim(PVC) (0) | 2021.07.13 |
쿠버네티스 Kubernetes 스토리지 볼륨 3 / 초기화 컨테이너 (initcontainer) (0) | 2021.07.12 |
쿠버네티스 Kubernetes 스토리지 볼륨 2 / emptyDir 볼륨 (0) | 2021.07.12 |
쿠버네티스 Kubernetes 스토리지 볼륨 1 (0) | 2021.07.12 |