Skip to content

Latest commit

 

History

History
168 lines (102 loc) · 5.02 KB

Kubernetes 아키텍쳐.md

File metadata and controls

168 lines (102 loc) · 5.02 KB

Kubernetes 아키텍쳐

스크린샷 2022-08-15 오후 9 01 49

쿠버네티스는 상태 체크 -> 차이점 발견 -> 조치 하는 과정을 반복함. 즉, 파드가 죽어도 다시 쿠버네티스에서 자동으로 파드를 새로 띄워줌


스크린샷 2022-08-15 오후 9 05 30


스크린샷 2022-08-15 오후 9 06 49


Master 상세 - etcd

  • 모든 상태와 데이터를 저장
  • 분산 시스템으로 구성하여 안전성을 높임 (고가용성)
  • 가볍고 빠르면서 정확하게 설계 (일관성)
  • Key - Value 형태로 데이터 저장
  • TTL, watch 같은 부가 기능 제공
  • 백업 필수

Master 상세 - API server

  • 상태를 바꾸거나 조회
  • etcd와 유일하게 통신하는 모듈
  • REST API 형태로 제공
  • 권한을 체크하여 적절한 권한이 없을 경우 요청을 차단
  • 관리자 요청 뿐 아니라 다양한 내부 모듈과 통신
  • 수평으로 확장되도록 디자인

Master 상세 - Scheduler

  • 새로 생성된 Pod를 감지하고 실행할 노드를 선택
  • 노드의 현재 상태와 Pod의 요구사항을 체크

Master 상세 - Controller

논리적으로 다양한 컨트롤러가 존재

  • 북제 컨트롤러
  • 노드 컨트롤러
  • 엔드포인트 컨트롤러

끊임 없이 상태를 체크하고 원하는 상태를 유지


Node 상세 - kubelet

  • 각 노드에서 실행
  • Pod를 실행/중지하고 상태를 체크

Node 상세 - proxy

  • 네트워크 프록시와 부하 분산 역할

Pod

  • 가장 작은 배포 단위
  • 전체 클러스에서 고유한 IP를 할당
  • 여러 개의 컨테이너가 하나의 Pod에 속할 수 있음

스크린샷 2022-08-15 오후 9 22 07


ReplicaSet

  • 여러 개의 Pod를 관리

스크린샷 2022-08-15 오후 9 23 24


Deployment

  • 배포 버전을 관리

스크린샷 2022-08-15 오후 9 23 52


스크린샷 2022-08-15 오후 9 24 27

버전 2로 올리면 ReplicaSet을 하나 더 만들어서 배포를 진행함


Service - ClusterIP

스크린샷 2022-08-15 오후 9 26 37

  • 클러스터 내부에서 사용하는 프록시
  • pod를 로드밸런서 하는 별도의 서비스 (서비스는 고정 IP이고 Pod는 IP가 자주 바뀌기 때문에 Service 사용)

스크린샷 2022-08-15 오후 9 28 31

  • 클러스터 내부에서 서비스 연결은 DNS를 이용

Service - NodePort

스크린샷 2022-08-15 오후 9 31 11

  • 노드(Host)에 노출되어 외부에서 접근 가능한 서비스
  • ClusterIP는 내부에서만 사용하고 외부에서 접근할 수 없다는 문제가 있음

Service - LoadBalancer

스크린샷 2022-08-15 오후 9 32 06

  • 로드밸런서 하나만 외부 IP로 노출

Ingress

스크린샷 2022-08-15 오후 9 32 42

  • 도메인 또는 경로별 라우팅

API 호출

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: wed
        image: image:v1
  • yaml을 통해서 API 호출을 한다.