Kubernetes 아키텍쳐

jaeyeon ha·2026년 3월 7일

[교육] Kubernetes

목록 보기
5/34

kubernetes 아키텍쳐

kubernetes-cluster-architecture.svg

  • control plane 구성요소
    • 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
  • workernode 구성요소
    • kubelet : kubespray로 설치할 경우, linux 프로세스로 동작
      파드를 생성 및 구동 관리하는 역할
      ```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
      ```
    • kube-proxy
      서비스 객체로 들어온 내부 트래픽과 외부 트래픽을 어떤 파드로 전송할 것인지에 대한 규칙을 생성하고 관리
      데몬셋 컨트롤러를 이용하여 모든 노드에 생성 및 동작 중
    • container-runtime
      클러스터 내부에서 컨테이너 이미지를 다운로드하고 이미지로부터 컨테이너를 생성하는 역할
      ```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>
  • 애드온(AddOns)
    • DNS
      • DNS 서버 담당(coredns)
      • DNS 캐싱을 담당(nodelocaldns)
      • DNS 서버로 동작할 파드 개수 조정(dns-autoscaler)
    • CNI(Container Network Interface) : 컨테이너 간 통신을 위한 애드온

0개의 댓글