[초보를 위한 쿠버네티스 안내서] 쿠버네티스 아키텍처 1/3 (구성/설계)

박철현·2023년 5월 15일
0

영상후기

목록 보기
125/160

movie

  • Desired State : 쿠버네티스는 상태 루프를 돌며 유지해줌
    • Loop
      -> 상태 체크(현재 상태 == 원하는 상태)
      -> 차이점 발견 (현재 상태 != 원하는 상태)
      -> 조치(현재 상태 -> 원하는 상태)
    • 복제가 잘 되었는지만 체크하는 Loop를 실행하는 컨트롤러
    • 로드밸런스가 잘 되는 컨트롤러
    • CI/CD 체크 Loop만 도는 컨트롤러
    • .. 등등 컨트롤러
  • 마스터 : 체크, 실행하는 영역
    • API Server : 중간에서 교통정리
    • etcd : 상태 저장하는 DB
    • 스케줄러, 컨트롤러
  • etcd : 모든 상태와 데이터 저장
    • 분산 시스템으로 구성하여 안정성을 높임(고가용성)
    • 가볍고 빠르면서 정확하게 설계(일관성)
    • Ket-Value 형태로 데이터 저장
    • TTL(time to live), watch같은 부가 기능 제공
    • 백업 필수
  • API 서버 : 상태를 바꾸거나 조회
    • etc와 유일하게 통신하는 모듈
    • 인터페이스 : REST API 형태로 제공
    • 권한을 체크하여 적절한 권한이 없을 경우 요청 차단
    • 관리자 요청 뿐 아니라 다양한 내부 모듈과 통신
    • 수평으로 확장되도록 디자인
  • 스케줄러 : 새로 생성된 Pod를 감지하고 실행할 노드 선택
    • 노드의 현재 상태와 Pod 요구사항 체크
    • 노드에 라벨 부여
    • ex) a-zone, b-zone 또는 gpu-enabled..
    • 팟을 띄울 때 특정 라벨에 해당하는 노드에 배포 또는 요청
  • 컨트롤러 : 논리적으로 다양한 컨트롤러 존재
    • 복제 컨트롤러
    • 노드 컨트롤러
    • 엔드포인트 컨트롤러..
    • 끊임 없이 상태를 체크하고 원하는 상태 유지(복잡성을 낮추기 위해 하나의 프로세스로 실행)
  • 조회 흐름 : (컨트롤러->API서버 요청) 정보조회 -> (API 서버) 정보 조회 권한 체크 -> (API서버 ->etcd) 정보 조회 -> (etcd -> API 서버) 정보 전달 -> (API 서버 ->컨트롤러) 정보 전달
  • 기본 흐름 : (etcd -> API서버) 원하는 상태 변경 -> (API 서버 -> 컨트롤러)원하는 상태 변경 안내 -> (컨트롤러) 원하는 상태로 리소스 변경(어떤 조치) -> (컨트롤러 -> API 서버) 변경 사항 전달 -> (API서버) 정보 갱신 권한 체크 -> (API서버->etcd) 정보 갱신
  • 수많은 컴포넌트들이 직접 etcd와 통신이 아닌 API 서버를 거침
  • 노드 : 컨테이너가 실행되는 부분(master와 통신 시 API서버를 바라봄)
    • 프록시 : 네트워크 프록시와 부하 분산 역할
      • 성능상 이유로 별도 프록시 프로그램 대신 iptables 또는 IPVS를 사용(설정만 관리)
    • 큐블릿(Kublet) : 각 노드에서 실행
      • pot을 실행/중지하고 상태 체크
      • CRI(Container Runtime Interface) : 컨테이너를 사용할 수 있도록 큐블릿이 컨테이너를 직접 사용하는 것이 아닌 pod 이라는 거로 감싸서 사용

pod 생성되기 위한 과정
1. (관리자 -> API서버) pod 생성 요청
2. (API서버 -> etcd) pod 생성 요청 정보 넣음
3. (컨트롤러) 새 pod 생성 되었나 계속 확인 -> pod 생성 요청을 확인함(기본 흐름)
4. (컨트롤러 -> API서버) pod 할당 요청
5. (API서버 -> etcd) pod 할당 요청
6. (스케줄러) 새 Pod 할당 계속 확인 -> 할당 확인
7. (스케줄러 -> API 서버) 특정 노드에, Pod 할당
8. (API 서버 -> etcd) Pod를 특정 노드에 할당하는데, 아직 실행 전 상태다 저장
"Pod - 노드할당 / 실행 전"
9. (큐블릿) 미실행 Pod 계속 확인 -> 확인
10. (큐블릿) Pod 생성
11. (API서버->etcd) Pod 생성 정보 업데이트 "Pod - 노드할당 / 실행중" 상태로 업데이트

profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글

관련 채용 정보