상세 컨텐츠

본문 제목

클러스터 아키턱처

카테고리 없음

by MustThanks 2022. 9. 14. 18:42

본문

반응형

클러스터 아키턱처.rtf
0.01MB

클러스터 아키턱처

노드

쿠버네티스는 컨테이너를 파드내에 배치하고 노드에서 실행함으로 워크로드를 구동한다. 노드는 클러스터에 따라 가상 또는 물리적 머신일 수 있다. 각 노드는 컨트롤 플레인에 의해 관리되며 파드를 실행하는데 필요한 서비스를 포함한다.

일반적으로 클러스터에는 여러개의 노드가 있으며 학습 또는 리소스가 제한되는 환경에서는 하나만 있을 수도 있다.

 

노드의 컴포넌트에느 kubelet ,  컨테이너 runtime 그리고 kube-proxy가 포함된다.

 

관리

 API서버에 노드를 추가하는 두가지 주요 방법이 있다.

   * 노드의 kubelet으로 컨트롤 플레인에 자체 등록

   * 사용자(또는 다른 사용자)가 노드 오브젝트를 수동으로 추가

노드 오브젝트 또는 노드의 kubelet으로 자체 등록한 후 컨트롤 플레인은 새 노드 오브젝트가 유효한지 확인한다.

다음의 예제는 josn 매니패스트에서 노드를 만들려는 경우이다.

{

  "kind" : "Node",

  "apiVersion" : "v1",

  "metadata" : {

       "name" : "10.240.79.157",

       "labels" : {

           "name" : "my-first-k8s-node"

       }

   }

}

쿠버네티스는 내부적으로 노드 오브젝트를 생성(표시)한다. 쿠버네티스는 kubelet이 노드의 metadata.name 필드와 일치하는 API서버에 등록이 되어 있는지 확인한다.

노드가 정상이면(예를 들어 필요한 모든 서비스가 실행중인 경우) 파드르 실행할 수 있게된다. 서비스가 실행중이 아니면 해당 노드는 정상이 될 때 까지 모든 클러스터 활동에 대해 무시된다.

참고 : 쿠버네티스는 유효하지 않은 노드 오브젝트를 유지하고, 노드가 정상적인지 확인한다

        상태 확인을 중지하려면 사용자 또는 컨트롤러에서 노드 오브젝트를 명시적으로 삭제해야한다.

 

노드 오브젝트의 이름은 유효한 DNS 서브 도메인 이름이어야 한다.

 

노드이름 고유성

 이름은 노드를 식별한다 두 노드는 동시에 같은 이름을 가질 수 없다. 쿠버네티스는 또한 같은 이름의 리소스가 동일한 객체라고 가정한다. 노드의 경우 동일한 이름을 사용하는 인스턴스가 동일한 상태( 예 네트워크 설정, 루트 디스크 내용)와 노드 레이블과 같은 동일한 속성(attribute)을 갖는다고 암시적으로 가정한다. 인스턴스가 이름을 변경하지 않고 수정된 경우 이로 인해 불일치가 발생할 수 있다, 노드를 대폭 교체하거나 업데이트해야 하는 경우 기존 노드 오브젝트를 먼저 API서버에사 제거하고 업데이트 후 다시 추가해야 한다.

 

노드에 대한 자체-등록(self-registration)

kubelet 플레그 --register-node가 참(기본값)일 경우, kubelet API 서버에 스스로 등록을 시도할 것이다 이는 선호되는 패턴이며 대부분의 배포판에서 사용된다.

저체-등록에 대해 kubelet은 다음 옵션과 함께 시작된다.

 * --kubeconfig : -apiserver에 스스로 인증하기 위한 자경증명에 대한 경로

 * --cloud-provider : -자신에 대한 메타데이터를 읽기 위해 어떻게 클라우드 제공자와 소통할지에 대한 방법

* --register-node : - 자동으로 API 서버에 등록

*--register-with-taints : - 주어진 테인트(taint) –더러움- 리스트 (콤마로 분리된 <key>=<value>:<effect>)를 가진 노드 등록

                            - register-node 가 거짓이면 동작 안함

* --node-ip 노드의 IP 주소

* --node-labels : - 클러스터에 노드를 등록할 때 추가 할 레이블 (NodeRestriction admission plugin 의해 적용되는 레이블 제한 사항 참고).

* --node-status-update-frequency : - 얼마나 자주 kubeletAPI서버에 해당 노드 상태를 게시할 지를 정의

Node authorization mode NodeRestriction admission plugin 활성화 되면, kubelet 자신이 속한 노드의 리소스에 대해서만 생성/수정할 권한을 가진다

 

참고 :

-       노드 이름 고유성 섹션에서 언급했듯이 노드 구성을 업데이트해야 하는 경우 API서버에 노드를 다시 등록하는 것이 좋다 예를 들어 kubelet –node-labels  새로운 구성으로 다시 시작되더라도 동일한 노드 이름이 사용된 경우 레이블이 해당 노드의 등록에 설정되기 때문에 변경 사항이 적용되지 않는다

-       노드에 이키 스케줄된 파드는 해당 노드 구서ㅕㅇ이 kubelet 재시작에 의해 변경된 경우 오동작하거나 문제를 일으킬 있다. 예를 들면 실행중인 파드가 노드에 할당된 레이블 레이블에 대해 테인트(taint) 있는 반면 해당 파드와 호환되지 않는 다른 파드는 레입믈으 기반으로 스케줄링된다. 노드 재등록(re-registration) 모든 파드를 비우고(drain) 다시 적절하게 스케줄링되도록 한다

댓글 영역