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
  • Local Kubernetes environments: Docker Desktop, Minikube 등으로 로컬 환경에서 쿠버네티스 클러스터를 실행할 수 있음