반응형
개요
kube-api server 는 쿠버네티스의 primary 관리 컴포넌트이다.
예제1. kubectl get nodes
- 내가
kubectl
명령을 실행하면,kubectl
유틸리티는 실제로, kube-apiserver 에 도달한다.- 예1.
kubectl get nodes
- kube-api server 는 먼저 요청을 인증하고, (1. Authenticate User)
- 유효성을 검사한다.(2. Validate Request)
- 그런 다음 etcd 클러스터에서 데이터를 검색한후, 해당 검색된 데이터를 response 한다. (3. Retrieve Data= Do Job)
- 예1.
예제2. curl -X POST /api/v1/namespace/default/pods ..
- 실제로, 우린 꼭
kubectl
안쓰고 직접 , kube-apiserver API 를 호출할 수 있다.- 예2. Authenticate는 됐지만,Validate Request 되기 전에 creating pod(Do Job) 하는 예
-
curl -X POST /api/v1/namespace/default/pods ...[other]
- 이 경우, API 서버는 노드에 할당하지 않고, Pod 객체를 생성하고, etcd 서버에 정보를 업데이트합니다.
- Authenticate User
- Validate Request
- Retrieve Data
- Update ETCD
- 스케줄러는 API server를 모니터링하다가, 새로운 Pod 가 node 없이 생성된 것을 알아차린다.
- 스케줄러는 place 할 node 를 찾아 해당 Pod 를 배치하고, 이것을 kube api server 에 알린다.
- kube api server 은 etcd 클러스터에 정보를 업데이트하고, api 서버는 이 정보를 적절한 워커 노드 kubelet 에 넘긴다.
- kubelet은 node에 pod 를 만들고, 칸테이너 런타인 엔진(Container Runtime Engine:Docker)에게 어플리케이션 이미지를 deploy 하도록 유도한다.
- 위가 끝나면, kubelet은 API server에 status를 업데이트하고, ETCD 클러스터에 데이터를 업데이트한다.
- 똑같은 request 가 오면 비스무레한 행위가 반복된다.
-
- 예2. Authenticate는 됐지만,Validate Request 되기 전에 creating pod(Do Job) 하는 예
결론
- 'KUBE-APISERVER'는 ETCD 데이터 저장소의 요청을 인증 및 검증하고 데이터를 검색 및 업데이트하는 역할을 한다.
- 실제로 'KUBE-APISERVER'는 etcd 데이터스토어와 직접 상호 작용하는 유일한 구성 요소이다.
- 스케줄러, Kube-Controller-Manager & Kubelet과 같은 다른 구성 요소들은 KUBE-APISERVER'를 사용하여 각각의 영역에서 클러스터에서 업데이트를 수행한다.
- kubeadm 도구를 사용하여 클러스터를 부팅하는 경우 이 사실을 알 필요는 없지만, 하드 설정 중인 경우 'KUBE-APISERVER'를 kubernetes 릴리스 페이지에서 이진 형식으로 사용할 수 있습니다. 다운로드하고 kubernetes 마스터 노드에서 서비스로 실행되도록 구성하십시오. 'KUBE-APISERVER'는 여기서 보는 바와 같이 많은 매개 변수를 사용하여 실행됩니다.
- 이 섹션에서는 이러한 쿠버네티스 아키텍처의 개별 구성 요소를 설치하고 구성하는 방법에 대해 자세히 알아보겠습니다.
installing kube-api server
$wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kubapiserver
# kube-apiserver.service
ExecStart=/usr/local/bin/kube-apiserver \\
--advertise-address=${INTERNAL_IP} \\
--allow-privileged=true
--apiserver-count=3 \\
--authorization-mode=Node,RBAC \\
--bind-address=0.0.0.0 \\
--client-ca-file=/var/lib/kubernetes/ca.pem \\
--enable-admission-
plugins=Initializers,NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \\
--enable-swagger-ui=true \\
--etcd-cafile=/var/lib/kubernetes/ca.pem \\ #1
--etcd-certfile=/var/lib/kubernetes/kubernetes.pem \\ #1
--etcd-keyfile=/var/lib/kubernetes/kubernetes-key.pem \\ #1
--etcd-servers=https://127.0.0.1:2379 \\ #2 etcd 서버 위치 지정
--event-ttl=1h \\
--experimental-encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \\
--kubelet-certificate-authority=/var/lib/kubernetes/ca.pem\\ #1
--kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem\\ #1
--kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem\\ #1
--kubelet-https=true \\ #1
--runtime-config=api/all \\
--service-account-key-file=/var/lib/kubernetes/service-account.pem \\
--service-cluster-ip-range=10.32.0.0/24 \\
- 1. 다른 것은 몰라도, 모든 컴포넌트들은 certificates 를 가진다는 것을 기억하자.
- kube api 서버가 etcd 연결하는 방법
기존 클러스터에서 Kube api server 옵션 보는법
- 클러스터 설정 방법마다 다르다. 여기에선 kubeadme 로 배포된 경우만 보여줌.
kubectl pod 로 확인
view api-server - kubeadme
$kubectl get pods -n kube-system
# .kubeadme로 클러스터를 설정한 경우, kube-api server를 kube-system namespace의 마스터 노드에 pod 로 배포한다.
- .kubeadme로 클러스터를 설정한 경우, kube-api server를 kube-system namespace의 마스터 노드에 pod 로 배포한다.
pod discription 확인
- 만약에 pod definition 옵션들을 보고 싶은경우, etc kubernetes manifests 폴더에 가면된다.
- kube-api server의 경우,
/etc/systemd/system/kube-apiserver.service
가면 볼 수 있다.
- kube-api server의 경우,
마스터 노드에서 ps랑 option 확인
$ ps -aux | grep kube-apiserver
반응형
'독후감' 카테고리의 다른 글
Chap 16. Kube Scheduler (0) | 2022.03.07 |
---|---|
Chap 15. Kube Controller Manager (0) | 2022.03.07 |
Chap11-13. ETCD (0) | 2022.03.07 |
CKA udemy 강의 Core Concept 1 - main structure (0) | 2022.03.07 |
쿠버네티스 인 액션 5장. 서비스 (0) | 2022.02.21 |