Kubernetes in Action 11장 쿠버네티스 내부

  1. 아키텍처 이해: 컨트롤 플레인, 워커노드
    1. 쿠버네티스 컴포넌트의 분산 특성(nature)
      1. kubectl get componentstatuses
      2. 컴포넌트와 커뮤니케이션하는 방법: API 서버
      3. 개별 컴포넌트의 다수의 인스턴스 실행
      4. 컴포넌트의 실행 방법: 시스템에 직접 배포 또는 포드로서 실행
    2. 쿠버네티스가 etcd를 사용하는 방법
      1. etcd는 쿠버네티스가 클러스터 상태 및 메타 데이터를 저장하는 유일한 장소
      2. 낙관적 동시성 제어 (낙관적 locking): 버전 번호 + 업데이트 시간
      3. etcd에 리소스를 저장하는 방법: etcdctl ls /registry
      4. 지정된 오브젝트의 일관성과 유효성 보장
      5. etcd가 클러스터가 될 때 일관성 보장: RAFT 합의 알고리즘
      6. etcd 인스턴스의 개수가 홀수여야 하는 이유: 쿼럼(quorum) 효율성을 위해
    3. API 서버가 하는 일
      1. 인증 플러그인을 사용하는 클라이언트 인증
      2. 권한 승인 플러그인을 통한 클라이언트 승인
      3. 승인 제어 플러그인을 통해 요청 받은 리소스를 확인/수정
      4. 리소스 검증 및 영구 저장
    4. API 서버가 클라이언트의 리소스 변화를 감지하는 방법: 오브젝트를 갱신하면 포드의 변경 사항을 etcd에 저장했다가 그 순간 포드를 감시하는 모든 클라이언트에 전달
    5. 스케줄러 이해
      1. 기본 스케쥴러 알고리즘: 우선순위 + 라운드 로빈
        1. 수용 가능한 노드 찾기
        2. 포드를 위한 최적의 노드 선택
      2. 고급 포드 스케쥴링: 16장
      3. 다중 스케쥴러 사용
    6. 컨트롤러 매니저에서 실행되고 있는 컨트롤러 소개
      1. 컨트롤러가 하는 일과 동작 방식: 감시 메커니즘을 사용해 변경 사항을 통지
      2. 레플리케이션 매니저: API 서버를 통해 레플리케이션 컨트롤러를 감시하여 포드 레소스를 생성 및 삭제
      3. 레플리카셋, 데몬셋, 잡 컨트롤러: 거의 동일
      4. 디플로이먼트 컨트롤러
      5. 스테이트풀셋 컨트롤러
      6. 노드 컨트롤러
      7. 서비스 컨트롤러
      8. 엔드포인트 컨트롤러
      9. 네임스페이스 컨트롤러
      10. PersistentVolume 컨트롤러
      11. 컨트롤러 정리: 모든 컨트롤러는 API 서버를 통해 동작한다. 직접 통신하거나 명령하지 않는다.
    7. Kubelet이 하는 일
      1. Kubelet의 잡이해
      2. API 서버 없이 정적 포드 실행
    8. 쿠버네티스 서비스 프록시의 역할: 프록시로 불리는 이유
    9. 쿠버네티스 애드온 소개
      1. 애드온의 배포 방식
      2. DNS 서버의 동작 원리
      3. 대다수 인그레스 컨트롤러의 동작 방식
      4. 그 밖의 애드온 사용
    10. 모두 함께 가져오기
  2. 컨트롤러의 상호 협력 방식
    1. 관련된 컴포넌트의 이해
    2. 이벤트 체인
      1. 레플리카셋을 생성하는 배포 컨트롤러
      2. 포드 리소스를 생성하는 레플리카셋 컨트롤러
      3. 새롭게 생성된 포드를 노드에 할당하는 스케줄러
      4. 포드의 컨테이너를 실행하는 Kubelet
    3. 클러스터 이벤트 관찰: kubectl get events –watch
  3. 실행 중인 포드의 이해: 포드 인프라 컨테이너 + 컨테이너 A, B …
  4. 인터-포드 네트워킹
    1. 네트워크는 어떤 모습이어야 하는가
    2. 네트워크의 동작 원리 깊이 알아보기
      1. 동일한 노드상의 포드 간의 통신 활성화
      2. 서로 다른 노드상의 포드와의 통신 활성화
    3. 컨테이너 네트워크 인터페이스 소개
  5. 서비스의 구현 방식
    1. kube-proxy 소개
    2. kube-proxy가 iptables를 사용하는 방식
  6. 고가용성 클러스터 실행
    1. 앱의 가용성 높이기
      1. 가동 중단 시간을 줄이는 여러 가지 실행 방법
      2. 수평 확장이 불가능한 애플리케이션을 위한 리더 선출 매커니즘 사용하기
    2. 쿠버네티스 컨트롤 플레인 컴포넌트의 가용성 높이기
      1. etcd 클러스터 실행
      2. API 서버의 여러 인스턴스 실행
      3. 컨트롤러와 스케줄러의 고가용성 확보
      4. 컨트롤 플레인 컴포넌트에 사용된 리더 선출 메커니즘 이해
  7. 요약
    1. 쿠버네티스 클러스터를 구성하는 컴포넌트와 각 컴포넌트가 책임지는 컴포넌트
    2. API 서버, 스케줄러, 컨트롤러 매니저에서 실행 중인 다양한 컨트롤러와 Kubelet이 함께 작동해 포드를 생생하게 유지하는 방법
    3. 인프라 컨테이너가 포드의 모든 컨테이너를 묶는 방법
    4. 포드가 네트워크 브릿지를 통해 같은 노드에서 실행 중인 다른 포드와 통신하는 방법과 다른 노드의 브릿지가 서로 다른 노드에서 연결되는 방식으로 서로 다른 노드에서 실행되는 포드가 서로 통신하게 할 수 있는 방법
    5. kube-proxy가 노드에서 iptables 규칙을 구성해 동일한 서 비스의 포드 간에 로드 밸런싱을 수행하는 방법
    6. 컨트롤 플레인의 각 컴포넌트를 여러 인스턴스로 실행해 클러스터의 가용성을 높이는 방법

Loading

Published
Categorized as xacdo

By xacdo

Kyungwoo Hyun

Leave a comment

Your email address will not be published. Required fields are marked *