Notice
Recent Posts
Recent Comments
Link
devops
쿠버네티스 컨테이너, 파드의 Volume 본문
반응형
쿠버네티스 컨테이너에서 정의되는 Volume은 컨테이너의 데이터를 영구적으로 저장하거나 컨테이너 간 데이터를 공유하기 위해 사용된다. 각 볼륨은 여러 목적과 특성을 가지고 있어 상황에 맞게 사용된다.
복습 겸, 정리해보자.
# Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage-v1
labels:
app: productpage
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: productpage
version: v1
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9080"
prometheus.io/path: "/metrics"
labels:
app: productpage
version: v1
spec:
serviceAccountName: bookinfo-productpage
containers:
- name: productpage
image: docker.io/istio/examples-bookinfo-productpage-v1:1.17.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
securityContext:
runAsUser: 1000
volumes:
- name: tmp
emptyDir: {}
---
위는 어느 어플리케이션의 Deployment 정의 내용이다. 여기서 볼륨 섹션은 spec.template.spec.containers.volumeMounts와 spec.template.spec.containers.volumes 두가지가 있다.
굳이 순서로 따지면 volumes를 먼저 설명해야한다.
spec.template.spec.containers.volumes
volumes는 파드 또는 컨테이너에 사용되는 볼륨의 실제 정의를 말한다.
위 그림에서 volumes 섹션은 Pod의 왼쪽 Volume 요소를 의미하는 것으로, 먼저 정의가 되어야 컨테이너에서 마운트할 수 있다. 이 볼륨은 여러 유형이 있는데 다음과 같다.
- EmptyDir : EmptyDir은 파드의 라이프 사이클동안 데이터를 저장하는 임시 볼륨이다. 파드 내부의 여러 컨테이너 간에 데이터를 공유하는데 사용될 수 있다. 파드가 재시작되면 삭제된다.
- HostPath : 워커 노드의 파일 시스템 경로를 파드 내부로 마운트하는 방식으로 동작한다. 워커 노드 상의 파일 시스템에 접근해야하는 경우에 사용하는데, 문제는 다른 노드로 파드가 스케쥴링되면 해당 경로에 파일이 없을 수 있다.
- PersistentVolumeClaim (PVC) : 영구적인 데이터 저장을 위한 볼륨 유형으로, 스토리지 클래스에 의해서 백엔드 스토리지로 동적 프로비저닝될 수 있다. 파드가 삭제되더라도 PVC는 유지되기 때문에 데이터를 보존할 수 있다.
- ConfigMap과 Secret : 어플리케이션 정보나 암호화된 데이터를 컨테이너에 주입하는데 사용된다.
- Cloude Provider의 Volume : AWS같은 클라우드 프로바이더가 제공하는 스토리지 솔루션을 사용하여 영구 데이터를 저장할 수 있다.
이제 containers.volumeMounts은 정의된 볼륨을 컨테이너 파일 시스템에 마운트하는 것이라고 보면 된다. 이는 컨테이너가 볼륨과 상호작용을 위한 설정이다.
위 yaml 파일을 통해 설명하자면,
spec:
serviceAccountName: bookinfo-productpage
containers:
- name: productpage
image: docker.io/istio/examples-bookinfo-productpage-v1:1.17.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
volumeMounts:
- name: tmp
mountPath: /tmp
securityContext:
runAsUser: 1000
volumes:
- name: tmp
emptyDir: {}
이 파드에서 emptyDir 유형의 tmp 볼륨이 정의되었고, productpage라는 컨테이너가 이 tmp 볼륨을 컨테이너 내부 /tmp 경로로 마운트된다.
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes Calico CNI(Container Network Interface) (1) | 2024.10.31 |
---|---|
Lava Network Provider Architecture with Kubernetes (0) | 2024.10.06 |
Istio 서비스메시에 대해서 알아보자! (0) | 2023.07.07 |
Karpenter의 Provisioner (0) | 2023.07.02 |
EKS 스케일링의 강자 Karpenter (0) | 2023.06.27 |
Comments