본문 바로가기

DevOps/쿠버네티스(Kubernetes)

[CKA] Kubernetes kubelet / Kube-Proxy

Kubernetes  kubelet

 

kubelet 배의 선장과 같다. kubelet은 배 위에서 모든 활동을 지휘한다.
kubelet은 클러스터의 일부가 되기 위해 필요한 모든 서류 작업을 책임지는 사람들이다. kubelet은 마스터 선박의 유일한 연락 지점이다.
마스터에서 스케줄러의 지시에 따라 선박에 컨테이너를 적재하거나 하역한다.kubelet은 또한 정기적으로 배와 컨테이너의 상태에 대한 보고서를 보낸다.

 

1. Register Node

2. Create PODs

3. Monitor Node & PODs

 

kubernetes worker 노드의 kubelet은 kubernetes 클러스터에 노드를 등록한다. 노드에서 컨테이너 또는 Pod를 적재하라는 지시를 받으면 컨테이너 런타임 엔진(ex)Docker)을 요청하여 필요한 이미지를 가져오고 인스턴스를 실행한다. 그런 다음 kubelet은 Pod 및 Pod에 포함된 컨테이너의 상태를 계속 모니터링하고 kube-apiserver에 적시에 보고한다.

그럼 큐블렛은 어떻게 설치할까? kubeadm 도구를 사용하여 클러스터를 배포하는 경우 클러스터는 자동으로 kubelet을 배포하지 않는다.
이것이 다른 구성 요소와의 차이점이다.

 

$ wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kubelet
    ExecStart=/usr/local/bin/kubelet \\
        --config=/var/lib/kubelet/kubelet-config.yaml \\
        --container-runtime=remote \\
        --container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \\
        --image-pull-progress-deadline=2m \\
        --kubeconfig=/var/lib/kubelet/kubeconfig \\
        --network-plugin=cni \\
        --register-node=true \\
        --v=2

 

항상 Worker Node 에 kubelet을 수동으로 설치해야 한다. 설치 프로그램을 다운로드하여 압축을 풀고 서비스로 실행한다.

 

$ ps -aux | grep kubelet
    root 2095 1.8 2.4 960676 98788 ? Ssl 02:32 0:36 /usr/bin/kubelet --bootstrapkubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --
    config=/var/lib/kubelet/config.yaml --cgroup-driver=cgroupfs --cni-bin-dir=/opt/cni/bin --cniconf-dir=/etc/cni/net.d --network-plugin=cni


Worker Node 에 프로세스를 나열하고 kubelet을 검색하여 실행 중인 kubelet 프로세스와 유효한 옵션을 볼 수 있다.


 

 


Kubernetes  Kube-Proxy

 

Kubernetes 내에서 모든 Pod는 다른 모든 Pod에 도달할 수 있다.
이 작업은 Pod 네트워킹 솔루션을 클러스터에 배포함으로써 수행된다. Pod 네트워크는 모든 Pod가 연결되는 클러스터의 모든 노드에 걸쳐 있는 내부 가상 네트워크이다. 이 네트워크를 통해 서로 통신할 수 있다. 이러한 네트워크를 배포하는 데 사용할 수 있는 많은 솔루션이 있다. 

첫 번째 노드에 웹 애플리케이션을 배포하고 두 번째 노드에 데이터베이스 애플리케이션을 배포한다. Web App 은 데이터베이스 Pod의 IP를 사용하여 간단하게 데이터베이스에 연결 가능하다. 그러나 데이터베이스 부분의 IP가 항상 동일하게 유지된다는 보장은 없다.
Web Application Program이 데이터베이스에 액세스하는 더 나은 방법은 서비스를 사용하는 것이다. 따라서 클러스터 전체에 데이터베이스 애플리케이션을 노출하는 서비스를 만든다. 웹 앱 프로그램은 이제 서비스 db의 이름을 사용하여 데이터베이스에 액세스할 수 있다.
또한 포드가 데이터베이스의 IP 또는 이름을 사용하여 서비스에 연결하려고 할 때마다 IP 주소가 할당되어 트래픽을 백엔드 포드로 전달한다. 

그런데 이 서비스는 무엇이며 IP는 어떻게 얻을 수 있을까? 서비스가 동일한 POD 네트워크에 들어갈까?
서비스가 실제 서비스가 아니므로 포드 네트워크에 참여 할 수 없다. Pod와 같은 컨테이너가 아니어서 인터페이스가 없거나 활성화 되어있는 수신하는 프로세스가 없다. kubernetes안에 메모리로만 존재하는 가상 구성 요소이다. 그러나 우리는 또한 클러스터 전체에서 서비스에 액세스할 수 있어야 한다고 말한다. 그러면 어떻게 그것이 달성될까?

거기서 Kube-proxy가 생겨났다.
Kube-proxy는 Kubernetes 클러스터의 각 노드에서 실행되는 프로세스이다. Kube-proxy의 역할은 새로운 서비스를 찾는 것이고 새로운 서비스가 만들어질 때마다 그것은 적절한 서비스를 만든다. 각 노드의 규칙을 적용하여 해당 서비스 대한 트래픽을 백엔드 Pod 로 전달한다.
이를 수행하는 한 가지 방법은 IPTABLES 규칙을 사용하는 것이다. 이 경우 Kube-proxy가 서비스를 구성하는 방법은 클러스터의 각 노드에 IP 테이블 규칙을 생성하여 서비스의 IP(10.96.0.12)로 향하는 트래픽을 실제 포드의 IP(10.32.0.15)로 전달한다.

 

 


kube-proxy 설치 방법

$ wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-proxy
    ExecStart=/usr/local/bin/kube-proxy \\
        --config=/var/lib/kube-proxy/kube-proxy-config.yaml
    Restart=on-failure
    RestartSec=5

 

kubernetes 릴리스 페이지에서 kube-proxy 바이너리를  설치 프로그램을 다운로드하여 압축을 풀고 서비스로 실행한다.

 

$ kubectl get pods -n kube-system
    NAMESPACE   NAME            READY STATUS RESTARTS AGE
    kube-system kube-proxy-lzt6f 1/1 Running   0      16m
    kube-system kube-proxy-zm5qd 1/1 Running   0      16m

 

Kubeadm 도구는 각 노드에 kube-proxy 를 Pod로 배포한다.

 

$ kubectl get daemonset -n kube-system
    NAME      DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR                 AGE
    kube-proxy   2       2      2     2         2        beta.kubernetes.io/arch=amd64 1h

실제로 Demonset으로 배포되므로 클러스터의 각 노드에는 항상 단일 Pod가 배포된다.


 

 

 

 

 

출처:

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/learn/lecture/14298432#content

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/learn/lecture/14298434#content

'DevOps > 쿠버네티스(Kubernetes)' 카테고리의 다른 글

[CKA] Kubernetes Pod 와 YAML 파일  (0) 2022.09.03
[CKA] Kubernetes Pod  (0) 2022.09.03
[CKA] Kubernetes Scheduler  (0) 2022.09.03
[CKA] Kube Controller-Manager  (0) 2022.09.03
[CKA] Kubernetes Kube-API Server  (0) 2022.09.03