본문 바로가기
CS/클라우드 컴퓨팅

[클라우드] 6. Kubernetes (쿠버네티스)

by J-rain 2024. 4. 17.

 

Google과 컨테이너

• Google의 업무 방식
      • Gmail에서 YouTube, 검색에 이르기까지 모두 컨테이너에서 실행
      • 개발팀은 컨테이너화를 통해 더욱 신속하게 소프트웨어를 배포
      • 매주 수십억 개가 넘는 컨테이너를 생성


• 쿠버네티스
   • 대규모 워크로드를 운영/관리한 경험과 노하우가 축적된 다년 간의 프로젝트로 컨테이너를 통합 관리
   • 그리고 2014년 오픈소스 프로젝트로 외부로 공개
      • Go로 작성된 오픈소스 SW (Apache License 2.0)
      • Cloud-Native Computing Foundation (CNCF) 에서 관리
• 컨테이너 배포, 네트워크, 스토리지 관리 정책을 세부적으로 명세 가능 (네트워킹 제공x => 정책들을 관리)
• 대규모의 클러스터 운영이 가능하도록 확장성이 매우 높음
• 클라우드와의 연계성이 매우 높아 서비스를 이식하기에 용이함

 

주요 기능

1. Auto Scale Out / In                                          2. Load Balancing                           3. Auto Rolling Update

사용량 증/감에 따라 자동으로 서버 인스턴스를 추가/삭제, 여러 서버로 부하 분산을 위해 요청을 배분, 서비스 중단없이 순차적 업데이트

 

Q. 쿠버네티스가 로드 밸런싱을 직접하나?
A.로드 밸런싱을 하는것은 쿠버네티스 안에 따로 있다. 즉, 쿠버네티스는 관리할 수 있게 해주는 것

 

4. Auto Healing                                                 5. Persistence Volume                           6. Container Orchestration

서비스 중단을 감지하고 복구해주는 기능, 컨테이너가 사라져도 데이터가 사라지지 않도록 영구 볼륨 제공,여러 컨테이너를 한 번에 관리하는 시스템

 

• 상태 관리
    • 상태를 선언하고 선언한 상태를 유지, 자동 장애 복구
• 스케줄링
    • 클러스터의 여러 노드 중 조건에 맞는 노드를 찾아 컨테이너를 배치
• 클러스터
    • 가상 네트워크를 통해 하나의 서버에 있는 것처럼 통신
• 서비스 디스커버리
    • 서로 다른 서비스를 쉽게 찾고 통신할 수 있음
• 스케일링
    • 리소스에 따라 자동으로 서비스를 조정함
• Roll Out / Roll Back
    • 배포/롤백 및 버전 관리

등의 기능들도 있다.

 

 Immutable Infrastructure 

-> 컨테이너 환경을 써야 되는 이유를 설명

  • Configuration Drift (설정 표류?)
    • 손으로 직접 수정한 임시 수정/업데이트와 전반적인 엔트로피 증가로 인해 인프라의 서버들의 시간이 갈수록 점점 서로 다른 상태가 되는 현상
    • 장비의 라이프사이클 동안 초기 설정으로부터 멀어지고 다른 장비들과 서로 달라짐
  • Immutable Infrastructure (불변의 인프라?)
    • 서버가 배포된 이후 절대 변경되지 않는 형태의 인프라 패러다임
    • 업데이트는 덮어 쓰는 것이 아니라 버리고 새롭게 만드는 것
  • Disposable Components (폐기 가능한 구성요소?)
    • 애플리케이션을 구성하는 개별 구성요소
    • 상태 정보를 가지지 않는 무상태(stateless) 방식으로 설계 => 추후 MSA형태로 발전

 

Kubernetes Reconciliation Model

쿠버네티스는 관리를 위한 용도이다. 즉, 어떤 상태인지 얘기를 해주는게 쿠버네티스이고 그 밑에 컨테이너 플랫폼이 그걸 보고서 핸들링을 하고 컨테이너 네트워킹 플랫폼이 그 상태를 보고서 판단을 한다. 따라서 쿠버네티스는 현재 상태를 계속 모니터링하고 조정,관리한다.

 

 

Kubernetes Architecture

Master Node

  • 클러스터에 관한 전반적인 결정을 수행하고 클러스터 이벤트를 감지하고 반응
  • kube-api-server
    • Control Plane의 프론트 엔드, Kubernetes의 API 노출
  • kube-scheduler
    • 노드가 배정되지 않은 새로 생성된 Pod를 감지하고, 실행할 노드를 선택
  • kube-controller-manager
    • Kubernetes의 컨테이너들을 관리, 노드 다운 시 통지와 대응에 관해 책임
    • 시스템의 모든 컨테이너를 설정된 정책의 숫자에 맞게 유지
    • 시스템 네임스페이스 관리
  • etcd
    • Kubernetes에서 필요한 모든 데이터를 키-값 형태로 저장

Worker Node

  • 동작 중인 컨테이너를 유지시키고 Kubernetes 런타임 환경을 제공
  • kubelet
    • 클러스터의 각 노드에서 실행되는 에이전트
    • 다양한 메커니즘을 통해 제공된 컨테이너의 스펙의 집합을 받아서 컨테이너가 항상 스펙에 따라 동작하도록 모니터링
  • kube-proxy
    • 클러스터의 각 노드에서 실행되는 네트워크 프록시
    • 노드의 네트워크 규칙을 유지
    • 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 Pod로 네트워크 통신을 할 수 있도록 해 줌
  • Container runtime
    • 컨테이너 실행을 담당하는 소프트웨어
    • docker, containerd, CRI-O를 구동
컨테이너 런타임 인터페이스라고도 얘기하는데 실질적인 액션을 담당하고 쿠버네티스는 마치 API콜을 하는것 즉, 무슨 상태를 원해! => 도커나 컨테이너나 크리오 같은 애들이 수행

 

 

Objects

  • 오브젝트
    • 리소스의 가장 기본적인 구성 단위
    • 시스템에서 영속성을 가지는 객체
  • 기본 오브젝트
    • Pod
        • 가장 기본적인 배포 단위, 하나의 Pod은 하나의 노드에만 배치
        • Pod에 하나 이상의 컨테이너 포함 가능, IP와 Port, 볼륨 공유
    • Service
        • 외부 네트워크와 내부 네트워크의 Endpoint 관리
        • 잦은 Pod 교체에도 네트워크 상태 유지
    • Volume
        • 논리 디스크, 잦은 Pod 교체에도 디스크의 영속성 보장
    • Namespace
        • 클러스터 내 논리적인 공간 단위, 개별 접근 권한 및 리소스 할당량 제어

 

 

Controllers

  • 컨트롤러
    • 오브젝트의 상태가 의도된 상태로 구동되는지를 추적
    • 의도한 상태로 만드는 역할 -> Kubernetes Reconciliation Model
  • 컨트롤러의 종류
    • Replica Set
        • Pod 집합의 실행을 항상 안정적으로 유지
        • 명시된 Pod 개수에 대한 가용성을 보증
    • Deployment
        • Pod과 ReplicaSet에 대한 선언적 업데이트를 제공
        • ReplicaSet이 의도한 Pod의 개수를 조정
        • ReplicaSet의 Roll-Out을 통해 시스템의 스케일을 관리
     • DaemonSet
        • ReplicaSet과 비슷하지만, 노드마다 Pod의 개수만큼 실행
        • 애플리케이션이 클러스터 전체 노드나 특정 집합에서 동작할 때 사용
      • StatefulSet
        • Deployment와 유사하게 스케일링을 관리, Pod들의 순서 및 고유성 보장
        • 애플리케이션의 순차적인 배포에 적합
      • Job
        • 하나 이상의 Pod을 생성하고 지정된 수의 Pod이 성공적으로 종료될 때까지 계속해서 Pod의 실행을 재시도
        • Pod이 성공적으로 완료되면, 완료된 Job을 추적
        • Job이 성공적으로 완료되면, Job이 완료 상태로 변경
        • Job을 삭제하면 Job이 생성한 Pod도 정리

 

Kubernetes Networking

  • Container Network Interface (CNI)
    • 컨테이너 간 네트워킹을 제어할 수 있는 플러그인
    Container Runtime과 Kubernetes 사이의 네트워크 계층 구현
  • Service 종류
    • ClusterIP – 클러스터 내부에서 다른 Pod들이 접근하기 위한 IP
    • NodePort – Node의 고정 포트로 Pod의 서비스를 노출
    • LoadBalancer – 별도의 로드밸런서를 통해 서비스를 외부로 노출
  • CNI 종류

 

댓글