CKAD 를 준비하는 선에서 과정에서 정리한 내용으로, 실제로 쿠버네티스에서 로깅과 모니터링과 관련된 내용은 훨씬 더 방대할 수 있습니다.
Monitoring 쿠버네티스의 클러스터를 모니터링하고자 한다면, 주로 다음과 같은 데이터를 보고자 함일 것이다. Node 별 리소스 사용 현황 Node 별 Pod의 갯수 Pod 별 리소스 사용 현황 etc … 쿠버네티스는 빌트인 모니터링 기능을 제공하고 있지 않지만, 여러가지 툴이 존재함. Metrics Server Prometheus Elastic Stack Data Dog dynatrace etc … Metrics Server (모니터링 툴 예시) 하나의 클러스터를 기준으로 작동함....
Node Selector와 Node Affinity는 Pod에 제한을 걸어 특정 노드에만 스케줄링 될 수 있도록 하는 설정임
예시)
만일 클러스터 중에 하나의 노드에 GPU가 장착이 되어 있다면 딥러닝 훈련 Pod는 해당 노드에 스케줄링되어 구동되도록 함 NodeSelector 간단하고, 가볍게 하나의 Pod에 적용시킬 수 있는 설정 Node에 레이블 적용하기
kubectl label nodes <node-name> <label-key>=<label-value> 예시) kubectl label nodes node01 size=Large Pod에도 <label-value> 명시하기. Node에 적용된 Label 과 매칭되어 스케줄링 됨....
Taints and Tolerance 특정 노드에 파드의 무작위 스케줄링을 제한하고, 특정 유형의 파드의 스케줄링만 허용할 때 사용되는 설정 노드를 taint (오염) 시켜서 파드가 접근하지 못 하게 한 후, 노드에 적용된 taint에 대한 tolerance(내성) 을 가진 파드만 스케줄링 된다는 개념 Node에 Taint 적용하기 kubectl taint nodes <node-name> <key>=<value>:<taint-effect> 예시)
# node1에 taint 적용 kubectl taint nodes node1 app=blue:NoSchedule # taint 제거 kubectl taint nodes node1 app=blue:NoSchedule- taint-effect 의 유형 NoSchedule - 포드가 스케쥴되지 않음 PreferNoSchedule - 해당 노드는 피하지만 보장된 것은 아님 NoExecute - 파드가 스케쥴되지 않으며, 현재 존재하는 파드도 tolerant가 없다면 제외함....
쿠버네티스 상에서의 자원 할당 쿠버네티스에서 Pod가 구동되기 위해서는 스케줄링 된 노드 내 가용할 수 있는 리소스를 사용한다.
kube-schduler 는 Pod가 필요로 하는 자원을 어느 노드에서 구동시킬 지 결정함. 만일 모든 노드에서 Pod를 구동시킬 수 있는 자원이 충분히 남아있지 않을 경우 스케줄러는 Pod를 할당하지 않고 스케줄링을 멈춤. Pod를 Pending State 이 됨. STATUS=pending 표기가 되며, Event 에도 Insufficient resource로 표기됨 Resource Requirements Resource Requirements 는 Pod를 구동시키기 위해 필요한 최소 자원을 명시하는 것....