쿠버네티스 Kubernetes 스토리지 볼륨 2 / emptyDir 볼륨
# emptyDir 볼륨
-아무 데이터도 없는 빈 디렉토리를 제공해 주는 볼륨이다.
파드가 생성하는 데이터를 저장 할 수 있으며, 동일한 파드 내의 컨테이너 간에 네이터를 공유할 때 유용하게 사용 할 수 있다. 또한 빅데이터와 같은 큰 데이터 셋트를 처리하기 위한 임시 저장소로도 사용이 가능하다.
# emptyDir 볼륨 생성
# emptyDir 볼륨을 사용하는 레플리카셋 정의
# ldh-rs-emptydir.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: ldh-rs-fortune
spec:
replicas: 1
selector:
matchLabels:
app: ldh-rs-fortune
template:
metadata:
labels:
app: ldh-rs-fortune
spec:
containers:
- name: web-server
image: nginx:alpine
volumeMounts:
- name: web-fortune
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
- name: html-generator
image: ghcr.io/c1t1d0s7/fortune
volumeMounts:
- name: web-fortune
mountPath: /var/htdocs
volumes:
- name: web-fortune
emptyDir: {}
web-fortune : emptyDir 볼륨 이름
web-server : nginx 웹 서버 이미지 , /usr/share/nginx/html 디렉토리에 볼륨을 마운트 한다
html-generator : ghcr.io/clt1d0s7/fortune 이미지, /var/htdos 디렉토리에 볼륨을 마운트 한다
# .spec.volumes.emptyDir
: emptyDir 타입의 볼륨 정의
- {} : 값을 비워두면 호스트의 로컬 디스크를 사용한다.
- { memory } : tmpfs (RAM 기반 파일시스템)을 사용해 고성능의 볼륨을 제공
- 파드와 파드 사이는 연결이 되지 않는다.
# .spec.containers.volumeMounts
: 컨테이너 마운트 할 볼륨을 선언
# .spec.containers.volumeMounts.mountPath
: 컨테이너 내의 마운트 포인트
# .spec.volumes.name
: 볼륨의 이름
# .spec.containers.volumeMounts.name
: 사용할 볼륨 이름
spec:
containers:
- name: web-server
image: nginx:alpine
volumeMounts:
- name: web-fortune
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
- name: html-generator
image: ghcr.io/c1t1d0s7/fortune
volumeMounts:
- name: web-fortune
mountPath: /var/htdocs
volumes:
- name: web-fortune
emptyDir: {}
--> name이 같아야 한다.
# 서비스 생성
# 함께 사용 할 서비스 생성
# ldh-svc-emptydir.yml
apiVersion: v1
kind: Service
metadata:
name: ldh-svc-fortune
spec:
ports:
- port: 80
targetPort: 80
selector:
app: ldh-rs-fortune
80번 포트 : nginx 이미지는 기본적으로 80번 포트 서비스
# emptyDir 볼륨 생성 및 확인
# 레플리카셋과 서비스 생성
# 컨트롤러 상태 확인
# 파드의 상태 확인
# 서비스 확인
# web-server 컨테이너의 /usr/share/nginx/html/indwx.html 파일 확인
# html-container 컨테이너의 /var/htdocs/index.html 파일 확인
# ldh-service-fortune 서비스에 접근 해 내용 확인
-> web-server 컨테이너와 html-container 컨테이너는 같은 emptyDir 볼륨을 공유
html-container 컨테이너는 컨텐츠를 생성하고 web-server 컨테이너는 컨텐츠를 읽어 외부에 제공
# 레플리카셋 생성
vagrant@k-control:~$ kubectl create -f ldh-rs-emptydir.yml -f ldh-svc-emptydir.yml
replicaset.apps/ldh-rs-fortune created
# 서비스 생성
vagrant@k-control:~$ kubectl create -f ldh-svc-emptydir.yml
service/ldh-svc-fortune created
vagrant@k-control:~$ kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
ldh-rs-fortune 1 1 1 3m59s
vagrant@k-control:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
ldh-rs-fortune-68wb9 2/2 Running 0 4m13s
vagrant@k-control:~$ kubectl get svc ldh-svc-fortune
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ldh-svc-fortune LoadBalancer 10.97.213.245 192.168.200.210 80:31111/TCP 4m23s
vagrant@k-control:~$ kubectl exec ldh-rs-fortune-68wb9 -c web-server
-- cat /usr/share/nginx/html/index.html
랜덤으로 명언이 나온다
vagrant@k-control:~$ kubectl exec ldh-rs-fortune-68wb9 -c html-generator --cat
/var/htdocs/index.html
랜덤으로 명언이 나온다
vagrant@k-control:~$ http://192.168.200.210
랜덤으로 명언이 나온다