2020. 9. 10. 00:35ㆍComputer/Kubernetes
시작하기에 앞서서
Node (미니언), Pod, Container 에 대한 정리가 잘된 이미지가 있어 첨부하고 시작한다. ( Kubernetes 공식 홈페이지에 있는 사진 )
퍼시스턴트 데이터 저장소란?
쉽게 생각하면 데이터가 사라지지 않는 데이터 저장소다. 예를들어 도커의 컨테이너가 죽으면, 도커 컨테이너 자체의 데이터는 사라질 수 있다. 그러나, 이를 mount 하는 형태로 설정을 하면, 컨테이너가 중단되더라도, mount 된 볼륨 혹은 디스크에 저장된 데이터는 사라지지 않는다.
쿠버네티스에서도 이런 데이터 저장소를 지원한다.
kubernetes.io/docs/concepts/storage/volumes를 참조하면 쿠버네티스에서 지원하는 볼륨 유형들을 볼 수 있다.
1. 임시디스크
다음의 yml 을 생성한다.
apiVersion: v1
kind: Pod
metadata:
name: memory-pd
spec:
containers:
- image: nginx:latest
ports:
- containerPort: 80
name: memory-pd
volumeMounts:
- mountPath: /memory-pd
name: memory-volume
volumes:
- name: memory-volume
emptyDir:
medium: Memory
아래의 커맨드를 이용하여 pod 을 생성한다.
pc:~ user$ kubectl create -f storage-memory.yml
pod/memory-pd created
pc:~ user$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-5655c9d946-fq2gd 1/1 Running 1 34d
memory-pd 0/1 ContainerCreating 0 14s
pc:~ user$ kubectl exec memory-pd -- df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 17784752 2791836 13952680 17% /
tmpfs 65536 0 65536 0% /dev
tmpfs 1967400 0 1967400 0% /sys/fs/cgroup
tmpfs 1967400 0 1967400 0% /memory-pd
/dev/sda1 17784752 2791836 13952680 17% /etc/hosts
shm 65536 0 65536 0% /dev/shm
tmpfs 1967400 12 1967388 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 1967400 0 1967400 0% /proc/acpi
tmpfs 1967400 0 1967400 0% /proc/scsi
tmpfs 1967400 0 1967400 0% /sys/firmware
pod 을 생성하고 memory-pd 컨테이너가 memory-volume 라는 메모리 타입의 저장소를 마운트 하고 있는지 확인할 수 있었다.
이후 실제로, 메모리타입의 스토리지는 container 가 재부팅될떄 데이터가 유지가 안되는지 확인해보았다.
pc:~ user$ kubectl exec memory-pd -- touch ./memory-pd/test
pc:~ user$ kubectl exec memory-pd -- ls ./memory-pd
test
pc:~ user$ kubectl delete -f memory-pd.yaml
pc:~ user$ kubectl create -f memory-pd.yaml
pc:~ user$ kubectl exec memory-pd -- ls ./memory-pd
pod 를 삭제후 새로 생성하면 mount 했던 memory volume 의 데이터는 없어진다.
2. 퍼시스턴트 볼륨을 이용한 pod 구성
구성은 아래의 순서로 진행합니다.
1. node 의 특정 path 에 데이터 추가
2. 클러스터 관리자는 물리적 스토리지로 지원되는 PersistentVolume을 생성합니다. 볼륨을 포드와 연결하지 않습니다.
3. 개발자 / 클러스터 사용자 역할을 맡은 사용자는 적절한 PersistentVolume에 자동으로 바인딩되는 PersistentVolumeClaim을 만듭니다.
4. PersistentVolumeClaim을 저장소로 사용하는 포드를 만듭니다
1. node 의 특정 path 에 데이터 추가
pc:~ user$ minikube ssh
$ sudo mkdir /mnt/data
$ sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"
$ cat /mnt/data/index.html
Hello from Kubernetes storage
2. Persistent Volume 생성
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
kubectl apply -f pv.yaml
3. Persistent Volume Claim 생성
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kubectl apply -f pvc.yaml
4. PVC 를 volume 으로 사용하는 container 생성
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
생성이 완료되면, 해당 container 로 진입하여 curl 을 설치 로컬호스트로 실제 PVC 가 잘 바인딩했는지 확인해본다.
pc:~ user$ kubectl exec -it task-pv-pod -- /bin/bash
root@task-pv-pod:/# apt update
root@task-pv-pod:/# apt install curl
root@task-pv-pod:/# curl http://localhost/
Hello from Kubernetes storage
확인시 node 에서 생성해둔 index.html 파일이 잘 나오는것을 볼 수 있다.
보다 더 이해를 돕기 위해 아래 영상을 보며 마치겠다. ( 1:48:02 부터 )
'Computer > Kubernetes' 카테고리의 다른 글
Kubernetes - 10. 고가용성과 확장성을 위한 설계 (0) | 2020.10.23 |
---|---|
Kubernetes - 02. 쿠버네티스의 핵심구성 요소로 기초 다지기 (0) | 2020.08.08 |
Kubernetes - 01. 쿠버네티스 소개 ( MiniKube 실습편 ) (2) | 2020.08.02 |
Kubernetes - 01. 쿠버네티스 소개 ( 컨테이너편 ) (0) | 2020.07.28 |