k8s

쿠버네티스 완벽 가이드 2장 : 쿠버네티스 특징 간단히 알아보기

Joon0464 2023. 2. 2. 16:40


쿠버네티스란?


  • 컨테이너화된 애플리케이션 배포, 확장 등을 자동화하여 관리하기 위한 플랫폼
  • 비슷한 컨테이너 오케스트레이션 엔진에는 docker swarm, Apache Mesos 등이 있지만, 쿠버네티스가 사실상 표준적으로 많이 쓰인다.
  • 쿠버네티스에서 사용가능한 컨테이너 런타임은 Docker, Containerd, cri-o 등이 있다.

 

쿠버네티스를 통해 할 수 있는 것들


1. 선언적 코드를 사용한 관리(IaC)

  • YAML 또는 JSON 형식으로 작성한 선언적 코드(menifest)를 통해 배포하는 컨테이너로 주변 리소스를 관리
    -> IaC(Infrastructure as Code) 구현
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: sample
  name: sample
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sample
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: sample
    spec:
      containers:
      - image: nginx:1.16
        name: nginx

2. 스케일링/오토 스케일링

  • 쿠버네티스 클러스터에 컨테이너를 배포할 때 같은 컨테이너 이미지를 기반으로 한 여러 컨테이너를 배포하여 부하 분산 및 다중화 구조를 구현 가능
  • 부하에 따라 파드 수를 자동으로 늘리거나 줄이는 오토스케일링 기능 제공

3. 스케줄링

  • 스케줄링이란 컨테이너를 쿠버네티스 노드에 배포할 때 어떤 노드에 배포할 것인지 결정하는 단계이다.
  • Affinity, Anti-Affinity 기능을 사용하여 컨테이너화 된 애플리케이션 워크로드의 특징이나 쿠버네티스 노드의 성능을 기준으로 스케줄링 가능
  • e.g. '디스크 I/O 가 많은' 컨테이너 -> '디스크가 SSD인' 노드에 배치
  • AWS와 같은 클라우드 환경에서 구축되어 있는 쿠버네티스 노드에는 가용 영역 등을 식별하는 추가 정보가 부여되어 있어 쉽게 멀티존 위에 컨테이너를 분산 배치 가능하다.

4. 리소스 관리

  • 컨테이너 배치를 위한 지정이 특별이 없을 경우 노드의 CPU/Memory 등의 상태에 따라 스케줄링되기 때문에 사용자는 어떤 쿠버네티스 노드에 컨테이너를 배치할 것인지 신경쓸 필요 없다.
  • 리소스 사용 상태에 따라 클러스터 오토 스케일링 기능으로 클러스터 자체의 노드도 자동으로 추가 또는 삭제하도록 설정 가능하다.

5. 자동화된 복구

  • 쿠버네티스의 중요한 컨셉인 self-healing 은 컨테이너 프로세스를 모니터링하고 프로세스 정지를 감지하면 컨테이너 스케줄링을 실행하여 컨테이너를 자동으로 재배포한다.
  • 노드 자체에 장애가 발생하거나, 컨테이너가 사라진다 해도 서비스 영향 없이 애플리케이션을 자동으로 복구할 수 있다.
  • 프로세스 모니터링 이외에 HTTP/TCP 나, 쉘 스크립트로 헬스 체크 성공 여부(rediness probe, liveness probe)를 설정할 수 있다.

6. 로드 밸런싱 / 서비스 디스커버리

  • 쿠버네티스는 로드벨런서(서비스) 기능과 인그레스를 제공하고 있으며, 사전에 정의한 조건과 일치하는 컨테이너 그룹에 라우팅하는 엔드포인트를 할당할 수 있다.
  • 컨테이너를 확장할 때 엔드포인트가 되는 서비스에 컨테이너 자동 등록과 삭제, 컨테이너 장애 시 분리, 컨테이너 롤링 업데이트 시 필요한 사전 분리 작업도 자동으로 실행한다.
  • 마이크로서비스 아케텍처 환경에서 각각의 서비스가 서로를 참조할 때 서비스 디스커버리 기능이 제공되어 매우 유용하다.

7. 데이터 관리

  • 쿠버네티스는 백엔드 데이터 스토어로 etcd를 사용한다.
  • etcd는 클러스터를 구성하여 이중화가 가능하고 컨테이너나 서비스의 매니페스트 파일도 이중화 구조로 저장한다.
  • 또한 쿠버네티스는 컨테이너가 사용하는 설정 파일이나 인증 정보 등의 데이터를 저장하는 구조도 가지고 있어 컨테이너 공통 설정이나 애플리케이션에서 사용되는 데이터베이스 인증 정보 등을 안전하고 이중화된 상태로 쿠버네티스에서 관리할 수 있다.

 

 

쿠버네티스와 연계 가능한 외부 에코시스템


  • Ansible: 쿠버네티스에 컨테이너 배포
  • Apache Ignite: 쿠버네티스 서비스 디스커버리를 사용한 클러스터 생성과 스케일링
  • Fluentd: 쿠버네티스에 컨테이너 로그 전송
  • GitLab: CI/CD 구현을 위한 일련의 다양한 도구와 쿠버네티스의 통합
  • Jenkins: 잡(Job) 실행 시 잡 실행자용 컨테이너를 쿠버네티스에 배포
  • OpenStack: 클라우드 사업자와 연계한 쿠버네티스 구축
  • Prometheus: 쿠버네티스 모니터링
  • Spark: 잡을 쿠버네티스 네이티브로 실행
  • Spinnaker: 쿠버네티스에 컨테이너 배포
  • Kubeflow: 쿠버네티스에 ML 플랫폼 배포
  • Rook: 쿠버네티스에 분산 파일 시스템 배포
  • Vitess: 쿠버네티스에 MySQL 클러스터 배포

이 밖에도 쿠버네티스는 기능을 확장할 수 있는 여러 구조를 가지고 있다. 자체 기능을 추가하거나 쿠버네티스 자체를 프레임워크로 자체 플랫폼을 구현하여 사용도 가능하다.