emptyDir
컨테이너들끼리 데이터를 공유하기 위해서 Volume을 생성합니다.
최초 Volume을 생성 할 때 공간이 비어져있기 때문에 emptyDir이라고 이름이 지어졌다.
만약에 컨테이너 1번이 Web역할을하고 2번에 Backend 단을 설정한다고하면
마운트를 해두면 두 서버가 자신의 로컬에 있는 파일처럼 사용을 할 수 있습니다.
Pod 안에 생성이 되기 때문에 일시적으로 사용하기 위한 데이터만 넣는 것이 좋다.

HostPath
이름대로 한 개의 호스트, 파드들이 올라가져 있는 Node의 Path를 볼륨으로 사용한다.
Pod 들이 죽어도 Node의 데이터를 사라지지 않는다.
하지만 Pod-2가 죽어서 ReCreateion 될 때 다른 Node에 생성 될 수도 있다.
해결방법으로는 Node가 추가 될 때 마다 똑같은 경로의 이름을 만들어 Node에 있는 Path끼리 연결을 해주면 된다.
하지만 이 방법은 어렵지는 않지만 자동화를 시키는데 있어서 사람의 개입이 들어가서 추천하는 방법이 아니다.
마지막으로 Pod가 생성되기 전에 미리 생성되어있어야 한다.
용도
노드에 있는 데이터를 Pod 에서 사용하기 위한 용도
각 노드 자신을 위해서 사용되는 System, 설정 파일들이 있다.
Pod 자신이 할당되어있는 Host에 데이터를 읽거나 사용해야 될 때 쓰면 된다.

PVC(Persistent Volume Claim) / PV(Persistent Volume)
Pod에 영속성있는 DB를 제공하기 위한 것들이다.
실제 Volume은 다양하다 Local Volume도 있고, 외부에 원격으로 사용되는 Volume들이 많다.
- Pod는 PV에 바로 연결하지않고, PVC를 통해서 연결한다.
- 중간에 PVC를 두는 이유는 쿠버네티스는 유저구역(Pod에 Service를 만들고 배포하는 Service 담당자)과 어드민구역(K8s담당자)으로 나눴기 때문입니다.
- 각각의 Volume들을 연결하기 위한 설정하는 방법과 연결하는 속성들이 다 다르다. 그래서 전문적으로 이런 걸 관리하는 어드민이 PV를 만들어놓으면 유저는 이것을 사용하기 위해서 PVC를 생성합니다.

복습
emptyDir은 Pod 내에서 Container들 끼리 데이터를 공유하여 사용할 수 있는 것이다.
Pod-1을 생성하였고, 안에 컨테이너를 2개를 생성하였다. 둘 다 volumeMounts: 는 empty-dir로 설정하였다.
제가 진행하면서 헷갈린 부분은 mountPath: 가 Container가 서로 달라서 '공유가 될까?' 라는 생각을 했는데 Path 이름은 중요하지 않았다. 결국 맨 아래 volumes에서 empty-dir를 지정함으로써 Pod-1의 1번 컨테이너에서 mount1 안에 생성한 file.txt 라는 파일이 2번 컨테이너에서도 똑같이 확인할 수 있었다.
Pod가 삭제되고 재생성되면 mount 안에 있던 내용도 같이 삭제된다.
그래서 언제 삭제되도 상관이 없는 것을 담아야 한다.
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-1
spec:
containers:
- name: container1
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount1
- name: container2
image: kubetm/init
volumeMounts:
- name: empty-dir
mountPath: /mount2
volumes:
- name : empty-dir
emptyDir: {}
hostPath은 Pod들이 올라가져있는 노드에 데이터를 저장시킨다고 생각하면된다.
- 같은 노드의 모든 Pod들을 데이터들을 공유하여 사용할 수 있다.
- 하지만 hostPath의 단점은 Pod이 어떠한 이유로 죽었다 살아날 때 다른 노드로 이동되면 문제가 발생한다.
- 다른 노드로 이동안되게 설정할 수도 있지만 권장하진 않는다.
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: host-path
mountPath: /mount1
volumes:
- name : host-path
hostPath:
path: /node-v
type: DirectoryOrCreate
PV(Persistent Volume)/PVC(Persistent Volume Claim)
PV 특정 물리적인 Volume을 연결하는 설정이라고 생각하면 됩니다.
- PV에 연결되는 Pod들 k8s-node1에 생성된다.
- PV에 위치시키는 파일은 대체로 대용량 파일데이터나 변경되지 않는 정적파일 등의 애플리케이션 영역과 WEB/WAS/DB등의 Log를 저장하는 용도 등으로 활용할 수 있습니다.
- 옵션
- ReadWriteOnce(RWO): 하나의 노드가 볼륨을 Read/Write 가능하도록 마운트
- ReadOnlyMany(ROX): 여러개의 노드가 Read 전용으로 사용하도록 마운트
- ReadWriteMany(RWX): 여러개의 노드가 Read/Write 가능하도록 마운트
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-01
spec:
capacity:
storage: 1G
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-02 # 변경
spec:
capacity:
storage: 1G
accessModes:
- ReadOnlyMany # 변경
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-03 # 변경
spec:
capacity:
storage: 2G # 변경
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
PVC
- storage 용량과 accessModes의 타입이 같은 PV를 찾아 연결한다.
- 연결한다는 것은 곧 Bound 했다는 것인데 한번 클레임이 Bound 되었다면 해당 PV는 다른 클레임에서 사용할 수 없다.
- PVC가 PV 용량과 적합한 PV가 없다면 대기중인 상태가 된다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-01
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: ""
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-02
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 1G
storageClassName: ""
Pod 생성
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: pvc-pv
mountPath: /mount3
volumes:
- name : pvc-pv
persistentVolumeClaim:
claimName: pvc-01
'Devops > Kubernetes' 카테고리의 다른 글
| Kubernetes - Object:ConfigMap, Secret (0) | 2020.05.08 |
|---|---|
| Kubernetes 세미나 (0) | 2020.04.29 |
| Kubernetes - Object:Service (0) | 2020.04.27 |
| Kubernetes - Object (0) | 2020.04.27 |
| Kubernetes - 배경, 개념, 장점 (0) | 2020.04.23 |
댓글