📌kube-apiserver
- 쿠버네티스의 주요 관리 구성 요소
- kubectl 사용시 명령어가 kube-apiserver에 도달
- kubeadm이 먼저 요청을 인증하고 유효성을 확인
- 이후 etcd-cluster에서 데이터를 조회해 요청된 정보로 응답
📋 kubectl 명령 실행 절차
- Authenticate User
⬇️
- Validate Request
⬇️
- Retrieve data
⬇️
- Update ETC
⬇️
- Scheduler
⬇️
- Kubelet
⌨️ kubectl 명령어와 api 직접 호출 명령어
$ kubectl get nodes
- kubectl command를 사용하지 않고 직접 API를 호출 할 수 도 있음
curl -X POST /api/v1/namespaces/default/pods …[other]
📢 api 직접 호출 과정
scheduler는 지속적으로 API 서버를 모니터하고 노드가 할당되지 않은 새로운 Pod가 있다는것을 감지
scheduler가 올바른 노드를 식별해 새 Pod를 생성하고 다시 kube-apiserver와 통신
- 이후
etcd-cluster에 정보를 업데이트함
💡 상세과정
kube-apiserver는 해당 정보를 적절한 Worker node의 kubelet에게 전달
kubelet은 node에 Pod를 생성하고 컨테이너 런타임 엔진에 지시해 앱 이미지를 배포
- 완료되면
kubelet은 상태를 kube-apiserver로 다시 업데이트 하고 API 서버는 etcd-cluster에서 데이터를 최종 업데이트
❓so what
- kube-apiserver 는 클러스터를 업데이트 하기위해 수행해야 하는 모든 작업의 중심
- kube-apiserver는 etcd-cluster 저장소와 직접 상호작용하는 유일한 구성요소
manager, kubelet, scheduler 등등은 API 서버를 이용해 각 영역의 클러스터에서 업데이트를 수행
👑 kubeadm
- kubeadm 도구를 이용해 클러스터를 부트스트랩 했다면 알 필요 없지만 하드웨어를 설정하는 경우 kube-apiserver는 kubernetes 릴리스 페이지에서 바이너리로 사용가능
- 쿠버네티스 마스터 노드에서 서비스로 실행되도록 다운로드하고 구성
⚙️ Installing kube-api server
- kube-apiserver는 많은 매개 변수로 실행된다.
- 쿠버네티스 아키텍처의 개별 구성요소를 설치하고 구성하는 방법에 대해서도 알아볼 것
- 많은 구성요소가 인증서를 통해 통신한다 (SSL/TLS)
📍etcd-server options
- 서버의 위치를 지정하는곳 (IP, 2379포트)
- 이 옵션을 어디서 볼 수 있나 👉 클러스터를 어떻게 설정하느냐에 따라 다름
- kubeadm : kube-apiserver를 마스터 노드의 kube-system namespaces에 pod 형태로 배포함 👉 이것은 Pod의 Definition 파일에서 옵션을 확인 할 수 있음 (아마도, yaml 파일)
$ cat /etc/kubernetes/manifests/kube-apiserver.yaml
- kubeadm을 사용하지 않을때 : kube-apiserver 서비스를 보면서 옵션을 확인 할 수 있음
$ cat /etc/systemd/system/kube-apiserver.service
📍프로세스 실행, 효과적인 옵션 확인
$ ps -aux | grep kube-apiserver