Kubernetes for Developers ‐ Week1 - skinadam/k8s GitHub Wiki
Chapter 1. 애플리케이션 배포를 위한 쿠버네티스
-
컨테이너(Container): 격리된 환경에서 애플리케이션을 호스팅하기 위해 애플리케이션과 이에 필요한 디펜던시만을 패키징 하는 방법
- 이점
- 언어 유연성
- 경량화된 격리
- 개발자 효율성
- 재현성
- 이점
-
파드(Pod): 함께 스케줄링되고 동일한 단위로 처리되는 컨테이너의 집합
-
쿠버네티스(Kubernetes)
- 이점
- 자동화된 운영
- 높은 확장성
- 워크로드 추상화
- 선언적 구성
- 비용 효율성
- 확장성
- 이점
Chapter 2. 애플리케이션 컨테이너화
- Containerizing Apps: 애플리케이션과 관련 디펜던시들을 실행 가능한 컨테이너로 패키징 하는 과정. 어디서든 일관되게 실행 가능. 개발자는 로컬에서 격리된 환경에 쉽게 진입 가능.
- Container Image vs Container Instance
- container image: registry로부터 다운로드되거나 로컬에서 빌드되는 파일 아티팩트
- container instance: container의 실행된 형태
- Container는 운영환경의 이점뿐만 아니라 개발자가 환경 충돌이나 복잡한 설정 지침없이도 여러 프로젝트를 동시에 작업할 수 있게 도와줌
- Dockerfile: container를 빌드하는데 필요한 일련의 절차에 대한 지침을 포함
- base 이미지 활용, 의존성 추가
- Multistage 빌드로 빌드 환경과 런타임 환경 분리
- Docker Compose: lightweight container orchestrator
- 여러 서비스를 위한 컨테이너 기반 개발 환경을 빠르게 구축할 수 있게 해줌
Chapter 3. 쿠버네티스에 배포하기
- Kubelet: 컨트롤 플레인과 통신하고 컨테이너 런타임을 통해 노드에서 실행되는 컨테이너의 라이프사이클 관리를 담당
- Kubernetes Cluster: 컨트롤 플레인과 워커 노드로 구성
- Pod: 컨테이너 집합. 주된 스케줄링 단위
- Deployment: Pod에 대한 라이프사이클을 관리하는 상위 객체
- Service: Pod 집합에서 실행 중인 애플리케이션을 네트워크 서비스로 노출하는 방법
- Pod는 Deployment에 의해 관리되고 Service에 의해 노출됨
- Imperative Commands
- deployment 생성:
kubectl create deployment timeserver --image=docker.io/wdenniss/timeserver:1
- LoadBalancer 유형 서비스 생성:
kubectl expose deployment timeserver --type=LoadBalancer --port 80
- 결과 관찰:
kubectl get deploy,svc
- 새로운 버전으로 업데이트:
kubectl set image deployment timeserver timeserver=wdenniss/timeserver:2
- deployment 생성:
- Local Kubernetes environments: Docker Desktop, Minikube 등으로 로컬 환경에서 쿠버네티스 클러스터를 실행할 수 있음