Kubernetes

Jihoon·2023년 1월 13일
0

쿠버네티스

목록 보기
1/1
post-thumbnail
  • 클린 코드, 아키텍처

🌟 Kubernetes란?

  • Airflow, Mlflow, Kubeflow 등 사용됌

문제점

  • 배포하고자 하는 애플리케이션의 개수가 늘어날수록, 구입해야하는 서버가 늘어남
  • 한 대의 서버 잘 사용해서, 여러 개 앱으르 배포할 수는 없을까?
  • 서버 세팅 역시 마찬가지

VM의 등장 (해결)

  • 하나의 컴퓨터에 여러 OS 두고, 각 환경의 리소스를 조정하여 하나의 컴퓨터로도 안정감있게 여러 앱 배포가능 (환경 격리 가능 win, Linux)
  • OS 모두 전체 다운 및 가동하기 때문에

컨테이너 기술 발전 및 Docker 등장

  • Linux 컨테이너 기술을 UI화 한게 Docker

  • 도커 이후의 여러 컨테이너 Docker Compose 등장

  • 문제점

    1. 만약 규모가 커져 더 많은 컴퓨터를 사용해야 하는 경우는?
    1. 서버 증설 뒤 매번 도커 설치해야함
    1. 각 서버간 네트워크 구성도 고려해야 하고, 따라서, 분산 환경에 대한 고려 등장 !

Kubernetes 등장

  • 무료로 사용 가능
  • 쿠버네티스는 여러 개의 컴퓨터 환경에서 활용됌 (각 컴퓨터는 노드, 이 노드의 묶음을 클러스터)
  • 노드 중 적절한 노드에 배포함
  • 도커처럼 특정 컨테이너를 실행하는데, 이게 여러 개의 노드 환경에서 동작함

어떤 형태로 Kubernetes 사용?

  • 먼저 쿠버네티스 클러스터 갖춰야 함
  • EKS, AKS, GKE
  • 클러스터에 몇 개의 노드를 둘 것이냐 (최소가 3 GCP경우)
  • 노드 자동 확장 기능 사용
  • 노드풀 - 노드 항목에서 노드의 머신 유형(CPU, Memory 정하기)
  • 노드들의 집합 - 노드풀, 여러 개의 노드풀을 둘 수 있음
  • GPU 노드 풀 추가 가능

  • 쿠버네티스 클러스터와 통신하기 위해 별도의 쿠버네티스 클라이언트(kubectl)설치해야 함
  • kubeconfig 설정해줘야 함
  • nginx 앱 배포하는 yaml

Kubernetes 쓰면 뭐가 좋나?

  • 여러 노드가 필요한 상황이여야 좋음
  • 배포하는 애플리케이션이 여러 개가 되고, 상황에 따라 필요한 머신 유형이 다르고, 관리해야하는 노드의 수가 많아져
  1. 복잡한 인프라(노드, 네트워크 등등)를 통합적으로 관리할 수 있음
    • 인프라 관리 중앙화
  2. 또한 분산 노드 환경에서 쉽고 빠르게 애플리케이션 배포가 가능함
  3. YAML 파일을 통해 선언적으로 배포를 관리하고 상황을 가시화할 수 있음 (ArgoCD - 쿠버네티스 클러스터의 배포 상황을 가시화해주는 툴)
  4. 기타 다양한 쿠버네티스의 기능을 사용할 수 있음
    • 배포할 애플리케이션에 리소스(cpu, mem) 설정
    • 애플리케이션이 배포될 노드풀 설정
    • 애플리케이션이 죽었을 시 자동으로 재실행
    • 애플리케이션 무중단 배포

Kubernetes / 아키텍처

  • 클러스터, 마스터노드, 워커 노드(풀)

  • 마스터 노드

    1. API Server - REST API를 제공하는 서버로, 쿠버네티스 클러스터와 통신할 때 사용함
  1. kubectl 커맨드는 실제로 이 API Server에게 요청하는 것
  2. Controller, Scheduler

Kubernetes / UseCase

  • 그냥 조직에서 사용하는 앱들을 배포하는데 쓰임
  • mlflow, Airflow / Streamlit, FastAPI
  • Airflow의 Task 프로세스를 Kubernetes Pod으로 실행함
profile
장난감이 데이터인 사람

0개의 댓글