스토리지의 볼륨을 사용하는 파드 구성
이 페이지는 스토리지의 볼륨을 사용하는 파드를 구성하는 방법을 설명한다.
컨테이너 파일 시스템은 컨테이너가 살아있는 동안만 존재한다. 따라서 컨테이너가 종료되고 재시작할 때, 파일 시스템 변경사항이 손실된다. 컨테이너와 독립적이며 보다 일관된 스토리지를 위해 사용자는 볼륨을 사용할 수 있다. 이것은 레디스(Redis)와 같은 키-값 저장소나 데이터베이스와 같은 스테이트풀 애플리케이션에 매우 중요하다.
시작하기 전에
쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음의 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.
버전 확인을 위해서, 다음 커맨드를 실행kubectl version
.
파드에 볼륨 구성
이 연습에서는 하나의 컨테이너를 실행하는 파드를 생성한다. 이 파드는 컨테이너가 종료되고, 재시작 하더라도 파드의 수명동안 지속되는 emptyDir 유형의 볼륨이 있다. 파드의 구성 파일은 다음과 같다.
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-storage
mountPath: /data/redis
volumes:
- name: redis-storage
emptyDir: {}
-
파드 생성
kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
-
파드의 컨테이너가 Running 중인지 확인하고, 파드의 변경사항을 지켜본다.
kubectl get pod redis --watch
출력은 이와 유사하다.
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s
-
다른 터미널에서 실행 중인 컨테이너의 셸을 획득한다.
kubectl exec -it redis -- /bin/bash
-
셸에서
/data/redis
로 이동하고, 파일을 생성한다.root@redis:/data# cd /data/redis/ root@redis:/data/redis# echo Hello > test-file
-
셸에서 실행 중인 프로세스 목록을 확인한다.
root@redis:/data/redis# apt-get update root@redis:/data/redis# apt-get install procps root@redis:/data/redis# ps aux
출력은 이와 유사하다.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND redis 1 0.1 0.1 33308 3828 ? Ssl 00:46 0:00 redis-server *:6379 root 12 0.0 0.0 20228 3020 ? Ss 00:47 0:00 /bin/bash root 15 0.0 0.0 17500 2072 ? R+ 00:48 0:00 ps aux
-
셸에서 Redis 프로세스를 강제종료(kill)한다.
root@redis:/data/redis# kill <pid>
여기서
<pid>
는 Redis 프로세스 ID(PID) 이다. -
원래 터미널에서, Redis 파드의 변경을 지켜본다. 결국, 다음과 유사한 것을 보게 될 것이다.
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s redis 0/1 Completed 0 6m redis 1/1 Running 1 6m
이때, 컨테이너는 종료되고 재시작된다. 이는
Redis 파드의
restartPolicy는
Always
이기 때문이다.
-
재시작된 컨테이너의 셸을 획득한다.
kubectl exec -it redis -- /bin/bash
-
셸에서
/data/redis
로 이동하고,test-file
이 여전히 존재하는지 확인한다.root@redis:/data/redis# cd /data/redis/ root@redis:/data/redis# ls test-file
-
이 연습을 위해 생성한 파드를 삭제한다.
kubectl delete pod redis