han098 2023. 8. 15. 13:45
반응형

쿠버네티스를 사용하는 이유?

  • 컨테이너의 자원을 효율적으로 관리하기 위해서 사용
    • 단순히 개수가 많아서 사용한다는 의미가 많이 다름
    • 100개면 안쓰고 10000개면 쓸 것인가에 대한 질문
    • 우리가 운영체제를 왜 쓰는지에 대한 질문과 일맥상통함
  • 클라우드 네이티브를 위한 4가지 요소는 모두 필요하거나 필요하지 않다는 의미보다 각 요소들이 유기적으로 필요에 따라 부분적으로 사용될 수 있다.

쿠버네티스 구조 - 이미지는 공식홈페이지 참조

https://kubernetes.io/ko/docs/concepts/overview/components/

컨트롤 패널 : api, etcd, scheduler, c-m, c-c-m

Kube-apiserver : API 서버는 클러스터 요청이 왔을때 그 요청이 유효한지 검증하는 역할, 모든 요청은 apiserver를 통해서 전달이 된다.

etcd : 모든 클러스터 상태 및 데이터를 담는 쿠버네티스 저장소, key-value 형태로 데이터 저장한다.

scheduler : 노드가 배정되지 않는 새로 생성된 파드를 감지, 실행할 노드를 선택하는 컴포넌트

c-m : 컨트롤러 매니저로 컨트롤러 프로세스를 실행한다. node의 상태를 끊임 없이 체크하고 원하는 상태를 유지

워커 노드 : kubelet. k-proxy

Kubelet : 클러스터의 각 노드에서 실행되는 에이전트, 파드에서 컨테이너가 확실하게 동작하도록 관리한다.

 k-proxy : 각 노드에서 실행되는 네트워크 프록시로 쿠버네티스 서비스 개념의 구현부이다. 내부 네트워크 세션이나 클러스터 바깥에서 파드로 네트워크 통신을 할 수 있도록 한다. - 커널의 iptables 

쿠버네티스 동작 원리

  • 컨테이너 생성 요청 시 kubectl를 통해 API로 생성 요청을 전달
  • scheduler를 통해 Worker Node 내 컨테이너 상태를 확인하고 API가 생성 요청을 kubelet에 전달하여 scheduler를 통해 확인한 컨테이너 상태를 기반으로 최적 리소스를 통해 컨테이너를 생성
  • 생성이 완료되면 etcd에 변경된 상태를 전달하여 etcd를 최신 상태로 업데이트
  • 이후 노드들에 상태는 Controller manager를 통해 지속적으로 모니터링하며 체크

https://tech.ktcloud.com/68

쿠버네티스 오브젝트 - 쿠버네티스 시스템에서 영속성을 가지는 오브젝트

Pod

  • 쿠버네티스의 가장 작은 배포 단위
  • 하나의 Pod에는 하나의 컨테이너가 존재할 수 있다.
  • 전체 클러스터에서 고유한 IP를 할당
  • 해당 IP는 수시로 생성, 삭제되는 컨테이너 특성상 고정하지 않으므로 고정이 필요할 경우 별도 설정이 필요하다.

ReplicaSet

  • 여러 개의 Pod를 관리
  • replicas=3 이면 Pod의 개수를 3개로 유지하며 Pod가 3개가 되도록 지속적으로 관리한다.
    • 추가, 생성 시 3개 초과 시 삭제하고 3개 미만 시 생성을 진행

Deployment

  • 배포 버전을 관리 (Pod와 ReplicaSet에 대한 선언과 업데이트를 관리해주는 모)
  • 내부적으로 ReplicaSet을 통한 버전 업데이트 관리
    • yaml 파일에서 특정 Pod에 대한 버전을 수정하고 업데이트 명령을 요청한다.
    • 기존 ReplicaSet은 3개로 지정되어 있고 Pod가 삭제되지 않은 상태이기 때문에 etcd에서는 해당 변경된 정보만 가지고 있음
    • 이후 Pod가 삭제되면 생성 시 변경된 사항(버전 수정)을 참고하여 새로 생성되는 Pod의 버전이 업데이트되어 생성됨
      • 기존 2개는 v1이면 새로 생성된 버전은 v2
    • 이런 식으로 순차적으로 Pod의 버전을 업데이트하면서 서비스 무중단 배포가 가능하다.

워크로드

쿠버네티스에서 구동되는 애플리케이션, 일련의 파드 집합 내에서 실행한다. -> 어떤 애플리케이션을 실행 할 때 필요한 IT 리소스의 집합

각 WorkLoad의 역할에 따라 다양한 오브젝트가 존재한다. -> 배포를 관리하는 오브젝트, 상태를 관리하는 오브젝트, 지속적인 실행을 관리하는 오브젝트 등

  • Deployment : Deployment의 모든 Pod가 "필요 시 교체" 혹은 "상호 교체" 가능한 경우, 클러스터의 스테이트리스 어플리케이션 워크로드를 관리하기에 적합하다.
  • StatefulSet : state를 추적하는 하나 이상의 Pod를 반드시 동작하게 해준다.
  • DaemonSet : 노드-로컬 기능을 제공하는 Pods를 정의한다.
  • Job  CronJob : 실행 완료 후 중단되는 작업을 정의한다.

ClusterIP

  • 노드 내부에 존재하는 IP
  • 해당 IP는 내부에서만 접근 가능하고 외부(다른 노드 등)에서는 접근이 불가능하다.

NodePort

  • 노드에 노출되어 외부에서 접근 가능한 서비스
    • 포트 포워딩과 동일한 방식

LoadBalancer

  • 특정 노드가 문제가 발생하면 외부에서 접근이 불가능하기 때문에 LoadBalancer를 통해 통신 가능한 NodePort를 매핑해준다.

Ingress

  • 클러스터 내부의 서비스에 대한 외부 접근을 관리하는 기능
  • 클러스터 외부에서 들어오는 HTTP와 HTTPS 요청을 특정 서비스로 라우팅하는 역할을 함
  • 이를 통해 클러스터 내부의 서비스를 외부로 노출하거나, 로드 밸런싱, SSL 종료 등을 수행

일반적인 구성

반응형