🐳 Container/K8S

[K8s] 쿠버네티스(Kubernetes)의 이해

heywantodo 2023. 3. 23. 20:47
728x90
반응형

쿠버네티스의 이해

 

컨테이너 오케스트레이션

  • 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화
  • 컨테이너를 사용하는 어떤 환경에서든 사용할 수 있음 

 

컨테이너 오케스트레이션으로 배포 가능한 태스크 자동화

  • 설정 및 스케줄링
  • 리소스 할당
  • 인프라 전반의 워크로드 밸런싱을 기반으로 컨테이너 스케일링 또는 제거
  • 컨테이너 상태 모니터링
  • 컨테이너 간 상호 작용의 보안 유지 등 

 

Kubernetes (K8s) 란?

https://kubernetes.io/

 

Production-Grade Container Orchestration

Production-Grade Container Orchestration

kubernetes.io

  • Container Cluster Manager
  • 컨테이너화 된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈 소스 시스템
  • 다양한 클라우드 및 베어메탈 환경 지원

 

쿠버네티스 특징

  • Automatic bin packing
    • ex) Nginx가 3개 필요할 때 
  1. 각 노드에는 cAdviser가 기본으로 깔려있고 이벤트가 발생할 때마다 수집해 api로 보냄
  2. etcd에 저장 → Scheduler에 보냄 → Controller에게 3개 요청 후 Controller가 점검
  3. API가 Kubelet에게 실행 요청 → Docker Engine에게 재요청하고 엔진이 3개 실행

    Kubelet은 실행할 능력이 없어서 Docker Engine에게 요청

    Controller는 요청 한 개수를 유지하는 역할을 함

 

  • 확장성을 고려하여 설계됨
    • 소스 코드 수정 없이 쿠버네티스 클러스터에 기능을 추가할 수 있음

 

  • Horizontal (수평) 스케일링
    • 간단한 명령어나 UI or CPU 사용량에 따라 자동으로 애플리케이션의 스케일 업 & 다운

 

  • 자가치유
    • 오류가 발생한 컨테이너 재시작, 스케줄 ⇒ 건강한 컨테이너 관리

 

  • 시크릿과 구성관리
    • 컨테이너 관리를 하는 역할이 쿠버네티스
    • 쿠버네티스를 사용하는 동안은 컨테이너(서비스)는 멈춰 있으면 안됨 ⇒ 항상 Running중인 컨테이너만 운영

 

  • Batch 실행
    • 서비스 외에도 batch와 CI 워크로드 관리
    • 원하는 경우 실패한 컨테이너를 교체 가능

 

  • 서비스 디스커버리와 로드 밸런싱
    • 다섯 대의 컨테이너가 있으면 부하분산을 해서 다 서비스가 되도록 해줘야 함
    • 쿠버네티스에게 로드밸런서 생성을 요청할 수 있음 ⇒ 랜덤하게 연결
    • DNS 서비스도 지원해줌 (Route53 밖에서 사용) ⇒ EndPoint 조절이 필요 없음
    • 컨테이너 개수에따라 로드밸런서에 연결된 ip도 알아서 늘어나고 줄어듦

 

  • 스토리지 오케스트레이션
    • 각각의 컨테이너 관리를 위해 파일 공유 스토리지(EFS) 사용
    • 각각 워커 노드가 어디서 실행될 지 모르기 때문에 EFS를 사용
    • 쿠버네티스의 드라이브를 설치하면 다른 가용영역의 EBS도 사용 가능 (원래 안됨) ⇒ Storage Orchestration

 

  • Rolling Update (자동화된 롤아웃과 롤백)
    • 애플리케이션 버전 Rollback, Update가 가능
    • 설정 변경시 점진적으로 롤아웃, 문제가 발생하면 롤백 ⇒ Run time System

 

쿠버네티스 컴포넌트

컨트롤 플레인 (Control Plane) 

  • API Server
    • 모든 데이터를 etcd 클러스터에 저장하므로 쉽게 수평 확장이 가능함
    • 쿠버네티스 Control-Plane을 구체화 한 것
  • etcd
    • 쿠버네티스는 etcd를 사용해 전체 클러스터의 상태를 저장
  • Controller Manager
    • API를 사용해 클러스터의 상태를 감시하고 원하는 상태로 조정
  • Scheduler
    • node에 pod에 스케줄링 하는 역할을 담당
    • 서비스의 리소스 요구사항, hw/sw 정책 제약 사항 등 여러가지 상호작용 고려

 

Add-On

  • Dashboard
  • CNI (Container Network Interface Plugin)
  • Ingress
  • coreDNS
    • headless 서비스를 제외한 모든 서비스는 DNS 이름을 가짐 ⇒ 자동 검색에 유용

 

워커 노드 (Worker Node)

  • Kube-proxy
    • 각 node에서 저수준의 네트워크 관리 업무 수행
    • 서비스를 지역적으로 반영하고 TCP와 UDP 포워딩을 수행하며 환경변수나 DNS를 통해 클러스터 IP를 찾음
  • kubelet
    • Kubelet은 쿠버네티스를 대표하는 Node라고 할 수 있음
    • 마스터 컴포넌트와 통신을 수행하며 실행중인 포드를 관리하고 감독

 

쿠버네티스 시퀀스 다이어그램

 

1️⃣  API가 정보를 꺼내서 스케줄러에게 줌

2️⃣  스케줄러가 API에게 위치를 알려줌

3️⃣  etcd가 정보를 저장 후 Kubelet에게 실행 요청

4️⃣  Kubelet이 엔진에게 실행을 요청하고 엔진이 실행 후 Kubelet에게 전달

 

 

참조

https://www.redhat.com/ko/topics/containers/what-is-container-orchestration

https://kubernetes.io/

728x90
반응형