ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [따배쿠] 쿠버네티스 컨테이너 동작 Flow
    kubernetes 2024. 11. 9. 18:00

     

    [쿠버네티스 컨테이너 동작 Flow]

     

    • 동작 흐름
    1. User(개발자/운영자)는 필요한 여러 컨테이너를 빌드한다.
    2. docker push를 통해 도커 허브에 저장한다.
    3. k8s 명령어를 통해, 도커 허브에 있는 이미지를 가지고 컨테이너 실행 요청을 master node에게 보낸다. ex) kubectl create deploy web --image=hub.examle.com/nginx
    4. Master node(컨트롤 플레인)이 요청을 받는다
    5. Master node의 REST API server가 Scheduler에게 어떤 노드에 컨테이너를 실행하면 좋을지 질문하고, 응답 받는다.응답받은 노드의 kubelet에 요청을 전달한다. ex) 최적 노드가 node1일 경우 node1의 kubelet
    6. kubelet은 받은 요청을 docker 명령으로 바꿔서 docker demon에게 실제 컨테이너 실행 요청을 한다. ex) node1의 kubelet은 node1의 Docker demon에 실행 요청
    7. Docker demon은 받은 요청대로 실제 도커 허브에 이미지가 존재하는지 확인하고, 컨테이너를 실행시킨다.

    이렇게 작동하는 컨테이너를 'pod'라고 일컫는다.

     


    [상세 1 : 쿠버네티스 컴포넌트]

     

     

    1. Master node (Control plane) 컴포넌트

    • etcd : key-value 타입의 쿠버네티스 상태 정보 저장소 (보통 worker node들의 상태 정보, 쿠버네티스 상태 정보, 실행 중인 Docker container 정보, 이미지 상태 등을 저장하고 있음)
    • kube-apiserver (거의 Main Role) : k8s api를 사용하도록 요청을 받고, 요청이 유효한지 검사 
    • kube-scheduler : 파드를 실행할 최적 노드 선택
    • kube-controller-manager : 파드를 관찰하며 생성 개수 보장

    보통 Worker node 컴포넌트 내 kubelet에 cAdvisor라는 컨테이너 모니터링 툴이 내장되어 있는데

    이를 통해 kubelet이 컨테이너 상태 정보를 etcd 저장소에 전달한다 ~~ 이런 느낌 ㅎ


    2. Worker node 컴포넌트

    • kubelet : 모든 노드에서 실행되는 k8s 에이전트, 데몬 형태로 동작 (컨테이너 모니터링 툴인 cAdvisor가 속해있다.)
    • kube-proxy : k8s의 network 동작 관리, iptables rule을 구성
    • 컨테이너 런타임 : 컨테이너를 실행하는 엔진 ex) Docker, Containerd, runc

    현재 컨테이너 엔진으로는 Docker, 컨테이너 오케스트레이션으로는 k8s를 주로 사용한다 ! !


    [상세 2 : 쿠버네티스 컴포넌트 동작 흐름]

     

    Flow

     

    1. User가 pod 생성 명령 요청 (CLI 명령 OR yaml 파일) ex) kubectl run webui --image=nginx:1.14

    2. Master node의 api server가 해당 요청을 받고 문법이나 권한이 합당한지 확인한다.

    3. 또한 api server가 etcd 저장소에 있는 정보를 확인해서, scheduler에게 요청을 보낸다.

    컨테이너를 실행할 때 어떤 node에 배포하는게 제일 최적일까? 라는 요청

    4. scheduler는 api server가 준 etcd 저장소 정보를 통해, 어떤 node에 배포하는 게 최적일지 판단 후 응답 ex) node2가 최적일 거 같아!

    5. api server는 해당 정보를 가지고 Worker node 내 kubelet에 접속한다. ex) node2에 접속

    6. api server은 해당 Worker node의 kubelet에 컨테이너 실행 명령을 전달한다. ex) kubelet아 nginx 웹 서버 컨테이너 하나 실행해줘~

    7. kubelet은 docker에게 도커 명령어로 컨테이너 실행 명령을 내린다. ex) Docker야 nginx 웹 서버 컨테이너 하나 실행해줘~

    8. Docker은 Docker hub에서 원하는 nginx 이미지가 있는지 확인 후, 동작한다. 

     

    ** controller는 파드를 모니터링 하다가, pod 개수가 요청만큼 존재하지 않을 때 api server에 전달하여 

    파드 개수를 보장해준다.


    [Add on]

     

    1. 네트워크 애드온

    - CNI (weave, callico, flaneID, kube-route ...)

     

    2. DNS 애드온

    - coreDNS

     

    3. 대시보드 애드온

     

    4. 컨테이너 자원 모니터링

    - cAdvisor

     

    5. 클러스터 로깅

    - 컨테이너 로그, k8s 운영 로그들을 수집하여 중앙화

    - ELK (ElasticSearch, Logstash, Kibana), EFK (ElasticSearch, Fluentd, Kibana), DataDog 등


    참고 영상

     

    https://www.youtube.com/watch?v=Iue9TC13vPQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=8

     

    'kubernetes' 카테고리의 다른 글

    [따배쿠] Pod - liveness Probe를 이용해서 Self-healing Pod 만들기  (1) 2024.12.01
    [따배쿠] Pod  (0) 2024.11.10
    [따배쿠] namespace  (0) 2024.11.10
    [따배쿠] kubectl command  (0) 2024.11.09
    [따배쿠] kubectl  (0) 2024.11.03
Designed by Tistory.