ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿠버네티스 클러스터와 컴포넌트
    Kubernetes - 기초 2022. 8. 24. 08:24

    Kubernetes를 사용하려면 제일 먼저 클러스터를 구성해야합니다.

     

    Kubernetes Docs에서는 "클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합. 모든 클러스터는 한 개의 워커 노드를 가진다."로 설명하고 있습니다.


    Kubernetes Cluster 구조

    출처 : https://kubernetes.io/ko/docs/concepts/overview/components

    위의 그림과 같이 Kubernetes cluster는 하드웨어 수준에서 많은 노드로 구성됩니다.

    Master node(Control Plane)과 Worker node로 나뉘고, 다양한 component를 통해 동작합니다.

    Master node(Control plane)와 Worker node

    Master node와 Woker node의 역할과 각 component에 대해 간단하게 알아보자

    (cloud controller manager는 생략합니다)

     

    kube-system을 통해 어떤 component로 구성되어 있는지 확인하고 kube-apiserver, etcd, kube-controller-manager,kube-scheduler, kube-proxy와 kubelet, container runtime에 대해 알아보자

    (add-on component는 생략)

    $ kubectl get pod -n kube-system -o wide
    NAME                               READY   STATUS    RESTARTS        AGE   IP             NODE       NOMINATED NODE   READINESS GATES
    coredns-64897985d-kbd59            1/1     Running   12 (42s ago)    9d    172.17.0.3     minikube   <none>           <none>
    etcd-minikube                      1/1     Running   138 (31s ago)   9d    192.168.49.2   minikube   <none>           <none>
    kindnet-n5xzs                      1/1     Running   9 (36s ago)     19h   192.168.49.2   minikube   <none>           <none>
    kube-apiserver-minikube            1/1     Running   138 (37s ago)   9d    192.168.49.2   minikube   <none>           <none>
    kube-controller-manager-minikube   1/1     Running   138 (31s ago)   9d    192.168.49.2   minikube   <none>           <none>
    kube-proxy-rch8b                   1/1     Running   12 (31s ago)    9d    192.168.49.2   minikube   <none>           <none>
    kube-scheduler-minikube            1/1     Running   138 (31s ago)   9d    192.168.49.2   minikube   <none>           <none>
    storage-provisioner                1/1     Running   17 (35s ago)    9d    192.168.49.2   minikube   <none>           <none>

     

    Mater node (Control plane)

    클러스터를 관리하는 중요한 역할을 하기 때문에 High availability를 보장해야한다.

    클러스터의 상태를 유지/제어 하지만 애플리케이션을 직접적으로 실행하진 않는다.

    control plane의 component에 대해 알아보자

     

    kube-apiserver

    • kubernetes의 핵심 역할. 쿠버네티스 시스템은 apiserver만을 통해 통신 (컴포넌트는 서로 직접 통신하지 않는다)
    • etcd와 통신하는 유일한 컴포넌트
    • 구체적인 역할
      • 클러이언트 인증
      • 리소스 검증 및 저장 (kubelet 명령어 실행 시 문법 검증 등)
      • Admission Controllers 를 통해 요청 받은 리소스를 확인/수정

    kube-controller-manager

    • apiserver에서 받은 요청을 처리하는 역할을 한다.
    • 다양한 컨트롤러가 존재하고 컨트롤러는 API에 받아진 요청을 처리한다

    kube-scheduler

    • Pod를 어느 노드에 배치할지 결정하는 역할을 한다.
    • 노드의 상태를 확인하고 적절한 노드를 찾아 배치한다.
    • 여러 pods를 배치하는 경우 round-robin 분산한다.

    etcd

    • 클러스터의 모든 데이터를 저장하는 key-value 저장소
    • etcd의 데이터를 백업하는 계획은 필수
    • etcd를 잘 백업하면 장애가 발생하더라도 클러스터 복구 가능

    Worker node

    컨테이너화 된 애플리케이션을 실행하는 시스템입니다.

    pod을 어느 노드에 실행할지 선택하지 않는다면 kube-scheduler를 통해 적정한 worker node에 배치됩니다.

     

    kubelet

    • 클러스터에 각 노드에서 실행되는 에이전트
    • 다양한 PodSpec(yaml, json)으로 동작하게 하는 역할
    • kubelet은 쿠버네티스를 통해 생성되지 않은 관리 하지 않음

    kube-proxy

    • 각 노드마다 실행되는 network proxy
    • UDP와 TCP를 프록시한다
    • 쿠버네티스의 network 동작을 관리
    • LB를 제공하고 서비스에 접근하는 데에만 사용된다
    • 세 가지 프록시 모드 설명

    Container Runtime

    OCI와 CRI에 대한 포스트 2022.08.23 - [Kubernetes - 기초] - OCI와 CRI 도 같이 확인하자.

    • 컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어이다.
    • 쿠버네티스는 containerdCRI-O와 같은 컨테이너 런타임 및 모든 CRI 구현체를 지원한다

     

     

    이상.

Copyright 2022. 0woong-developer all rights reserved.