노드의 확장 리소스 광고하기
노드의 확장 리소스 광고하기 (Advertise Extended Resources for a Node)
이 페이지는 노드(Node)에 대한 확장 리소스(extended resource)를 지정하는 방법을 보여줘요. 확장 리소스를 사용하면 클러스터 관리자가 쿠버네티스가 모르는 노드 수준 리소스를 알릴 수 있어요.
출처: 문서
본문
시작하기 전에 (Before you begin)
노드 이름 얻기
kubectl get nodes
이 실습에 사용할 노드 하나를 선택해요.
노드 중 하나에 새 확장 리소스 광고하기
노드에 새 확장 리소스를 광고하려면 쿠버네티스 API 서버에 HTTP PATCH 요청을 보내요. 예를 들어 노드 중 하나에 dongle이 네 개 붙어 있다고 가정해 봐요. 다음은 그 노드에 dongle 리소스 4개를 광고하는 PATCH 요청 예시예요.
PATCH /api/v1/nodes/<your-node-name>/status HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
Host: k8s-master:8080
[
{
"op": "add",
"path": "/status/capacity/example.com~1dongle",
"value": "4"
}
]
쿠버네티스는 dongle이 무엇인지, dongle이 무엇을 하는지 알 필요가 없어요. 위 PATCH 요청은 쿠버네티스에 "이 노드에는 dongle이라고 부르는 것이 네 개 있다"고 알려줘요.
쿠버네티스 API 서버에 쉽게 요청을 보내도록 프록시를 시작합니다:
kubectl proxy
다른 명령 창에서 HTTP PATCH 요청을 보냅니다. <your-node-name> 을 노드 이름으로 바꿔요:
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "add", "path": "/status/capacity/example.com~1dongle", "value": "4"}]' \
http://localhost:8001/api/v1/nodes/<your-node-name>/status
참고:
출력은 노드에 dongle 용량이 4개 있음을 보여줘요:
"capacity": {
"cpu": "2",
"memory": "2049008Ki",
"example.com/dongle": "4",
}
노드를 설명합니다:
kubectl describe node <your-node-name>
다시 한 번 출력이 dongle 리소스를 보여줘요:
Capacity:
cpu: 2
memory: 2049008Ki
example.com/dongle: 4
이제 애플리케이션 개발자는 특정 수의 dongle을 요청하는 파드를 만들 수 있어요. 컨테이너에 확장 리소스 할당하기를 참고해요.
논의 (Discussion)
확장 리소스는 메모리·CPU 리소스와 비슷해요. 예를 들어 노드가 그 위에서 실행되는 모든 컴포넌트가 공유할 특정 양의 메모리와 CPU를 갖듯이, 노드가 그 위에서 실행되는 모든 컴포넌트가 공유할 특정 수의 dongle을 가질 수 있어요. 그리고 애플리케이션 개발자가 특정 양의 메모리와 CPU를 요청하는 파드를 만들 수 있듯이, 특정 수의 dongle을 요청하는 파드를 만들 수 있어요.
확장 리소스는 쿠버네티스에 불투명(opaque)해요. 쿠버네티스는 그것이 무엇인지 아무것도 알지 못해요. 쿠버네티스는 노드에 특정 수가 있다는 것만 알아요. 확장 리소스는 정수 양으로 광고되어야 해요. 예를 들어 노드는 dongle 4개를 광고할 수 있지만 4.5개는 광고할 수 없어요.
스토리지 예시 (Storage example)
노드에 특별한 종류의 디스크 저장 공간 800GiB가 있다고 가정해 봐요. 특별 저장 공간에 example.com/special-storage 같은 이름을 만들 수 있어요. 그런 다음 특정 크기(예: 100GiB) 단위로 광고할 수 있어요. 이 경우 노드가 example.com/special-storage 유형의 리소스 8개가 있다고 광고하게 돼요.
Capacity:
...
example.com/special-storage: 8
특수 저장 공간에 대한 임의 요청을 허용하고 싶다면, 특수 저장 공간을 1바이트 단위로 광고할 수 있어요. 이 경우 example.com/special-storage 유형의 800Gi 리소스를 광고하게 돼요.
Capacity:
...
example.com/special-storage: 800Gi
그러면 컨테이너는 800Gi까지 특수 저장 공간의 원하는 바이트 수를 요청할 수 있어요.
정리 (Clean up)
다음은 노드에서 dongle 광고를 제거하는 PATCH 요청이에요.
PATCH /api/v1/nodes/<your-node-name>/status HTTP/1.1
Accept: application/json
Content-Type: application/json-patch+json
Host: k8s-master:8080
[
{
"op": "remove",
"path": "/status/capacity/example.com~1dongle",
}
]
프록시를 시작합니다:
kubectl proxy
다른 명령 창에서 HTTP PATCH 요청을 보냅니다. <your-node-name> 을 노드 이름으로 바꿔요:
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "remove", "path": "/status/capacity/example.com~1dongle"}]' \
http://localhost:8001/api/v1/nodes/<your-node-name>/status
dongle 광고가 제거됐는지 확인합니다:
kubectl describe node <your-node-name> | grep dongle
(출력이 없어야 해요)