노드
- 쿠버네티스는 컨테이너를 파드내에 배치하고 노드에서 실행함으로 워크로드를 구동한다.
- 노드의 컴포넌트에는 kubelet, 컨테이너 런타임, kube-proxy가 있다.
관리
API 서버에 노드를 추가하는 두가지 방법
- 노드의 kubelet으로 컨트롤 플레인에 자체 등록
- 사용자가 노드 오브젝트를 수동으로 추가
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "10.240.79.157",
"labels": {
"name": "my-first-k8s-node"
}
}
}
- 쿠버네티스는 내부적으로 노드 오브젝트를 생성한다.
- kubelet이 노드의 metadata.name 필드와 일치하는지 API 서버에 등록 되어 있는지 확인한다.
- 노드가 정상이면 파드를 실행할 수 있게 된다. 정상이 아니라면 정상이 될 때까지 모든 클러스터 활동을 무시한다.
노드 이름 고유성
- 노드 오브젝트 이름은 유효한 DNS 서브 도메인 이름이어야 한다.
- 두 도느는 동시에 같은 이름을 가질 수 없다. -> 쿠버네티스는 같은 이름의 리소스가 동일한 객체라고 판단.
- 노드의 경우 동일한 이름을 사용하는 인스턴스가 동일한 상태와 노드 레이블과 같은 동일한 속성을 갖는다고 가정.
노드에 대한 자체-등록(self-registration)
- kubelet 플래그 --register-node가 참일 경우, kubelet은 API 서버에 스스로 등록을 시도한다.
자체 등록에 대해, kubelet은 다음 옵션과 함께 시작된다.
- --kubeconfig: apiserver에 스스로 인증하기 위한 자격증명에 대한 경로.
- --cloud-provider: 자신에 대한 메타데이터를 읽기 위해 어떻게 클라우드 제공자와 소통할지에 대한 방법.
- --register-node: 자동으로 api 서버에 등록.
- --register-with-taints: 주어진 taint 리스트를 가진 노드 등록, register-node가 거짓이면 동작하지 않음.
- --node-ip: 노드의 ip 주소.
- --node-labels: 클러스터에 노드를 등록할 때 추가 할 레이블.
- --node-status-update-frequency: 얼마나 자주 kubelet이 API 서버에 해당 노드 상태를 게시할 지 정의.
수동 노드 관리
- kubectl를 사용해서 노드 오브젝트를 생성하고 수정할 수 있다.
- 노드 오브젝트를 수동으로 생성하려면 kubelet 플래그를 --register-node=false로 설정한다.
노드의 상태
노드의 상태는 주소, 컨디션, 용량과 할당가능, 정보를 포함한다.
노드의 상태와 기타 세부 정보 보기
kubectl describe node <insert-node-name-here>
주소
이 필드 용법은 클라우드 제공 사업자, 베어메탈 구성에 따라 다양하다.
- HostName: 노드의 커널에 의해 알려진 호스트명이다.
- ExternalIp: 일반적으로 노드의 IP 주소는 외부로 라우트 가능하다.
- InternalIp: 일반적으로 노드의 IP 주소는 클러스터 내에서만 라우트 가능하다.
컨디션
- conditions 필드는 모든 Running 노드의 상태를 기술한다.
쿠버네티스 API에서 노드의 컨디션은 노드 리소스의 .status 부분에 표현된다.
"conditions": [
{
"type": "Ready",
"status": "True",
"reason": "KubeletReady",
"message": "kubelet is posting ready status",
"lastHeartbeatTime": "2019-06-05T18:38:35Z",
"lastTransitionTime": "2019-06-05T11:41:27Z"
}
]
하트비트
- 쿠버네티스 노드가 보내는 하트비트는 클러스터가 개별 노드가 가용한지를 판단할 수 있도록 도움을 주고, 장애가 발견된 경우 조치를 할 수 있게 한다.
노드에는 두 가지 형태의 하트비트가 있다.
- 노드의 .status에 대한 업데이트
- kube-node-lease 네임스페이스 내의 리스 오브젝트
노드의 .status에 비하면 리스는 경량의 리소스이다. 큰 규모의 클러스터에서 리스를 하트비트에 사용하여 업데이트로 인한 성능 영향을 줄일 수 있다.
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] EmptyDir Volume (0) | 2024.07.15 |
---|---|
[kubernetes] PV, PVC란? (0) | 2024.07.15 |
[kubernetes] Pod 외부 접속 연결하기 (0) | 2024.07.09 |
[kubernetes] Deployment란? (0) | 2024.07.08 |
[kubernetes] ReplicaSet이란? (0) | 2024.07.03 |