ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • K8S 아키텍처 정리(ETCD, Kube-api server, Kube-controller-manager)
    K8S 2021. 6. 1. 12:52

    1. ETCD 

     

    ETCD는 안전하고 빠른 distributed reliable key-value store로 다음과 같은 RDB를 생각하면 된다. 

     

    ETCD는 기본적으로 2379번 포트를 이용하며 다음 커맨드를 통해 key value을 저장할 수 있다.

    ./etcdctl set key1 value1

     

    ETCD에서 값 반환하기 

    ./etcdctl get key1

     

     

     

    K8S에서  ETCD의 역할

     

    kubectl command에서 얻을 수 있는 모든 정보는 마스터 노드의 ETCD 서버로부터 얻는다.

     

    노드를 추가할 때, 포드를 배포할때, 레플리카 셋을 변경할때 등 상태가 변화할때 ETCD 서버에서 업데이트된다. 

     

    K8S 배포형태는 2가지의 타입이 있는데 scratch를 이용한 배포와 kubeadm이 있다. 

     

    scratch를 이용한 방법은 수동으로 ETCD서버를 다운 받아야 한다. 

     

    kubeadm을 이용하면 kube-system namespace에 pod 형태로 ETCD서버가 설치된다. 

     

    고가용성을 위해 multiple master node를 이용하기도 하며 이때

    각 마스터 노드의 ETCD 인스턴스는 파라미터를 통해 서로에 대해 인지한다. 

     

    다음은 ETCDCTL version 3의 command 

    etcdctl snapshot save 
    etcdctl endpoint health
    etcdctl get
    etcdctl put

     

     

     

    2. Kube-api server 

     

    - master node의 front. 

    - K8S의 primary management를 담당.  

     

    kubectl get nodes cmd가 입력되면 

    kube-api에서 user authenticate를 거친 후, request는 ETCD server로 전해진다.

     

    ETCD에서 key값을 조회하여 이를 retreive한 후, 값을 뿌려준다. 

     

     

     

    kube-api로 직접 request를 post를 함으로써 pod를 생성할 수도 있다. 

     

     

    요청을 보내면 다음과 같은 순서로 k8s 아키텍쳐 내에서 pod가 생성된다. 

     

    1) Authenticate user 

    2) Validate request

    3) Retreive data

    4) Update ETCD

    5) Scheduler

    스케줄러는 지속적으로 api server를 모니터링하고 있다가 

    노드에 할당되지 않은 새로운 포드가 있는지 확인하고, 이를 kube-api server에게 알려준다. 

    이후 api server는 ETCD의 정보를 업데이트하고 적당한 워커 노드의 kubelet에게 일을 시킨다.

    6) kubelet

    kubelet은 노드에 포드를 생성한다. 

    포드 생성이 끝나면 kubelet은 api server에게 status back을 해주고 

    api server는 ETCD cluster의 data를 update 해준다. 

     

    ※ ETCD는 kube-api server와만 통신한다. 

     

     

     

    3. Kube-controller-manager 

     

    컨트롤러 매니저는 쿠버네티스의 다양한 컨트롤러를 관리한다.

      

    여기서 컨트롤러란 시스템 안에서 다양한 컴포넌트들의 상태를 지속적으로 모니터링하는 프로세스로

    whole system을 desired한 state로 이끄는 일을 한다. 

     

     

    다양한 컨트롤러들은 패키지화되어 kubernetes controller manager라는 single process로 관리된다. 

     

     

     

    컨트롤러의 역할은 크게 Watch statusRemediate Situation로 나뉜다. 

     

    node-controller를 예시로 들어 살펴보자. 

     

    1) Watch Status

    node-controller는 5초마다 node의 상태를 모니터링한다.

     

    2) Remediate Situation

    node에 장애가 발생하고 40초 후에도 node가 unreachable하다면 

    node에 unreachable marking을 한다.  

     

    marking 후 5분 동안 come back할 시간을 주고,

    그럼에도 장애가 있다면 클러스터에서 노드를 제거한다.

     

     

     

    참고로 위에서 정의한 자잘한 configuation들은 kube-controller-manager를 설치할때 설정할 수 있으며 

     

     

    다음 경로에서도 확인할 수 있다. 

     

     

     

    반응형

    댓글

Designed by Tistory.