backend/kubernetes docs

Kubernetes docs: Cluster Architecture - Node

seul chan 2020. 5. 17. 19:32

Cluster Architecture

Node

하나의 노드는 Kubernetes에서 하나의 워커 머신이다. (이전에는 minion으로 불림)

  • 노드는 클러스터에 따라 VM 또는 물리 머신이 될 수 있음

Node status

노드의 상태는 주소, 컨디션, 용량과 할당가능, 정보 등을 포함한다.

kubectl escribe node <node_name>

주소

제공 사업자 또는 구성에 따라 다양한 용법이 쓰임

  • HostName: 노드 커널에 알려진 호스트명. --hostname-override로 override 가능
  • ExternalIP: 클러스터 외부로 라우트 가능
  • InternalIP: 클러스터 내부에서만 라우트 가능

컨디션

모든 Running중인 노드의 상태를 기술. Node condition에는 다음 종류 등이 있음

  • Ready: 상태가 양호하고 pod 수용 준비가 되어있으면 True
  • MemoryPress: True/False
  • PIDPress: True/False
  • DiskPressure: True/False
  • NetworkUnavailable: True/False

1.5 이전의 Kubernetes 버전에서는 노드 컨트롤러가 apiserver로부터 접근 불가한 파드를 강제 삭제시킨다. 1.5 이상에서는 Terminating 혹은 Unknow 상태로 있어서 직접 삭제해야 할 수도 있음

용량과 할당 가능

노드 상에서 사용 가능한 리소스. (CPU, Memory, 스케쥴 가능한 최대 pod 수)

정보

커널 버전, Kubernetes version (kubelet, kube-proxy), Docker version, OS name 등

관리

pod나 service와 달리 노드는 보통 Kubernetes에 의해 생성되지 않는다. Cloud 제공 사업자(google compute engine 등)에 의해 생성되거나 물리/가상 머신의 풀에서 존재한다.

그래서 Kubernetes에서 노드를 생성하면 노드를 가리키는 object를 생성한다. 이후 이 노드의 유효성 여부를 검사한다.

{
  "kind": "Node",
  "apiVersion": "v1",
  "metadata": {
    "name": "10.240.79.157",
    "labels": {
      "name": "my-first-k8s-node"
    }
  }
}

위의 내용으로 노드를 생성한다고 가정해보자.

  • kubernetes는 내부적으로 이를 node object를 생성
  • metadata.name 필드를 통해 상태 체크를 하여 노드의 유효성을 확인

노드 컨트롤러

현재 kubernetes node interface와 상호작용하는 컴포넌트는 3개가 있다: Node controller, kubelet, kubectl

Node controller의 역할

  • 등록 시점에 CIDR 할당을 사용하게 설정된 경우 노드에 CIDR 블럭을 할당
  • 노드 컨트롤러의 내부 노드 리스트를 최신상태로 유지 (cloud 제공사업자의 머신 리스트 정보를 근거로)
  • 노드의 동작 상태를 모니터링