[07/36] 4-1. 쿠버네티스 아키텍처 - Kubernetes 동작원리


[따배쿠] 4-1. 쿠버네티스 아키텍처 - Kubernetes 동작원리

https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c
  • Category : 따배쿠
  • Tag : 따배쿠


수업내용

Part 1. 쿠버네티스 시작하기

  1. 쿠버네티스 소개
  2. 쿠버네티스 설치하기
  3. 쿠버네티스로 컨테이너 실행하기

    Part 2. 쿠버네티스 기본 개념

  4. 쿠버네티스 아키텍처
  5. 파드
  6. 컨트롤러
  7. 서비스
  8. 인그레스
  9. 레이블과 애너테이션
  10. 컨피그맵
  11. 시크릿

    Part 3. 쿠버네티스 한 걸음 더 들어가기

  12. 파드 스케쥴링
  13. 인증과 권한관리
  14. 데이터 저장
  15. 클러스터 네트워킹 구성
  16. 쿠버네티스 DNS
  17. 로깅과 모니터링
  18. 오토스케일링
  19. 사용자 정의 자원
  20. 쿠버네티스 기반으로 워드프레스 앱 실행하기
  21. 헬름

목차

  • 쿠버네티스 동작원리
  • namespace
  • yaml
  • api version

쿠버네티스 동작원리

쿠버네티스에서 컨테이너 동작 FLOW

쿠버네티스에서 컨테이너 동작 FLOW

  1. 개발자가 컨테이너 Build
    • mainui
    • login
    • pay
  2. 도커 명령어(push)로 저장소에 저장
    • public : Docker Hub
    • private : 사내 hub
  3. 개발자 및 운영자가 쿠버네티스에게 컨테이너가 실행될 수 있도록 명령어 실행
    • kubectl create deploy web –image=hub.example.com/nginx
  4. Control plane(Master node(s))
    • api 컨테이너가 실행 요청 수행
    • 컨테이너를 어떤 노드에 실행할지 Scheduler에게 질의
    • Scheduler가 노트상태 분석 후 적절한 노드를 api 컨테이너에게 보고
    • api 컨테이너가 스커쥴러를 통해 전달받은 노드의 kubelet에게 컨테이너 실행 요청
  5. 요청받은 노드의 kubelet
    • api의 요청을 docker 명령어로 바꿔 Docker데몬에 실제 컨테이너 실행 요청
  6. Docker데몬
    • hub를 통해 요청받은 컨테이너(ex: nginx) 확인
    • 이미지를 받아와 컨테이너(POD) 실행
    • 쿠버네티스는 컨테이너를 POD단위로 관리

쿠버네티스 컴포넌트

  • 마스터 컴포넌트(Control-Plane )
    • etcd
      • key-value 타입의 저장소
      • wocker node의 정보들을 보관하고 있음
        1. api서버로부터 요청시 갖고있는 worker node의 정보를 api에 전달해줌
        2. api가 전달받은 worker node정보를 다시 스케쥴러에게 전달하여 작업이 가능한지 확인
        3. 작업가능여부 확인 후 worker node의 kubelet에게 작업 요청
    • kube-apiserver
      • k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
    • kube-scheduler
      • 파드를 실행할 노드 선택
    • kube-controller-manager
      • 파드를 관찰하며 개수를 보장
  • 워커 노드 컴포넌트
    • kubelet(데몬)
      • 모든 노드에서 실행되는 k8s 에이전트
      • 데몬 형태로 동작
      • CAdvisor
    • kube-proxy
      • k8s의 network 동작을 관리
      • iptables rule을 구성
    • 컨테이너 런타임
      • 컨테이너를 실행하는 엔진
      • docker, containerd, runc

쿠버네티스 아키텍쳐

쿠버네티스 아키텍쳐

  • Control plane
    • API : kubectl 요청을 받음 Nginx 실행 명령
      • 사용자의 명령어를 문법, 권한 체크 후 실행
      • etcd 정보확인
      • schduler에게 요청
      • schduler에게 응답 확인 후 해당 노드의 kubelet에 명령어(Nginx 실행) 요청
    • etcd : key, value 타입으로 저장되는 저장소
      • work node에 대한 상태정보
      • docker container의 동작중인 상태
      • 다운로드된 이미지의 상태
      • 위 상태정보를 MasterNode에 전달
    • schduler : api가 준 etcd 정보를 바탕으로 노트 체크 후 api에 응답
  • node1
    • kubelet
      • API로부터 요청받은 명령어(Nginx 실행)를 Docker 명령어로 Nginx 실행명령어 송출
      • CAdvisor를 통해 현재 컨테이너기반의 상태정보 수집
      • H/W 정보 수집
    • Docker
      • kubelet으로 부터 요청받은 명령어에 따라 Docker Hub로부터 버전체크 후 받아와 동작 실행
  • node2

애드온

  • 네트워크 애드온
    • CNI - weave, calico, flaneid, kube-route …
  • dns 애드온
    • coreDNS
  • 대시보드 애드온
  • 컨테이너 자원 모니터링
    • cAdvisor
  • 클러스터 로깅
    • 컨테이너로그, k8s 운영 로그들을 수집해서 중앙화
    • ELK(ElasticSearch, Logstash, Kibana), EFK(ElasticSearch, Kibana), DataDog

Share this post