노드
쿠버네티스는 컨테이너를 파드 내에 배치, 노드에서 실행해 워크로드를 구동
노드는 클러스터에 따라 가상일수도 물리적 머신일 수도 있음.
각 노드는 컨트롤 플레인에 의해 관리되며 파드를 실행하는 데 필요한 서비스를 포함함.
일반적으로 클러스터에는 여러 노드가 있고, 환경에 따라 하나만 있을 수 있음
노드의 컴포넌트엔 kubelet, 컨테이너 런타임, kube-proxy가 있음
관리
API서버에 노드를 추가하는 방법
1. 노드의 kubelet으로 컨트롤 플레인에 자체 등록
2. 사용자가 노드 오브젝트를 수동으로 추가
노드 오브젝트 또는 노드의 kubelet으로 자체 증록한 후 컨트롤 플레인은 새 노드 오브젝트가 유효한지 확인
ex) JSON 매니페스트에서 노드를 만드려는 경우
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "10.240.79.157",
"labels": {
"name": "my-first-k8s-node"
}
}
}
쿠버네티스는 내부적으로 노드 오브젝트를 생성
kubelet이 노드의 metadata.name 필드와 일치하는 API 서버에 등록되어있는지 확인
정상이면 파드를 실행할 수 있지만 아니면 정상이 될때까지 모든 클러스터 활동이 무시됨
쿠버네티스는 유효하지 않은 오브젝트를 유지하고 정상적인지 확인하는데, 이를 중지하려면 사용자 또는 컨트롤러에서 노드 오브젝트를 명시적으로 삭제해야함.
이름은 반드시 유효한 DNS 서브 도메인 이름이어야 함.
이름은 노드를 식별하는 데 사용 -> 겹칠 수 없음
노드의 상태
- 주소
- 컨디션
- 용량과 할당가능
- 정보
kubectl describe node <insert-node-name-here>
위 명령어를 통해 노드 상태와 기타 세부 정보를 볼 수 있다.
주소
- HostName: 노드의 커널에 의해 알려진 호스트명이다. --hostname-override 파라미터를 통해 치환될 수 있다.
- ExternalIP: 일반적으로 노드의 IP 주소는 외부로 라우트 가능 (클러스터 외부에서 이용 가능) 하다 .
- InternalIP: 일반적으로 노드의 IP 주소는 클러스터 내에서만 라우트 가능하다.
컨디션
노드 컨디션 | 설명 |
Ready | 노드가 상태 양호하며 파드를 수용할 준비가 되어 있는 경우 True, 노드의 상태가 불량해 파드 수용 불가할 경우 False, 노드 컨트로럴가 마지막 node-monitor-grace-period (기본값 동안 노드 응답을 못받은 경우) Unknown |
DiskPressure | 디스크 사이즈 상에 압박이 있는 경우 -> 용량이 넉넉치 않을 경우 True |
MemoryPressure | 노드 메모리 상에 압박이 있는 경우 |
PIDPressure | 프로세스 상에 압박이 있는 경우 |
NetworkUnvailable | 노드에 대해 네트워크가 올바르게 구성되지 않은 경우 |
쿠버네티스 API에서 노드의 컨디션은 .status 부분에 표현됨.
다음의 경우 상태가 양호한 노드
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "10.240.79.157",
"labels": {
"name": "my-first-k8s-node"
}
}
}
용량과 할당 가능
노드 상에 사용 가능한 리소스를 나타냄.
리소스에는 CPU, 메모리 그리고 노드 상으로 스케줄 되어질 수 있는 최대 파드 수가 있다.
용량 블록의 필드는 노드에 있는 리소스의 총량을 나타낸다.
할당가능 블록은 일반 파드에서 사용할 수 있는 노드의 리소스 양을 나타낸다.
정보
커널 버전, 쿠버네티스 버전 (kubelet과 kube-proxy 버전), 컨테이너 런타임 상세 정보 및 노드가 사용하는 운영 체제가 무엇인지와 같은 노드에 대한 일반적인 정보가 기술됨.
kubelet이 노드에서 수집해 쿠버네티스 API로 전송함.
하트비트
쿠버네티스 노드가 보내는 하트비트는 클러스터가 개별 노드가 가용한지 판단할수 있도록 도움을 주고, 장애가 발견된 경우 조치할 수 있도록 함.
노드에는 두 가지 형태의 하트비트가 있음.
- 노드의 .status 업데이트
- kube-node-lease 네임스페이스 내의 리스(lease) 오브젝트. 각 노드는 연관된 리스 오브젝트를 가짐
리스는 노드 .status보다 경량의 리소스로 큰 규모의 클러스터에선 리스를 하트비트에 사용해 업데이트로 인한 성능 영향을 줄임.
노드 컨트롤러
노드의 다양한 측면을 관리하는 쿠버네티스 컨트롤 플레인 컴포넌트
- 노드의 등록 시점에 노드에 CIDR 블럭을 할당
- 노드 컨트롤러 내부 노드 리스트를 클라우드 제공사업자의 사용 가능한 머신 리스트 정보를 근거로 최신상태로 유지
클라우드 환경에서 동작 중일 경우, 노드 상태 불량시, 노드 컨트롤러는 해당 노드용 VM 이 여전히 사용가능한지에 대해 클라우드 제공사업자에게 물어봄. 사용 불가의 경우 노드 컨트롤러는 노드 리스트로부터 그 노드를 삭제
- 노드의 동작 상태를 모니터링
노드가 접근 불가능 상태가 되는 경우, 노드의 .status 필드의 Ready 컨디션을 업데이트. 이 경우 노드 컨트롤러가 Ready 컨디션을 Unknown으로 업데이트함
이 후, 노드가 계속 접근 불가능 상태로 남아있는 경우, 해당 노드의 모든 파트에 대해 API를 이용한 축출을 트리거. 기볹거으로, 노드 컨트롤러는 노드를 Unknown으로 마킹, 5분 후 최초의 축출 요청을 시작함.
리소스 용량 추적
노드 오브젝트는 노드 리소스 용량에 대한 정보: 예를 들어, 사용 가능한 메모리의 양과 CPU의 수를 추적한다.
노드의 자체 등록은 등록 중 용량을 보고, 수동으로 노드 투가할 경우 노드의 용량 정보를 설정해야 함.
'Cloud > Kubernates' 카테고리의 다른 글
[k8s, kubernates] 네임스페이스 (0) | 2024.07.09 |
---|---|
[k8s, kubernates] 파드 (0) | 2024.07.09 |
[k8s, kubernates] 오브젝트 (0) | 2024.07.09 |
[kubernates, k8s] 쿠버네티스 기본 개념, 구성요소 (0) | 2024.07.08 |
[kubernates, k8s] 쿠버네티스의 배경과 개념 (0) | 2024.07.08 |