[워밍업 클럽: 쿠버네티스] 컴포넌트를 동작으로 이해하기 (2주차)

[워밍업 클럽: 쿠버네티스] 컴포넌트를 동작으로 이해하기 (2주차)

지금껏 쿠버네티스에 대해 많은 내용들을 학습해왔다.

쿠버네티스 공식 문서를 보면서 쿠버네티스 설치를 위한 VM 환경 구성, 각종 노드 설치 및 리소스 구성 등등 많은 것들을 배웠고, 이번 시간에 되짚어보면서 흐름을 정리해보려고 한다.

또한 내 VM 환경에 이러한 파일들을 어떻게 확인하는지 프롬프트 실행코드를 통해 확인하는 과정까지 해보겠다.

 

VM 환경

우선 쿠버네티스를 우리는 실제 내 PC 상 폴더가 아닌, 리눅스 기반 VM 환경을 구성하고,

해당 VM 위에 마스터 노드 환경에서, 쿠버네티스 관련 패키지들을 설치했다.

대표적으로 kubectl (cluster와 통신하기 위한 커맨드 라인), kubeadm (클러스터 구성환경을 설치하기 위한 패키지),

kubelet (), containerD(컨테이너 런타임의 일종으로, 컨테이너를 파드에서 생성, 실행) 등이 있다!

 

kubeadm

이 패키지는 kube-system을 기반하는 Pod를 생성해준다.

Pod들을 생성해주는 yaml 파일들을 통해 생성을 하게 해주고, 실습간에 사용된 yaml 파일을 아래에 있다.

[root@k8s-master ~]# ls /etc/kubernetes/manifests/

image모두 쿠버네티스가 돌아가기 위해 필요한 컴포넌트이고, 이를 Control Plane Component라 한다.

 

kube-system 에 해당 컴포넌트들이 들어가며, 아래 코드로 모두 확인 가능하다.

[root@k8s-master ~]# kubectl get pods -n kube-system

imageex. etcd, kube-apiserver, kube-controller-manager, kube-scheduler 등등 실행되고 있으며,

추가로 coredns, metrics-server 같은 쿠버네티스 기본 기능을 확장하기 위한 Addon Pod도 설치되어 있다.

 

다른 VM으로 여러 대의 Worker Node를 만들 수 있고, (Master Node x)

이를 마스터 노드에 연결하면 Worker Node Component 공간이 생기게 된다.

이 워커노드 공간에는 kube-proxy 컴포넌트가 설치되며, 사용자가 만든 App을 올린다.

마스터 노드 공간과 워커 노드 공간을 구분해서 워커노드에 어플리케이션을 설치하고, 마스터노드가 워커노드를 관리한다.

 

kubectl

kubectl은 인증서를 사용해서 쿠버네티스 오브젝트와 API 통신을 할 수 있다.

image이 인증서는 admin.conf 이고, /root/.kube/config에 동일하게 있다.

imageimage

이 인증서를 이용하여 kube-apiserver 와 API 통신을 할 수 있고, 쿠버네티스에서 사용되는 각종 Object 들을 etcd에 저장한다.

image

kubelet

(1) 컨테이너 런타임과 연동

kubelet은 쿠버네티스 컴포넌트들과 통신하면서 컨테이너 런타임에 컨테이너를 생성하라는 요청을 날린다.

kube-scheduler 컴포넌트는 노드들에 대한 자원을 kube-apiserver를 통해 모니터링을 하고 있다가,

데이터베이스에 Pod가 있는 것을 확인한 이후 파드를 올릴 노드를 스케쥴링한다.

kubelet은 자신의 노드 정보가 있는 Pod를 모니터링 한 뒤 해당 파드를 발견하면 containerD에 컨테이너 생성을 요청한다.

컨테이너를 만들게 되면 kubelet은 Probe 설정에 맞게 컨테이너로 헬스체크 API를 주기적으로 날린다.

 

또한 kubelet은 컨테이너의 자원 사용량을 주기적으로 조회한다(CPU, Memory).

HPA에서 metrics를 업데이트해 스케일링에 대한 값을 넣으면, Addon Pod 중 metrics-server가 kube-controller-manager와 kubelet을 주기적으로 조회하여 임계값과, 현재 자원 사용량을 확인하면서 스케일링에 대한 사용량을 수집하고, 스케일링이 필요하다면 controller-manager가 Deployment에 해당 파드 정보를 변경하여 스케일링 해준다.

image

 

(2) kube-proxy와 연동

SVC (service) Object에서 nodePort 타입으로 파드에 연결을 하게 되면, kube-proxy에 네트워크 생성요청을 한다.

proxy는 iptables에 내용을 업데이트하여 사용자가 API 호출을 하면 해당 서비스가 있는 컨테이너로 트래픽을 전달한다.

컨테이너와 트래픽을 전달할 때 CNI(Container Network Interface)를 사용하고, 대표적으로 calico 가 있다.

 

(3) Secret Object 확인

kubelet은 secret 내용에 변경사항이 있는지 주기적으로 확인을 한다. 변경이 확인되면 컨테이너에 업데이트를 반영한다.

댓글을 작성해보세요.

채널톡 아이콘