emptyDir and hostPath
- emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
- hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음
emptyDir
다음과 같이 emptyDir.yaml 작성해준다.
vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test1
- name: container2
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test2
volumes:
- name: test-dir
emptyDir: {}
그리고 이 파일을 배포한다.
kubectl apply -f emptyDir.yaml
이렇게 현재 만들어진걸 확인가능하다.
그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.
describe pod test-pod
pod의 정보를 볼 수 있다. 이중에
Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.
pod의 container1으로 가서 bashshell을 열어보자
kubectl exec -it test-pod -c container1 -- bash
[root@test-pod /]# ls
anaconda-post.log bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1 tmp usr var
test1이라는 디렉토리가 생성됨. 들어가보자.
cd test1
ls
하면 아무것도 안 보인다.
예시로 파일을 만든다.
vi test.txt
아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.
다시 exit치고 나가서 container2로 가본다.
kubectl exec -it test-pod -c container2 -- bash
cd test2
ls
아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.
하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.
한번 pod를 지워보자.
kubectl delete pod test-pod
시간 꽤걸리니까 당황ㄴ ㄴ
다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!
자, 이제 확실히 emptyDir의 특징을 알았겠지?
hostPath
이번엔 빔을 열어서 hostPath.yaml을 작성한다.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /test-volume
type: DirectoryOrCreate
그리고 배포해준다.
kubectl apply -f hostPath.yaml
마찬가지로 describe해보면,
describe pod test-pod
volume의 타입이 hostpath로 되어있다.
test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /Users/jiyea/test-volume # 수정된 경로
type: DirectoryOrCreate
이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.
여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고
kubectl exec -it test-pod -- bash
컨테이너 하나라서 이렇게만 써줘도돼
들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!
얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!
emptyDir and hostPath
정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!
hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.
그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!
외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!
emptyDir and hostPath
- emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
- hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음
emptyDir
다음과 같이 emptyDir.yaml 작성해준다.
vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test1
- name: container2
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test2
volumes:
- name: test-dir
emptyDir: {}
그리고 이 파일을 배포한다.
kubectl apply -f emptyDir.yaml
이렇게 현재 만들어진걸 확인가능하다.
그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.
describe pod test-pod
pod의 정보를 볼 수 있다. 이중에
Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.
pod의 container1으로 가서 bashshell을 열어보자
kubectl exec -it test-pod -c container1 -- bash
[root@test-pod /]# ls
anaconda-post.log bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1 tmp usr var
test1이라는 디렉토리가 생성됨. 들어가보자.
cd test1
ls
하면 아무것도 안 보인다.
예시로 파일을 만든다.
vi test.txt
아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.
다시 exit치고 나가서 container2로 가본다.
kubectl exec -it test-pod -c container2 -- bash
cd test2
ls
아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.
하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.
한번 pod를 지워보자.
kubectl delete pod test-pod
시간 꽤걸리니까 당황ㄴ ㄴ
다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!
자, 이제 확실히 emptyDir의 특징을 알았겠지?
hostPath
이번엔 빔을 열어서 hostPath.yaml을 작성한다.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /test-volume
type: DirectoryOrCreate
그리고 배포해준다.
kubectl apply -f hostPath.yaml
마찬가지로 describe해보면,
describe pod test-pod
volume의 타입이 hostpath로 되어있다.
test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /Users/jiyea/test-volume # 수정된 경로
type: DirectoryOrCreate
이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.
여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고
kubectl exec -it test-pod -- bash
컨테이너 하나라서 이렇게만 써줘도돼
들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!
얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!
emptyDir and hostPath
정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!
hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.
그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!
외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!
emptyDir and hostPath
- emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
- hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음
emptyDir
다음과 같이 emptyDir.yaml 작성해준다.
vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test1
- name: container2
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test2
volumes:
- name: test-dir
emptyDir: {}
그리고 이 파일을 배포한다.
kubectl apply -f emptyDir.yaml
이렇게 현재 만들어진걸 확인가능하다.
그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.
describe pod test-pod
pod의 정보를 볼 수 있다. 이중에
Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.
pod의 container1으로 가서 bashshell을 열어보자
kubectl exec -it test-pod -c container1 -- bash
[root@test-pod /]# ls
anaconda-post.log bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1 tmp usr var
test1이라는 디렉토리가 생성됨. 들어가보자.
cd test1
ls
하면 아무것도 안 보인다.
예시로 파일을 만든다.
vi test.txt
아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.
다시 exit치고 나가서 container2로 가본다.
kubectl exec -it test-pod -c container2 -- bash
cd test2
ls
아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.
하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.
한번 pod를 지워보자.
kubectl delete pod test-pod
시간 꽤걸리니까 당황ㄴ ㄴ
다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!
자, 이제 확실히 emptyDir의 특징을 알았겠지?
hostPath
이번엔 빔을 열어서 hostPath.yaml을 작성한다.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /test-volume
type: DirectoryOrCreate
그리고 배포해준다.
kubectl apply -f hostPath.yaml
마찬가지로 describe해보면,
describe pod test-pod
volume의 타입이 hostpath로 되어있다.
test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /Users/jiyea/test-volume # 수정된 경로
type: DirectoryOrCreate
이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.
여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고
kubectl exec -it test-pod -- bash
컨테이너 하나라서 이렇게만 써줘도돼
들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!
얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!
emptyDir and hostPath
정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!
hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.
그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!
외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!
'Kubernetes' 카테고리의 다른 글
K8S API Server (0) | 2024.12.07 |
---|---|
Resource 중간정리 (0) | 2024.12.01 |
Kubernetes Volumes (2) | 2024.11.13 |
Kubectl (0) | 2024.11.06 |
Kubernetes의 Networking과 Service (0) | 2024.11.06 |
emptyDir and hostPath
- emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
- hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음
emptyDir
다음과 같이 emptyDir.yaml 작성해준다.
vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test1
- name: container2
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test2
volumes:
- name: test-dir
emptyDir: {}
그리고 이 파일을 배포한다.
kubectl apply -f emptyDir.yaml
이렇게 현재 만들어진걸 확인가능하다.
그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.
describe pod test-pod
pod의 정보를 볼 수 있다. 이중에
Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.
pod의 container1으로 가서 bashshell을 열어보자
kubectl exec -it test-pod -c container1 -- bash
[root@test-pod /]# ls
anaconda-post.log bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1 tmp usr var
test1이라는 디렉토리가 생성됨. 들어가보자.
cd test1
ls
하면 아무것도 안 보인다.
예시로 파일을 만든다.
vi test.txt
아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.
다시 exit치고 나가서 container2로 가본다.
kubectl exec -it test-pod -c container2 -- bash
cd test2
ls
아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.
하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.
한번 pod를 지워보자.
kubectl delete pod test-pod
시간 꽤걸리니까 당황ㄴ ㄴ
다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!
자, 이제 확실히 emptyDir의 특징을 알았겠지?
hostPath
이번엔 빔을 열어서 hostPath.yaml을 작성한다.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /test-volume
type: DirectoryOrCreate
그리고 배포해준다.
kubectl apply -f hostPath.yaml
마찬가지로 describe해보면,
describe pod test-pod
volume의 타입이 hostpath로 되어있다.
test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /Users/jiyea/test-volume # 수정된 경로
type: DirectoryOrCreate
이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.
여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고
kubectl exec -it test-pod -- bash
컨테이너 하나라서 이렇게만 써줘도돼
들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!
얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!
emptyDir and hostPath
정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!
hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.
그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!
외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!
emptyDir and hostPath
- emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
- hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음
emptyDir
다음과 같이 emptyDir.yaml 작성해준다.
vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test1
- name: container2
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test2
volumes:
- name: test-dir
emptyDir: {}
그리고 이 파일을 배포한다.
kubectl apply -f emptyDir.yaml
이렇게 현재 만들어진걸 확인가능하다.
그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.
describe pod test-pod
pod의 정보를 볼 수 있다. 이중에
Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.
pod의 container1으로 가서 bashshell을 열어보자
kubectl exec -it test-pod -c container1 -- bash
[root@test-pod /]# ls
anaconda-post.log bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1 tmp usr var
test1이라는 디렉토리가 생성됨. 들어가보자.
cd test1
ls
하면 아무것도 안 보인다.
예시로 파일을 만든다.
vi test.txt
아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.
다시 exit치고 나가서 container2로 가본다.
kubectl exec -it test-pod -c container2 -- bash
cd test2
ls
아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.
하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.
한번 pod를 지워보자.
kubectl delete pod test-pod
시간 꽤걸리니까 당황ㄴ ㄴ
다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!
자, 이제 확실히 emptyDir의 특징을 알았겠지?
hostPath
이번엔 빔을 열어서 hostPath.yaml을 작성한다.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /test-volume
type: DirectoryOrCreate
그리고 배포해준다.
kubectl apply -f hostPath.yaml
마찬가지로 describe해보면,
describe pod test-pod
volume의 타입이 hostpath로 되어있다.
test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /Users/jiyea/test-volume # 수정된 경로
type: DirectoryOrCreate
이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.
여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고
kubectl exec -it test-pod -- bash
컨테이너 하나라서 이렇게만 써줘도돼
들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!
얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!
emptyDir and hostPath
정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!
hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.
그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!
외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!
emptyDir and hostPath
- emptyDir: pod 내에서 컨테이너들이 데이터를 공유하고 서로 readwrite할 수 있게 만든 “임시”저장소, pod가 사라지면 볼륨도 사라지기 때문에 임시저장소임
- hostPath: pod내에 볼륨을 만드는 것이 아닌 노드의 파일시스템을 볼륨으로 만들어서 이걸 pod에 mount시켜주는 것. pod의 lifecycle을 따르지 않음
emptyDir
다음과 같이 emptyDir.yaml 작성해준다.
vi emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test1
- name: container2
image: kubetm/init
volumeMounts:
- name: test-dir
mountPath: /test2
volumes:
- name: test-dir
emptyDir: {}
그리고 이 파일을 배포한다.
kubectl apply -f emptyDir.yaml
이렇게 현재 만들어진걸 확인가능하다.
그렇다면 이 만들어진 test-pod의 정보를 한 번 살펴보자.
describe pod test-pod
pod의 정보를 볼 수 있다. 이중에
Containers:에서 볼륨이 마운트 된 걸 볼 수 있다. 그리고 볼륨에 대한 정보도 확인할 수 있다.
pod의 container1으로 가서 bashshell을 열어보자
kubectl exec -it test-pod -c container1 -- bash
[root@test-pod /]# ls
anaconda-post.log bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test1 tmp usr var
test1이라는 디렉토리가 생성됨. 들어가보자.
cd test1
ls
하면 아무것도 안 보인다.
예시로 파일을 만든다.
vi test.txt
아무말이나 적고 저장해서 다시 ls를 쳐보면 test.txt가 존재한다.
다시 exit치고 나가서 container2로 가본다.
kubectl exec -it test-pod -c container2 -- bash
cd test2
ls
아무것도 없어야하지만? test.txt가 존재한다. 바로 아까 우리가 생성한 파일이다.
하지만 emptyDir의 치명적인 문제점은 pod의 라이프사이클을 따라서 파드가 죽으면 볼륨에 대한 내용도 모두 사라진다. 컨테이너가 다시 읽고 쓸 기능이 사라진다.
한번 pod를 지워보자.
kubectl delete pod test-pod
시간 꽤걸리니까 당황ㄴ ㄴ
다시 배포한다고 해도, 컨테이너 내부로 들어가보면 아무것도 남아있지 않는다….!!
자, 이제 확실히 emptyDir의 특징을 알았겠지?
hostPath
이번엔 빔을 열어서 hostPath.yaml을 작성한다.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /test-volume
type: DirectoryOrCreate
그리고 배포해준다.
kubectl apply -f hostPath.yaml
마찬가지로 describe해보면,
describe pod test-pod
volume의 타입이 hostpath로 되어있다.
test-volume폴더가 루트에 생겨야 하는데 안 생겨서 진짜 40분동안 오류를 찾다가 그냥 yaml file의 경로를
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: test-volume
mountPath: /test1
volumes:
- name: test-volume
hostPath:
path: /Users/jiyea/test-volume # 수정된 경로
type: DirectoryOrCreate
이렇게 딱 지정해서 설정해주었다. 그랬더니 됐다.
여튼 test-volume디렉토리로가면 아무것도 없는 걸 확인할 수 있다. 또 test.txt만들어서 아무거나 쓰고
kubectl exec -it test-pod -- bash
컨테이너 하나라서 이렇게만 써줘도돼
들어가서 test1으로 가면 내가 쓴 txt파일을 확인할 수 있다!
얘가 더 좋아보이지만 노드가 죽어서 이 볼륨이 사라지게 된다면 이 파드가 기존의 정보를 다시 가져올 방법이 없음!!!
emptyDir and hostPath
정리를 해보자면 emptyDir은 pod내부의 컨테이너들이 정보를 공유하기 위한 임시 스토리지다!!!
hostpath는 노드의 파일시스템을 볼륨으로 써서 파드한테 마운트한다. 파드가 아니라 노드의 라이프사이클을 따르기때문에 노드가 죽으면 책임질 수 있는 방법이 없다.
그래서 보통 이 두가지 방법은 잘 안 쓰고, remote storage를 따로 두어서 쿠버네티스에서 제공하는 pv,pvc,sc를 사용하고 있다!
외부에서 데이터를 보존하고 있기때문에 안정적인 데이터 관리가 가능하다!!!!!
'Kubernetes' 카테고리의 다른 글
K8S API Server (0) | 2024.12.07 |
---|---|
Resource 중간정리 (0) | 2024.12.01 |
Kubernetes Volumes (2) | 2024.11.13 |
Kubectl (0) | 2024.11.06 |
Kubernetes의 Networking과 Service (0) | 2024.11.06 |