Fairy ' s

[K8s] Kube Scheduler & Kublet & Kube Proxy 본문

Study/K8s

[K8s] Kube Scheduler & Kublet & Kube Proxy

berafairy 2023. 7. 12. 15:17

 

Kube Scheduler 

 특정 기준에 따라 노드에서 어떤 파드가 어떤 노드로 가야하는지 결정하는 것만 하며, 실제로 파드를 노드에 배치하지는 않는다. (파드를 노드에 배치하는 작업은 kubelet이 하며, kubelet은 배에 파드를 만든다.)

 예를 들어, 파드가 'CPU: 10'이라는 요구사항이 있을 때, 스케줄러는 다음 단계를 거친다.

  • 파드에 가장 적합한 노드 식별. 파드 프로필에 맞지 않는 노드(CPU가 충분하지 않은 노드) 등 필터링을 시도한다.
  • 노드의 순위를 매긴다. 우선순위 함수를 사용해 0에서 10까지의 점수를 할당한다.
  • 예를 들어, 노드의 프리한 리소스 양을 계산하고, 파드를 프리 리소스가 더 많은 노드에 배치한다.

위의 예가 대략적으로 작동하는 방식이며, 스케줄을 커스터마이징하여 자신만의 스케줄러를 만들 수도 있다. 


Install Kube Scheduler 

wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-scheduler
# view kube scheduler set up with kubeadm
kubectl get pods -n kube-system

# view kube scheduler options set up with kubeadm
cat /etc/kubernetes/manifest/kube-scheduler.yaml

# view kube scheduler options Manual
cat /etc/systemd/system/kube-scheduler.service

# view running process effective options
ps -aux | grep kube-scheduler

Kubelet

  • 마스터쉽과 유일한 접점으로, 마스터의 스케줄러가 지시한 대로 kubelet은 컨테이너를 배에 싣거나 내리기도 한다.
  • 정기적으로 선박 및 컨테이너의 상태에 대한 보고서를 보낸다.
  • 쿠버네티스 Worker Nodes에 있는 kubelet은 쿠버네티스 클러스터에 노드를 등록하며, 이때 필요한 모든 서류 작업을 담당하기도 한다.
  • 노드의 컨테이너 또는 파드를 load하라는 명령을 받을 시, 도커와 같은 Container Runtime Engine에게 필요한 이미지를 pull해 달라고 요청하고, 인스턴스를 실행한다.
  • kubelet은 파드와 파드 안의 컨테이너들의 상태를 계속 모니터링하고, kube-api server에 필요 시 보고한다.

Install Kubelet

wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kubelet
# view running process effective options
ps -aux | grep kubelet

Kube Proxy

 쿠버네티스 클러스터 내에서 모든 파드는 다른 파드와 소통할 수 있는데, 이는 클러스터에 대한 파드 네트워킹 솔루션 배포를 통해 수행된다. 파드 네트워크는 클러스터의 모든 노드에 걸쳐져 있고, 모든 파드에 연결되어 있는 internal virtual network이다. 이 네트워크를 통해 파드들은 서로 소통할 수 있다. 

 예를 들어, 첫 번째 노드에 web 애플리케이션이 하나 있고, 두 번째 노드에 DB 애플리케이션이 있을 때, Web 앱은 파드의 IP를 사용해 간단하게 DB에 접근할 수 있다. 그러나 DB 파드 IP가 항상 동일하다는 보장은 되지 않는다. Web 앱이 DB에 접근하는 더 나은 방법은 서비스를 사용하는 것이다. 이 서비스는 클러스터 전체에 DB를 노출하는 서비스를 만들고, 서비스 이름인 DB를 사용해 DB에 접근할 수 있다. 서비스는 IP 주소도 할당받기 때문에, 파드가 서비스 IP나 서비스 이름을 사용해 서비스에 접근할 때마다 서비스는 트래픽을 백엔드 파드(DB)로 전달한다.

 이러한 서비스는 컨테이너도 아니고, 인터페이스도, listening 프로세스도 없는 쿠버네티스 메모리에서 그저 살아있는 가상 컴포넌트이다. 그러나 클러스터의 모든 노드에서 서비스에 접근할 수 있어야 하는데, 그러한 것이 보장된 것이 kube-proxy이다.

kube-proxy는 쿠버네티스 클러스터의 각 노드에서 실행되는 프로세스이다. 새로운 서비스를 찾고, 새로운 서비스가 생성될 때마다 각 노드에 해당 서비스에 대한 트래픽을 백엔드 파드로 전달하기 위한 적절한 규칙을 생성한다.

IP tables 규칙 : kube-proxy는 클러스터의 각 노드에서 서비스 IP로 향하는 트래픽을 전달하기 위해 IP tables 규칙을 생성하는데, 이 규칙은 실제 파드 IP를 서비스 IP로 변경하여 서비스를 구성한다.


Install kube-proxy

wget httsp://storage.googleapics.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-proxy

 

'Study > K8s' 카테고리의 다른 글

[K8s] Replication controller & ReplicaSets  (0) 2023.08.05
[K8s] Pods  (0) 2023.07.28
[K8s] CLI  (0) 2023.07.12
[K8s] Kube Controller Manager & Kube API Server  (0) 2023.07.12
[K8s] ETCD  (0) 2023.07.11
Comments