본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 15: ETCD - Kube-API Server

by 공부하는 무니 2023. 1. 1.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


Kube API Server

이번 강의에서는 Kubernetes의 Kube-apiserver에 대해 이야기해보겠습니다. 이전에 우리는 kube-apiserver가 Kubernetes의 primary management component라고 했습니다. kubectl 명령을 실행하면, kubectl 유틸리티는 실제로 kube-apiserver에 접근합니다. kube-apiserver는 가장 먼저 요청을 인증하고 검증합니다. 그런 다음 etcd 클러스터로부터 데이터를 받아서 다시 요청한 정보와 함께 응답합니다.

반드시 kubectl 명령어를 사용할 필요는 없습니다. 대신 POST 리퀘스트를 보내서 API를 직접 호출할 수도 있습니다.

파드를 생성하는 것을 예로 살펴보겠습니다.

먼저 요청이 인증된 다음 검증됩니다. 이 경우 API서버는 파드 객체를 노드에 할당하지 않고 생성합니다. 그리고 etcd 서버에 있는 '파드를 생성한 사용자' 정보를 업데이트 합니다. 스케쥴러는 API서버를 지속적으로 모니터링 하다가 노드가 할당되지 않은 새로운 파드가 있는 것을 발견합니다. 스케쥴러는 새 파드를 배치하기 위해 좋은 노드를 골라내고 이를 다시 kube-apiserver에 전달합니다. 그러면 API서버가 etcd 클러스터의 정보를 업데이트합니다.

API 서버는 업데이트된 정보를 적절한 워커 노드의 kubelet에 전달합니다. 그러면 kubelet이 해당 노드에서 파드를 생성하고 컨테이너 런타임 엔진에 어플리케이션 이미지를 배포하라고 지시합니다.

완료되면 kubelet이 API 서버로 상태를 업데이트하고 API 서버는 ETCD 클러스터의 데이터를 업데이트합니다.

이 패턴은 변경이 요청될 때마다 비슷하게 나타납니다. kube-api서버가 클러스터를 변경하기 위한 모든 작업의 중심에 있습니다. 요약하자면 kube-apiserver는 인증과 요청 검증을 담당하며, etcd data store의 데이터를 받아오고 업데이트합니다. 사실, kube-apiserver는 etcd data store 와 직접 소통하는 유일한 컴포넌트입니다. 스케쥴러, kube-controller-mangager, kublet과 같은 다른 컴포넌트들은 클러스터 내의 각자의 영역에서 api server를 사용하여 업데이트를 수행합니다.

Installing kube-apiserver

kubeadmin 툴을 사용해서 클러스터를 부트스트랩 한 경우, 이것을 알 필요는 없습니다. 그러나 하드웨어를 세팅했다면 Kubernetes 릴리즈 페이지의 바이너리를 통해 kube-apiserver를 사용할 수 있습니다. 바이너리를 다운로드하고 Kubernetes 마스터 노드에서 서비스로 실행되도록 구성하면 됩니다.

위와 같이 kube-apiserver는 많은 파라미터로 실행되며, 이 섹션 전체에서 이러한 개별 컴포넌트들을 설치하고 구성하는 방법에 대해 배울 것입니다. 지금 쿠버네티스 아키텍처의 모든 옵션을 이해할 필요는 없습니다. 그러나 지금 high level의 이해를 해두면, 나중에 전체 클러스터를 구성할 때 더 수월하게 이해할 수 있을 것입니다. Kubernetes 아키텍처는 여러 방법으로 서로 소통하는 다양한 컴포넌트로 이루어져있습니다. 따라서 컴포넌트들 모두 다른 컴포넌트가 어디에 있는지 알아야 합니다. 인증, 승인, 암호화, 보안에는 다양한 방식이 있습니다. 따라서 옵션들도 굉장히 많습니다. 이 코스의 관련 섹션에서 자세히 다루므로, 지금은 몇 가지 중요한 사항만 살펴보겠습니다. 옵션 중 대부분은 다른 컴포넌트 간의 연결을 보호하는 인증서와 관련된 것입니다. 이 인증서는 이 코스의 후반부에 있는 SSL/TLS 인증서 레슨에서 자세히 살펴볼 것입니다. 이와 관련된 섹션이 따로 있습니다. 따라서 지금은 인증서 관련된 옵션은 제거하고 보겠습니다. 다만 이 섹션에서 다루는 컴포넌트들은 인증서와 관련이 있다는 것을 기억해주시면 됩니다. —etcd-servers 옵션은 etcd서버의 위치를 지정합니다. kube-apiserver는 etcd 서버 옵션을 통해 etcd서버와 연결됩니다.

View kube-apiserver - Kubeadm

그렇다면 기존 클러스터에서 kube-apiserver옵션은 어떻게 확인할까요? 이는 클러스터를 설정하는 방법에 따라 다릅니다.

kubeadmin툴로 세팅했다면, kubeadmin은 마스터노드에 잇는 kube-system namespace의 파드로 kubeadmin-apiserver를 배포합니다.

View kube-apiserver options - Kubeadm

파드 definition file에서 옵션들을 볼 수 있습니다. 파드 definition file은 etc/kubernetes/manifests 폴더에 있습니다.

cat /etc/kubernetes/manifests/kube-apiserver.yaml

View kube-apiserver options - Manual

kubeadmin으로 셋업하지 않았다면, etc/systemd/system/kube-apiserver.service에 위치한 kube-apiserver 서비스를 확인하여 옵션을 검사할 수 있습니다.

cat /etc/systemd/system/kube-apiserver.service

또한, 마스터 노드에 있는 프로세스를 리스트로 보여주고, kube-apiserver를 살펴봄으로써 실행중인 프로세스와 옵션들을 확인할 수 있습니다.

ps -aux | grep kube-apiserver

 

반응형

댓글