Kubernetes?

CHAN LIM·2022년 7월 9일
0

K8S

목록 보기
1/11

Kubernetes, 당신은 누구인가?

TMI

: 쿠버네티스(Kubernetes)란 배의 키를 잡는 사람인 조타수(항해사)의 그리스어 단어입니다.
: 로고배의 키 모양이며, 주로 k8s라고 부르는데 그 이유는 k와 s사이에 있는 글자가 8개여서 k8s라고 부릅니다.
: 원래 구글 내부에서 컨테이너 오케스트레이션 툴로 사용하던 프로젝트였는데 오픈소스화 한 것이다.

  • 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오프소스 플랫폼입니다.
  • 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해줍니다.
  • 쿠버네티스는 서비스, 기술 지원 및 도구를 어디서나 쉽게 이용할 수 있습니다.

즉, Container들을 관리해줍니다.

컨테이너에 대해선 Docker 설명할 때 했습니다.

= orchestration (오케스트레이션)
: 컨테이너와 마이크로 서비스 아키텍쳐를 규모에 따라 관리할 수 있는 프레임워크를 제공하는 기술입니다.


쿠버네티스가 필요한 이유

컨테이너의 장점 (복습)

  • 기민한 애플리케이션 생성과 배포
    • VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적입니다.
  • 지속적인 개발, 통합 및 배포
    • 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포할 수 있고 (이미지의 불변성 덕에) 빠르고 효율적으로 롤백할 수 있습니다.
  • 개발과 운영의 관심사 분리
    • 배포 시점이 아닌 빌드/릴리스 시점에 애플리케이션 컨테이너 이미지를 만들기 때문에, 애플리케이션이 인프라스트럭처에서 분리됩니다.
  • 가시성(observability)
    • OS 수준의 정보와 메트릭에 머무르지 않고, 애플리케이션의 헬스와 그 밖의 시그널을 볼 수 있습니다.
  • 개발, 테스팅 및 운영 환경에 걸친 일관성
    • 랩탑에서도 클라우드에서와 동일하게 구동됩니다.
  • 클라우드 및 OS 배포판 간 이식성
    • Ubuntu, RHEL, CoreOS, 온-프레미스, 주요 퍼블릭 클라우드와 어디에서든 구동됩니다.
  • 애플리케이션 중심 관리
    • 가상 하드웨어 상에서 OS를 실행하는 수준에서 논리적인 리소스를 사용하는 OS 상에서 애플리케이션을 실행하는 수준으로 추상화 수준이 높아집니다.
  • 느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로서비스
    • 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리될 수 있습니다.
  • 리소스 격리
    • 애플리케이션 성능을 예측할 수 있습니다.
  • 자원 사용량 = 리소스 사용량
    • 고효율 고집적입니다.

쿠버네티스가 왜 필요한가?

컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법입니다.
프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 합니다.

예를 들어 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야 합니다.
이 문제를 시스템에 의해 처리한다면 더 쉽지 않을까요?

그것이 쿠버네티스가 필요한 이유입니다.
쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공합니다.
애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공합니다.

쿠버네티스의 기능

  • 서비스 디스커버리와 로드 밸런싱
    • 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있습니다.
    • 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있습니다.
  • 스토리지 오케스트레이션
    • 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있습니다.
  • 자동화된 롤아웃과 롤백
    • 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있습니다.
    • 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있습니다.
  • 자동화된 빈 패킹(bin packing)
    • 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다.
    • 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.
  • 자동화된 복구(self-healing)
    • 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않습니다.
  • 시크릿과 구성 관리
    • 쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있다.
    • 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있습니다.

쿠버네티스 배포 종류

  • 관리형 쿠버네티스
    • 현업에서 많이 사용하는 종류입니다.
    • 사용자가 특별히 관리할 부분이 없고 배포만 하면 자동으로 관리해줍니다.
  • 설치형 쿠버네티스
    • 설치를 할 수 있도록 '패키지화'해놓은 상태입니다.
    • 리눅스를 생각하면 됩니다.
  • 구성형 쿠버네티스
    • 교육용에 적합합니다.
    • 자유롭게 구성하는 요구사항에 맞출 수 있습니다.
    • kubeadm

Reference

쿠버네티스란 무엇인가?
쉽게 시작하는 쿠버네티스

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글