CKA 공부 27일차

Storage

  • 이번 시간에는 k8s의 스토리지에 대해서 공부해보자.

  • k8s의 스토리지를 이해하기에 앞서 도커 이미지 저장소에 대해 공부해보자.

  • 도커 이미지 저장소는 2 가지 컨셉을 가진다. Storage DiversVolume 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
  • 이 폴더 위치는 도커 호스트 위에 어디든 위치 가능하다.




© 2022. by minkuk

Powered by minkuk