본문 바로가기
k8s

K8S 컴포넌트 정리

by marble25 2023. 3. 31.

https://kubernetes.io/ko/docs/concepts/overview/components/

쿠버네티스를 사용하면서 정작 기본적인 구성 요소에 대한 이해가 부족하다는 생각에 k8s 컴포넌트를 정리해 보았다.

쿠버네티스는 크게 노드 컴포넌트와 컨트롤 플레인 컴포넌트으로 구성된다.

컨트롤 플레인 컴포넌트

컨트롤 플레인 컴포넌트는 클러스터 전체에 대한 관리를 담당한다.

컨트롤 플레인은 클러스터 내에 한개 이상 있어야 하고, high availibility를 위해 여러 대의 컨트롤 플레인을 구성하는 것을 권장한다. 한 대의 마스터 컨트롤 플레인 노드를 설정하고 나머지 컨트롤 플레인은 join을 통해 편입시킬 수 있다.

sudo kubeadm join <master-control-plane-node-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane --certificate-key <key>
  • kube-apiserver

쿠버네티스는 요청을 restful api 형태로 처리한다. pod를 만들고, pod를 수정하는 등의 작업들을 보내면 kube-apiserver에서 받아서 처리하게 된다.

  • etcd

쿠버네티스 뒷단의 데이터를 담고 있는 키-밸류 저장소이다. 분산 저장을 지원한다.

  • kube-scheduler

새로 생성된 파드를 감지하고 실행할 노드를 선택한다. 스케줄링을 위해 여러 요소들을 감안한다.

  • kube-controller-manager

클러스터 내의 자원들이 ‘desired’된 상태인지 확인하고 해당 상태가 될 수 있도록 하는 컨트롤 루프이다.

노드 컴포넌트

노드 컴포넌트는 파드를 유지시키고 쿠버네티스 환경을 제공하고, 모든 노드에서 작동한다.

  • kubelet

파드에서 컨테이너가 확실하게 동작하도록 관리한다.

  • kube-proxy

네트워크 규칙을 유지 및 관리하며, 네트워크 규칙을 통해 네트워크 통신할 수 있도록 해준다.

  • container runtime

실제 컨테이너를 실행해주는 소프트웨어로, containerd, CRI-O와 같은 런타임을 지원한다.

 

정리하자면, kubectl ~~ 이나 kubeadm ~~으로 입력한 명령은 kubernetes context에 정의된 서버로 향한다.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <auth>
    server: https://<master control plane>:6443
  name: <name>
contexts:
- context:
    cluster: <clustername>
    user: <username>
  name: <contextname>
current-context: <contextname>
kind: Config
preferences: {}
users:
- name: <username>
  user:
    client-certificate-data: <cert>
    client-key-data: <key>

해당 서버에서 kube-apiserver에서 요청을 받아서 경우에 따라 처리한다.

  • configmap, secret 등: etcd에 저장한다.
  • deployment, job 등: kube-controller-manager 로 전달된다. 원하는 상태가 될 때까지 pod를 생성하는 요청을 kube-apiserver에 전달한다.
  • pod: 노드에 할당하지 않고 파드를 생성한다. 이렇게 생성한 pod는 kube-scheduler가 감시하고 있다가 스케줄링 작업을 해준다. 최종적으로 kube-apiserver에서 지정된 노드의 kubelet으로 pod 정보를 전송해서 실제 container가 생성될 수 있도록 한다.

'k8s' 카테고리의 다른 글

K8S에서 private docker registry 띄우기  (0) 2023.04.25
[TIL] regcred 알아보기  (0) 2023.04.24
Kubernetes에서 NAS 사용하기  (0) 2023.03.26
Kubernetes 스토리지 구조  (0) 2023.03.26
[TIL] pod에서 서비스 접속하기  (0) 2022.07.10