forked from boostcampwm-2024/web36-QLab
-
Notifications
You must be signed in to change notification settings - Fork 0
K8S
Hoons97 edited this page Jan 10, 2025
·
1 revision
분야: INFRA 사람: 승훈 장 주차: 1주차
- 도커 이미지는 레이어의 집합으로 이루어진다. DockerFile 에서의 각 명령마다 하나의 레이어로 처리된다.
- 이미지의 레이어들은 Read-Only 이며, 변경을 위해선 다시 빌드해야한다.
- 도커는 각 레이어의 상태를 캐싱해두고 추후 다시 빌드할 때 변경사항이 없다면 캐싱된 레이어를 불러와 재사용한다. 따라서 도커파일을 작성할 때 변경 가능성이 적은 명령을 상단에 배치하는 것이 유리하다.
- 저장된 이미지를 사용해 컨테이너를 실행하면, 해당 이미지 위에 컨테이너 레이어를 추가하여 생성한다. 기존 이미지의 레이어를 복사하는 것이 아니라 참조한다. 따라서 동일 이미지로 2개 이상의 컨테이너를 생성하여도, 하나의 같은 이미지 레이어를 참조하게 된다.
도커에 스토리지를 연결하는 방법은 Anonymous Volumes, Named Volumes, Bind Mounts 3가지가 있다.
-
Anonymous Volumes
# 1. 도커파일 안에서 정의 VOLUME /data # 2. 컨테이너 실행 시 정의 docker run -v /path/in/container busybox
호스트 컴퓨터에 익명 폴더를 생성하고, 도커가 이를 관리한다. 컨테이너 생성 시 자동으로 생성되고 관리된다.
-
Named Volumes
# 컨테이너 실행 시 정의 docker run -v my-volume:/data ubuntu
my-volume 이라는 이름의 볼륨을 생성하고, 이는 컨테이너 내부의
/data
폴더와 연결된다. my-volume 이 실제로 존재하는 폴더가 호스트 컴퓨터에 생성되고, 도커가 이를 관리한다. 여러 컨테이너가 하나의 볼륨을 공유할 수 있다. -
Bind Mounts
docker run -v /host/path:/container/path ubuntu
호스트 컴퓨터의 특정 디렉토리를 컨테이너 내부의 디렉토리에 마운트한다. 절대경로로 작성해야 하며 실제 데이터가 저장 될 디렉토리를 특정할 수 있다.
특성 | Anonymous Volumes | Named Volumes | Bind Mounts |
---|---|---|---|
관리 | 이름 없음 (관리 어려움) | 이름으로 식별 가능 | 호스트 경로 직접 지정 |
데이터 위치 | Docker가 자동 관리 | Docker가 자동 관리 | 호스트 경로 사용 |
주요 용도 | 일회성 데이터 저장 | 컨테이너 간 데이터 공유 | 호스트-컨테이너 간 데이터 공유 |
호스트 의존성 | 낮음 | 낮음 | 높음 |
오픈 소스 시스템이다. 컨테이너 배포와 관리를 위한 표준이며, 이를 위한 다양한 도구들을 포함한다.
- 자동 배포
- 스케일링 & 로드 밸런싱 지원
- 컨테이너 관리
- 클러스터 쿠버네티스를 활용해 구현하고자 하는 전체 서비스. 클러스터 내부에서 독자적인 네트워크를 가지며 이를 이용해 통신한다.
- Worker Node 컨테이너를 실행시키기 위한 논리적/물리적 장치. EC2 의 하나의 인스턴스가 될 수도 있고, 가상머신이 될 수도 있다.
- Pod 컨테이너를 실행시키기 위한 단위. 하나의 워커 노드 안에는 2개 이상의 Pod 가 존재할 수 있고, 하나의 Pod 안에 2개 이상의 컨테이너를 관리할 수 있다.
- MasterNode 워커노드, Pod 등의 관리를 총괄하는 장치. 워커노드의 생성/삭제, 포드의 생성/삭제, 각 컨테이너의 모니터링 등을 담당한다.
-
kublet 마스터 노드와 통신하기 위한 프로그램
-
kube-proxy
포드와 통신하기 위한 프로그램
쿠버네티스는 Object
로 관리된다.
-
Pod Object
- 컨테이너로 실행시킬 이미지를 포함 일반적으로 하나의 포드에 하나의 컨테이너
- 모든 포드는 스토리지(볼륨)와 네트워크를 포함, 공유
- 기본적으로 각 포드마다 임시 내부 Private IP 를 할당받음. 재생성 시마다 IP 변경
-
Deployment Object
- 원하는 상태를 정의하면 쿠버네티스가 실제 상태를 변경 인스턴스의 개수, 포드가 어떤 이미지를 실행할 지 등등…
- 동적으로 확장 가능
- 새로운 버전 배포나 기존 버전 롤백 지원
-
Service Object
- 클러스터 외부에서 포드로 접근 불가
- Pod 그룹에 대해 공유 IP 지정 가능
- 클러스터 외부에서 접근을 허용할 수 있음.
-
Service 종류:
- ClusterIP: 기본 서비스 유형으로, 클러스터 내부에서만 접근 가능.
- NodePort: 클러스터 외부에서 특정 포트를 통해 접근 가능.
- LoadBalancer: 클라우드 환경에서 외부 로드 밸런서를 사용해 접근 가능.
- ExternalName: 외부 DNS 이름을 클러스터 내부에서 사용할 수 있도록 설정.