kube-apiserver
쿠버네티스 api를 관리
주요 기능
- 사용자 인증
- 요청 사항 검증
- 데이터 수신
- etcd 업데이트
- 스케줄링
- 노드 kubelet과 통신
etcd
※ kubespray로 설치할 경우, container로 돌지 않고 linux 프로세스로 동작
클러스터 안의 구성 요소들에 대한 정보를 키:값 형식으로 저장하는 데이터베이스
클러스터 노드의 개수, 각각의 파드들이 갖고 있는 컨테이너 정보들이 저장됨
```bash
[root@master ~]# ps -ef | grep etcd | grep -v grep
root 59666 1 0 10:46 ? 00:01:56 /usr/local/bin/etcd
root 80650 80629 2 10:50 ? 00:05:16 kube-apiserver --advertise-address=192.168.2.60 --allow-privileged=true --anonymous-auth=True --apiserver-count=1 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --client-ca-file=/etc/kubernetes/ssl/ca.crt --default-not-ready-toleration-seconds=300 --default-unreachable-toleration-seconds=300 --enable-admission-plugins=NodeRestriction --enable-aggregator-routing=False --enable-bootstrap-token-auth=true --endpoint-reconciler-type=lease --etcd-cafile=/etc/ssl/etcd/ssl/ca.pem --etcd-certfile=/etc/ssl/etcd/ssl/node-master.pem --etcd-keyfile=/etc/ssl/etcd/ssl/node-master-key.pem --etcd-servers=https://192.168.2.60:2379 --event-ttl=1h0m0s --kubelet-client-certificate=/etc/kubernetes/ssl/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/ssl/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalDNS,InternalIP,Hostname,ExternalDNS,ExternalIP --profiling=False --proxy-client-cert-file=/etc/kubernetes/ssl/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/ssl/front-proxy-client.key --request-timeout=1m0s --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/ssl/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/etc/kubernetes/ssl/sa.pub --service-account-lookup=True --service-account-signing-key-file=/etc/kubernetes/ssl/sa.key --service-cluster-ip-range=10.233.0.0/18 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/etc/kubernetes/ssl/apiserver.crt --tls-private-key-file=/etc/kubernetes/ssl/apiserver.key
```
kube-scheduler
컴퓨터 자원을 기반으로 어떤 노드에 pod를 띄울 것인지 결정
※ 실제 파드를 생성하는 작업은 각 노드의 kubelet이 담당
kube-controller-manager
클러스터 안에서 동작하는 다양한 리소스들을 모니터링하여 원만하게 동작할 수 있도록 하는 관리하는 프로세스
- 네임스페이스
- 노드파드
- 레플리카셋
- ...
cloud-controller-manager
퍼블릭 클라우드와 연계할 때 사용
▶ kube-apiserver, kube-scheduler, kube-controller-manager관련 정보는 etc/kubernetes/manifests에서 확인 가능
Non-terminated Pods: (8 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system calico-node-hbv94 150m (3%) 300m (7%) 64M (1%) 500M (13%) 3h35m
kube-system coredns-5c469774b8-bmbtn 100m (2%) 0 (0%) 70Mi (1%) 300Mi (8%) 3h34m
kube-system dns-autoscaler-f455cf558-6h5xr 20m (0%) 0 (0%) 10Mi (0%) 0 (0%) 3h34m
kube-system kube-apiserver-master 250m (6%) 0 (0%) 0 (0%) 0 (0%) 3h36m
kube-system kube-controller-manager-master 200m (5%) 0 (0%) 0 (0%) 0 (0%) 3h36m
kube-system kube-proxy-trxht 0 (0%) 0 (0%) 0 (0%) 0 (0%) 3h36m
kube-system kube-scheduler-master 100m (2%) 0 (0%) 0 (0%) 0 (0%) 3h36m
kube-system nodelocaldns-7lp84 100m (2%) 0 (0%) 70Mi (1%) 200Mi (5%) 3h34m
```bash
[root@node1 /root]# ps -ef | grep kubelet | grep -v grep
root 51291 1 0 10:49 ? 00:02:05 /usr/local/bin/kubelet --v=2 --node-ip=192.168.2.61 --hostname-override=node1 --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --config=/etc/kubernetes/kubelet-config.yaml --kubeconfig=/etc/kubernetes/kubelet.conf --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --runtime-cgroups=/system.slice/docker.service
``````bash
Non-terminated Pods: (5 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system calico-kube-controllers-794577df96-v5b5h 30m (0%) 1 (25%) 64M (3%) 256M (14%) 3h38m
kube-system calico-node-twgwn 150m (3%) 300m (7%) 64M (3%) 500M (29%) 3h39m
kube-system kube-proxy-fpb6b 0 (0%) 0 (0%) 0 (0%) 0 (0%) 3h39m
kube-system nginx-proxy-node1 25m (0%) 0 (0%) 32M (1%) 0 (0%) 3h39m
kube-system nodelocaldns-d8k96 100m (2%) 0 (0%) 70Mi (4%) 200Mi (12%) 3h38m
```kube-system 관리되는 파드 확인
[root@master ~]# kubectl get pod -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-794577df96-v5b5h 1/1 Running 0 3h39m 10.233.102.129 node1 <none> <none>
calico-node-2sx4n 1/1 Running 0 3h39m 192.168.2.63 node3 <none> <none>
calico-node-42qj4 1/1 Running 0 3h39m 192.168.2.62 node2 <none> <none>
calico-node-hbv94 1/1 Running 0 3h39m 192.168.2.60 master <none> <none>
calico-node-twgwn 1/1 Running 0 3h39m 192.168.2.61 node1 <none> <none>
coredns-5c469774b8-bmbtn 1/1 Running 0 3h38m 10.233.97.129 master <none> <none>
coredns-5c469774b8-fh2c4 1/1 Running 0 3h38m 10.233.71.1 node3 <none> <none>
dns-autoscaler-f455cf558-6h5xr 1/1 Running 0 3h38m 10.233.97.130 master <none> <none>
kube-apiserver-master 1/1 Running 1 (3h37m ago) 3h40m 192.168.2.60 master <none> <none>
kube-controller-manager-master 1/1 Running 2 (3h37m ago) 3h40m 192.168.2.60 master <none> <none>
kube-proxy-4bf7b 1/1 Running 0 3h40m 192.168.2.63 node3 <none> <none>
kube-proxy-fpb6b 1/1 Running 0 3h40m 192.168.2.61 node1 <none> <none>
kube-proxy-tqjl7 1/1 Running 0 3h40m 192.168.2.62 node2 <none> <none>
kube-proxy-trxht 1/1 Running 0 3h40m 192.168.2.60 master <none> <none>
kube-scheduler-master 1/1 Running 2 (3h37m ago) 3h40m 192.168.2.60 master <none> <none>
nginx-proxy-node1 1/1 Running 0 3h40m 192.168.2.61 node1 <none> <none>
nginx-proxy-node2 1/1 Running 0 3h40m 192.168.2.62 node2 <none> <none>
nginx-proxy-node3 1/1 Running 0 3h40m 192.168.2.63 node3 <none> <none>
nodelocaldns-7lp84 1/1 Running 0 3h38m 192.168.2.60 master <none> <none>
nodelocaldns-d8k96 1/1 Running 0 3h38m 192.168.2.61 node1 <none> <none>
nodelocaldns-lsqx6 1/1 Running 0 3h38m 192.168.2.63 node3 <none> <none>
nodelocaldns-vbvvh 1/1 Running 0 3h38m 192.168.2.62 node2 <none> <none>