kmg28801 / kubernetes-study

2 stars 0 forks source link

Chapter 11. 쿠버네티스 내부 이해 #12

Open kmg28801 opened 1 year ago

kmg28801 commented 1 year ago

컨트롤 플레인 구성 요소

쿠버네티스 구성 요소의 분산 특성

image
kmg48801@cloudshell:~/chapter9 (kubers-368504)$ kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   {"health":"true"}
etcd-1               Healthy   {"health":"true"}
kubectl get po -o custom-columns=POD:metadata.name,NODE:spec:nodeName --sort-by spec.nodeName -n kube-system
POD                                                        NODE
anetd-mvhlt                                                <none>
antrea-controller-horizontal-autoscaler-584778975c-mtfnv   <none>
egress-nat-controller-5b964b76b6-zj698                     <none>
event-exporter-gke-5dc976447f-vjljp                        <none>
filestore-node-4dg5j                                       <none>
fluentbit-gke-big-v6h4r                                    <none>
gke-metadata-server-hj9b4                                  <none>
gke-metrics-agent-z7mdt                                    <none>
ip-masq-agent-kkm8c                                        <none>
konnectivity-agent-7c5766c69b-zd9d4                        <none>
konnectivity-agent-autoscaler-658b588bb6-5kd8b             <none>
kube-dns-7d44cdb5d5-z7hb6                                  <none>
kube-dns-autoscaler-fbc66b884-mmd4c                        <none>
l7-default-backend-6b99559c7d-zrm4c                        <none>
metrics-server-v0.5.2-866bc7fbf8-dtd9g                     <none>
netd-87tg6                                                 <none>
node-local-dns-fk84p                                       <none>
pdcsi-node-qh252                                           <none>

쿠버네티스가 etcd를 사용하는 방법

낙관적 동시성 제어 : 낙관적 동시성 제어는 데이터 조각에 잠금을 설정해 그동안 데이터를 읽거나 업데이트하지 못하도록 하는 대신, 데이터에 버전 번호를 포함하는 방법이다. 데이터가 업데이트될 때마다 버전 번호는 증가하고, 데이터를 업데이트할 때, 클라이언트가 데이터를 읽은 시간과 업데이트를 제출하는 시간 사이에 버전 번호가 증가하였는지 여부를 체크한다. 버전 번호가 증가했다면 수정된 내용은 거부되고 클라이언트는 다시 새 데이터를 읽고, 다시 업데이트를 시도한다. 결과적으로 두 클라이언트가 동일한 데이터 항목을 업데이트를 시도하면, 첫 번째 시도만 성공한다.

리소스를 etcd에 저장하는 방법

kubectl exec -it \
  -n kube-system etcd-minikube \
  -- sh -c 'ETCDCTL_CACERT=/var/lib/minikube/certs/etcd/ca.crt \
    ETCDCTL_CERT=/var/lib/minikube/certs/etcd/peer.crt \
    ETCDCTL_KEY=/var/lib/minikube/certs/etcd/peer.key \
    ETCDCTL_API=3  \
    etcdctl \
      get \
      --keys-only \
      --prefix=true \
      "/registry/pods/default" '
/registry/pods/default/web-84fb9498c7-cbzml

저장된 오브젝트의 일관성과 유효성 보장

클러스터링된 etcd의 일관성 보장

image

API 서버의 기능

image

API 서버가 리소스 변경을 클라이언트에 통보하는 방법 이해

정리하자면.. API 서버는 리소스를 etcd에 저장 후 클라이언트에 응답을 반환함과 동시에 관련된 클라이언트(ex. 컨트롤러 매니저의 컨트롤러)들에 통보해줍니다. 그리하여 오브젝트가 갱신될 때마다 API 서버는 오브젝트를 감시하고 있는 연결된 모든 클라이언트에게 오브젝트의 새로운 버전을 보내줍니다.

image
Ckmg48801@cloudshell:~ (kubers-368504)$ kubectl get po --watch
NAME      READY   STATUS    RESTARTS   AGE
kubia-0   1/1     Running   0          5d5h
kubia-1   1/1     Running   0          5d5h
kubia-2   1/1     Running   0          5d5h

스케줄러 이해

기본 스케줄링 알고리즘

image

수용 가능한 노드 찾기

컨트롤러 매니저에서 실행되는 컨트롤러 소개

컨트롤러 역할과 동작 방식 이해

레플리케이션 매니저

image

실행 중인 파드 인스턴스가 spec에 정의된 것보다 적으면, 레플리케이션컨트롤러는 새로운 파드 매니페스트를 생성해 API 서버에 게시하고, 스케줄러와 kubelet이 파드 스케줄링과 실행 작업을 수행한다. 레플리케이션 매니저는 API 서버로 파드 API 오브젝트를 조작해 작ㅇ버을 수행

레플리카셋, 데몬셋, 잡 컨트롤러

디플로이먼트 컨트롤러

스테이트풀셋 컨트롤러

노드 컨트롤러

서비스 컨트롤러

엔드포인트 컨트롤러

image

네임스페이스 컨트롤러

퍼시스턴트볼륨 컨트롤러

컨트롤러 정리

kmg48801@cloudshell:~ (kubers-368504)$ kubectl get deploy -n kube-system
NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
antrea-controller                         0/0     0            0           72d
antrea-controller-horizontal-autoscaler   1/1     1            1           72d
egress-nat-controller                     1/1     1            1           72d
event-exporter-gke                        1/1     1            1           72d
konnectivity-agent                        1/1     1            1           72d
konnectivity-agent-autoscaler             1/1     1            1           72d
kube-dns                                  1/1     1            1           72d
kube-dns-autoscaler                       1/1     1            1           72d
l7-default-backend                        1/1     1            1           72d
metrics-server-v0.5.2                     1/1     1            1           72d
kmg48801@cloudshell:~/chapter9 (kubers-368504)$ kubectl get events --watch -o wide
LAST SEEN   TYPE     REASON              OBJECT                       SUBOBJECT                 SOURCE                                                  MESSAGE                                                                                               FIRST SEEN   COUNT   NAME
3m39s       Normal   Killing             pod/kubia-0                  spec.containers{kubia}    kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Stopping container kubia                                                                              3m39s        1       kubia-0.173d2b2683ad9bd3
3m39s       Normal   Killing             pod/kubia-1                  spec.containers{kubia}    kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Stopping container kubia                                                                              3m39s        1       kubia-1.173d2b26837cff92
3m39s       Normal   Killing             pod/kubia-2                  spec.containers{kubia}    kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Stopping container kubia                                                                              3m39s        1       kubia-2.173d2b26829588ef
3m1s        Normal   Scheduled           pod/kubia-5d5d6cc8f-9j76s                              gke.io/optimize-utilization-scheduler                   Successfully assigned default/kubia-5d5d6cc8f-9j76s to gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   3m1s         1       kubia-5d5d6cc8f-9j76s.173d2b2f60ab9a3c
2m58s       Normal   Pulled              pod/kubia-5d5d6cc8f-9j76s    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Container image "luksa/kubia:v1" already present on machine                                           2m58s        1       kubia-5d5d6cc8f-9j76s.173d2b30136dcab9
2m58s       Normal   Created             pod/kubia-5d5d6cc8f-9j76s    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Created container nodejs                                                                              2m58s        1       kubia-5d5d6cc8f-9j76s.173d2b30151a88b3
2m57s       Normal   Started             pod/kubia-5d5d6cc8f-9j76s    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Started container nodejs                                                                              2m57s        1       kubia-5d5d6cc8f-9j76s.173d2b3050ce7d21
3m1s        Normal   Scheduled           pod/kubia-5d5d6cc8f-ngrkp                              gke.io/optimize-utilization-scheduler                   Successfully assigned default/kubia-5d5d6cc8f-ngrkp to gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   3m1s         1       kubia-5d5d6cc8f-ngrkp.173d2b2f61585410
2m58s       Normal   Pulled              pod/kubia-5d5d6cc8f-ngrkp    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Container image "luksa/kubia:v1" already present on machine                                           2m58s        1       kubia-5d5d6cc8f-ngrkp.173d2b300c7fb503
2m58s       Normal   Created             pod/kubia-5d5d6cc8f-ngrkp    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Created container nodejs                                                                              2m58s        1       kubia-5d5d6cc8f-ngrkp.173d2b300e33b3a0
2m57s       Normal   Started             pod/kubia-5d5d6cc8f-ngrkp    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Started container nodejs                                                                              2m57s        1       kubia-5d5d6cc8f-ngrkp.173d2b30489cdc83
3m1s        Normal   Scheduled           pod/kubia-5d5d6cc8f-xlllm                              gke.io/optimize-utilization-scheduler                   Successfully assigned default/kubia-5d5d6cc8f-xlllm to gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   3m1s         1       kubia-5d5d6cc8f-xlllm.173d2b2f5dded1fe
2m58s       Normal   Pulled              pod/kubia-5d5d6cc8f-xlllm    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Container image "luksa/kubia:v1" already present on machine                                           2m58s        1       kubia-5d5d6cc8f-xlllm.173d2b300db24ee9
2m58s       Normal   Created             pod/kubia-5d5d6cc8f-xlllm    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Created container nodejs                                                                              2m58s        1       kubia-5d5d6cc8f-xlllm.173d2b300f66ef99
2m57s       Normal   Started             pod/kubia-5d5d6cc8f-xlllm    spec.containers{nodejs}   kubelet, gk3-hello-cluster-nap-atgad5sn-9c653a9f-mw8r   Started container nodejs                                                                              2m57s        1       kubia-5d5d6cc8f-xlllm.173d2b304235927f
3m1s        Normal   SuccessfulCreate    replicaset/kubia-5d5d6cc8f                             replicaset-controller                                   Created pod: kubia-5d5d6cc8f-xlllm                                                                    3m1s         1       kubia-5d5d6cc8f.173d2b2f5d2e890f
3m1s        Normal   SuccessfulCreate    replicaset/kubia-5d5d6cc8f                             replicaset-controller                                   Created pod: kubia-5d5d6cc8f-9j76s                                                                    3m1s         1       kubia-5d5d6cc8f.173d2b2f5f5191f4
3m1s        Normal   SuccessfulCreate    replicaset/kubia-5d5d6cc8f                             replicaset-controller                                   Created pod: kubia-5d5d6cc8f-ngrkp                                                                    3m1s         1       kubia-5d5d6cc8f.173d2b2f5ffbc4a7
3m1s        Normal   ScalingReplicaSet   deployment/kubia                                       deployment-controller                                   Scaled up replica set kubia-5d5d6cc8f to 3                                                            3m1s         1       kubia.173d2b2f593c4a95