IT 강의/도커 쿠버

[CKA 강의 요약] Kube-apiserver

rnany 2024. 3. 7. 13:48

Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의의 16. Kube-API Server 챕터를 공부한 내용으로 강의 내용과 다를 수 있습니다. 정확한 내용은 강의를 들으시는 것을 추천드립니다.


1. Kube-apiserver

Kube-apiserver는 Kubernetes의 주요한 관리 구성 요소(primary management component)이다.

Kube-apiserver는 master node에 위치해 사용자, 구성요소들의 모든 요청을 처리한다.

 

1-1) Kube-apiserver 동작

Kube-apiserver가 사용자가 요청한 명령어를 실행하는 여러 예시를 통해 kube-apiserver를 이해해본다. 

 

<kubectl 명령어 동작 과정>

# kubectl get nodes

Node의 정보를 확인하는 명령어를 실행해본다.

 

user → kube-apiserver ETCD cluster → kube-apisever →user(node 정)

 

'사용자'가 kubectl 명령 실행하여 node의 정보를 요청하면 kubectl 유틸리티는 'kube-apiserver'에 접근한다.

'kube-apiserver'는 사용자의 요청을 인증하고 검증한다.

그 뒤, 'etcd 클러스터'로부터 데이터를 받아 요청 받은 node의 정보를 '사용자'에게 전달한다.

 

 

<POST 리퀘스트로 직접 API 호출하여 POD를 생성하는 예시>

Kubectl을 사용하지 않아도 POST 리퀘스트로 직접 masfer node의 kube-apiserver에서 API를 호출 할 수 있다.

POST 리퀘스트 예시를 통해 이해해 보자.

 

# curl -x POST /api/v1/namespaces/default/pods....

user → API server → ETCD → API server → user (pod created!)

 

POST 요청은 'kube-apiserver'에서 인증(Authenticate User) 된 다음 요청을 검증(Validate Request) 된다.

'kube-apiserver'는 파드 객체를 노드에 할당하지 않고 생성한다.

'etcd 서버'에 있는 [파드 생성한 사용자] 정보를 업데이트한다.

 

 

scheduler → API 서버 → ETCD

 

'Scheduler'는 'kube-apiserver'를 계속 모니터링 하다가 node가 지정되지 않은 pod가 있는 것을 알게된다.

새 파드를 배치하기 위한 좋은 노드를 골라낸 뒤 'kube-apiserver'에 전달한다.

'kube-apiserver'가 'etcd 클러스터'에 pod가 위치 될 node의 정보를 업데이트한다.

 

 

 

scheduler  → kube-apiserver → kublet(node에 pod 생성) → kube-apiserver → ETCD

 

'Kube-apiserver'는 업데이트 된 정보를 적절한 워커 노드의 'kubelet'에 전달한다.

'Kubelet'이 해당 워커 노드에 파드를 생성하고 컨테이너 런타임 엔진에 어플리케이션 이미지를 배포하라고 지시한다.

완료되면 'kubelet'이 'kube-apiserver'로 상태를 업데이트 하고 'Kube-apiserver'는 'ETCD 클러스터'에 상태를 업데이트 한다.

 

 

 

<API 서버가 하는 일>

 

Kube-apiserver는 클러스터에 변화가 필요할 때 수행하는 작업들의 중심이다.

1. 사용자 인증
2. 요청 검증
3. ETCD의 데이터 확인
4. ETCD의 데이터 업데이트 (ETCD와 유일한 직접 소통 수단)
5. 스케쥴러 상태 업데이트
6. kublet 상태 업데이트

 

 

 

2. kube-api server 다뤄보기

 

2-1) Kubeadmin 수동 구성하기

<Kube-api server 설치>

Kubeadm 툴이 아닌 하드웨어로 세팅을 했으면 Kubernetes 릴리즈 페이지의 바이너리를 통해 kube-apiserver를 사용할 수 있다.

# wget https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

 

Kube-apiserver 바이너리 다운로드 후 master node에서 서비스로 실행 되도록 구성하면 된다.

 

<Kube-api server 설정 파일>

구성 요소별 인증서 옵션

 

etcd서버의 위치를 지정하는&nbsp; &mdash;etcd-servers 옵션

 

상위 사진으로 Kube-apiserver 설정 파일에 많은 옵션있는 것을 알 수 있다.

인증, 승인, 암호화, 보안, 다른 구성 요소들과의 통신등 kube-apiserver를 구성하는 것은 복잡하며 차차 배워 나갈 것 이다.

 

 

2-2) Kube-apiserver 옵션

<Kubeadmin로 설치 시 kube-apiserver의 옵션>

Kubeadmin으로 설치 시 kubeadmin-apiserver을 master node에 잇는 kube-system namespace로 배포한다.

 

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

Pod 설정 파일인 kube-apiserver.yaml에서 옵션들을 볼 수 있다. 

 

 

<Kubeadmin 설치가 아닐때 kube-apiserver의 옵션>

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

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

 

 

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

# ps -aux | grep kube-apiserver