CKA 공부 27일차
in Devops on Kubernetes
Storage
이번 시간에는 k8s의 스토리지에 대해서 공부해보자.
k8s의 스토리지를 이해하기에 앞서 도커 이미지 저장소에 대해 공부해보자.
도커 이미지 저장소는 2 가지 컨셉을 가진다.
Storage Divers
와Volume Drivers
우리는 여기서
Storage Divers
에 대해서 알아볼 것이다.
Docker Storage
도커는 로컬에 어떻게 데이터를 저장할까?
도커를 설치하면,
/var/lib/docker
폴더가 생성된다.그 아래에는 aufs, containers, image, volumes 등등의 폴더가 생긴다.
도커는 기본적으로 레이어 아키텍처를 갖는다.
도커 이미지를 빌드하면, 이 레이어 계층마다 패키지들을 나눠놔서 나중에 변경이 발생했을 때 해당 레이어만 변경하게 하는 전략을 갖고 있다.
레이어 아키텍처의 장점은 도커 이미지가 빌드 될 때 업데이트할 이미지를 레이어만 변경함으로써 더 빠르게 빌드할 수 있다는 장점이 있다.
즉, 도커는 변경이 없는 레이어는 캐싱에서 가져오기 때문에 더 빠르게 빌드가 가능한 것이다.
레이어는 Bottom - Up의 구조를 가지며, OS부터 소스코드 명령어까지 레이어가 위에 계속해서 쌓이는 식이다. (햄버거를 생각해보라)
이러한 레이어는 오직 읽을 수만 있으며, 업데이트 시점은 도커 이미지가 빌드되는 시점이다.
이미지가 구동되고 새로운 컨테이너 레이어가 생기게 되면 이 레이어는 Read/Write가 가능해진다.
이미지 레이어에 존재하는 코드는 Read만 가능하지만, Write는 불가능하다고 하였다.
그러면 기존 이미지 레이어에 존재하는 코드나 파일들은 변경이 불가능할까? 그렇지 않다.
도커는 이미지 레이어에 존재하는 코드나 파일을 사용자가 수정하려고 하면 이를 현재 컨테이너 레이어에서 복사해서 Write할 수 있게 해준다.
이 기술을
Copy-On-Write
라고 부른다.도커 컨테이너는 기본적으로 상태를 가지지 않는다. 만약 우리가 이 파일들을 영속하고 싶다면 어떻게해야할까?
이 때는 Volume을 사용할 수 있다.
도커를 구동할 때 Volume을 사용해 폴더를 컨테이너와 마운트하면 도커는 볼륨을 마운트해서 보관하고 있다.
가령
/var/lib/mysql
폴더를 마운트하게 되면 여기에 있는 파일을 Volume 폴더로 가져오게 된다.이렇게 마운팅된 볼륨들은
/var/lib/docker/volumes
폴더에서 확인해볼 수 있다.이렇게 도커 볼륨에 마운팅된 정보들은 컨테이너가 제거되더라도 지워지지않고 계속해서 남아있게 된다.
/var/lib/docker/volumes
폴더에 볼륨 마운트를 하지 않고, 그냥 내 PC의 폴더에 마운트할 수도 있다.이것을
Bind
마운트라고 부르며 아래와 같은 명령어로Bind
마운트가 가능하다.
docker run -v /data/mysql:/var/lib/mysql mysql
- 이 폴더 위치는 도커 호스트 위에 어디든 위치 가능하다.