k8s architecture

GisangLee·2024년 3월 10일
0

k8d

목록 보기
21/29

아키 순서

1. Pod 실행


kubectl apply -f pod.yaml


2. 승인 제어

0) TLS 암호화로 전달
apiserver에 도달하면..
1) Authentication check
2) Authorization check
3) Admission controller


3. API Server (REST API)

ETCD에 기록한다.

ETCD

  • key value DB

  • 주기적인 back up 필수 (etcdctl 명령어)

    • snapshot save
    • snapshot restore
  • Master Node가 여러대일 경우, Master Node 수만큼 ETCD가 있을 것이다.

    • 이럴 때 어떻게 관리해야하는가?

      이렇게 해야한다.

    • RAFT 알고리즘

      • 사이트
      • 3대 운영 - master * 3 -> 대장 선출 - 대장노드 장애
      • 다른 대장 선출
    • 모든 k8s-object 정보 저장

      • ETCD 내부에 특정 오브젝트에 대한 암호화(aes256)

4. Scheduler

API Server로부터 요청된 Pod를 Node에 배치하도록 한다.

  • Scheduler가 Pod를 노드에 배치하는 알고리즘이 존재한다.
  • Pod 배치 알고리즘
    • 조건자 + 우선순위 점수제
      • 점수가 높은 노드에 할당

5. Pod 생성

apiserver -> kubelet

Kubelet이 파스 생성 요청 정보를 받으면
Container RunTime를 이용해서 Pod를 생성한다.


6. ETCD

생성된 Pod 정보를 API Server가 ETCD에 전달하고
DB에 적재한다.


네트워크

1. CNI

container 간의 network 제어를 지원하는 plugin

  • Linux 네트워크 아키텍쳐를 사용한다.

A) Calico

IP 관리

  • pod가 생성되면 자동으로 node에 할당되면서 IP가 할당 됨.
  • vRouter 역할을한다 (가상 라우터)

IPAM을 통해서 subnet(CIDR)에 할당된 IP를
각 노드에 /26(64개)씩 할당 관리

네트워크 동작 원리

node1(pod1) -> cali37c.. -> vRouter(calico)
-> tunl0 (노드 간 통신) -> enp0s8
-> 외부(overlay network)
-> vRouter(n2) -> cali37c..
-> node2(pod2) (veth -> container eth0 )

kubectl apply -f https://docs.projectcalico.org/archive/v3.17/manifests/calicoctl.yaml

k exec -n kube-system calicoctl -- calicoctl get nodes
k exec -n kube-system calicoctl -- calicoctl ipam show
k exec -n kube-system calicoctl -- calicoctl ipam show --show-blocks

BIRD (calico 설치 시 구성되는 모듈)

  • 각 노드의 라우팅 정보를 공유

felix (calico 설치 시 구성되는 모듈)

  • iptables, route table을 관리하는 역할
    • 동일 노드의 pod간 통신
    • 다른 노드의 pod간 통신
    • Pod와 외부 통신을 위한 설정

2. coreDNS

Pod, SVC를 생성하면
이름:IP를 DNS에 등록한다.

  • Service Discovery 기능이라고 한다.
  • 생성된 Pod 정보를 API Server가 ETCD에 전달하고
    DB에 적재한다.
profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글