[CKA] Kubernetes Certificate Administrator(CKA) with Tests 학습노트(2/)
1. Storage
쿠버네티스 스토리지 구조
1.1. docker storage
우선 도커 스토리지에 대해서 알아보자
1.1.1. docker path
디폴드 경로. /var/lib/docker/volumes아래 저장된다. /var/lib/docker
- volumes \<- 여기 저장된다
- aufs
- image
- containers
1.1.2. Container(Docker) Image Layered Architecture
컨테이너 이미지는 싱글 파일이 아니라 계층 구조를 가진다.
- 이미지 레이어 : baseimage레이어부터 파일까지 변화가 생기는 부분을 별도의 이미지를 별도의 계층으로 구성하고, 차후 빌드부터는 변화가 생기는 레이어만 별도로 빌드하여 컨테이너 이미지를 구성한다.
- 컨테이너 레이어 : 적층으로 쌓인 최종 이미지를 두고 실행시 컨테이너 레이어를 하나 더 쌓는다. 컨테이너 레이어는 컨테이너 종료 시 사라지는 임시 파일에 대한 레이어이다.
- Copy-On-Write(CoW) : 그렇다면 컨테이너 실행시 이미지 레이어의 파일을 수정하면 어떻게 될까? 이미지 레이어의 파일(실행파일, 설정 파일 등)을 컨테이너 레이어로 가져와서 수정을 수행한다. 하지만 해당 파일은 컨테이너 레이어에서 수정된 내용이므로 이미지 자체가 수정되지는 않는다. 즉, 프로세스 종료시 원상태로 복구되며, 이미지가 수정되지는 않는다.
1.1.3. Docker Volumes
매번 지워진다면 영구 데이터는 어떻게 보관해야 할까? 볼륨이라는 객체를 만들어두고 도커 실행시 해당 볼륨을 컨테이너에 바인딩한다. 아래와 같은 명령으로 수행할 수 있다.
# 볼륨을 생성. 도커 호스트의 /var/lib/docker/volumes/VOLUME_NAME에 볼륨의 파일이 쌓인다.docker create volume VOLUME_NAMEdocker run -v VOLUME_NAME:VOLUME_MOUNT_PATH IMAGENAME # 1. 생성된 볼륨을 마운트.docker run -v VOLUME_NAME_NOT_CREATED:VOLUME_MOUNT_PATH IMAGENAME # 2. 생성되지 않은 볼륨을 마운트하면 생성 후 마운트한다.docker run --mount type=bind,source=/HOSTPATH/,taret=/MOUNTPATH/ IMAGENAME # --mount로 마운팅하는 방법. 도커 호스트와 타겟의 옵션을 직접 줄 수 있다.
1.1.4. Storage Drivers
스토리지 드라이버는 이렇게 다양한 레이어를 기반으로 운영되는 파일 시스템에 대한 구현체이다. 도커 이미지 레이어 및 컨테이너 레이어를 관리하는 드라이버이며, 기본적으로 overlay2를 사용한다.
1.5. Volume Drivers
도커가 볼륨을 사용할 때 사용하는 드라이버.
Local (Default) : /var/lib/volumes 의 볼륨 제어
Azure File Storage
Convoy
VMware vSphere Storage ... 등등등
특정 드라이버를 사용하도록 옵션을 걸 수 있다. aws ebs를 걸려면 아래와 같이 걸 수 있다.
docker run -it --name mysql --volume-driver rexray/ebs --mount src=ebs-vol,target=/var/lib/mysql mysql
1.2. Container Storage Interface(CSI)
CR(Runtime)I : 컨테이너 런타임에 대한 인터페이스. Docker, cri-o, rkt... CN(Network)I : 컨테이너 네트워크에 대한 인터페이스. flannel, cilium... CS(Storage)I : 컨테이너 스토리지에 대한 인터페이스. portworx, AWS EBS, Dell EMC, GlusterFS...
1.2.1. 호출 구조
쿠버네티스 API가 스토리지 관련 RPC를 호출하고 RPC는 CSI를 호출하며, 각 제조사는 CSI를 드라이버로 구현한다.
- kubernetes api call(provision a new volume, delete...) -> RPC(createvolume/deletevolume/controllerpublishvolume) -> CSI Driver