데브코스 50일차 - Docker 정리 및 K8s맛보기

Pori·2023년 12월 22일
0

데엔

목록 보기
43/47

Docker 정리

용어

  • Docker image / dockerfile
  • Docker Container
  • Docke Hub (Docker registry)
  • Docker Compose
    • docker-compose.yml (services,networks,volumes)

실제 Production 환경에서 사용 시 유의 사항

  • Docker volumes
    • production에서는 named volumes를 사용해야한다.
  • Docker container는 read-only로 사용한다.
    • 실행 중인 컨테이너를 수정하지 말고 이미지를 새로 빌드, 런치해야한다.
    • CI/CD프로세스가 중요하다.
  • 다수의 container들을 다수의 host들에서 실행하는 것이 필요하다.
    • 용량문제와 Fail-over문제

Docker를 개인 생산성 향상을 위해 사용

  • 여러 모듈과 소프트웨어를 연동해서 개발이 가능하다. (docker-compose 이용)
  • 일관된 방식으로 소프트웨어 설치가 가능하다.

서버 관리의 어려움

: 복잡한 다수의 서버로 구성된 시스템을 효율적으로 관리하는 것은 어려운일!

해결 방안

  1. 문서화
    • 시작 단계에서는 유의미하나, 서버가 커지는 경우에 의미가 없어지거나, 불가능한 일들이 많아진다.
  2. 코드로 관리
    • Infrastructure AS Code
    • Chef, Puppet, Ansible, Terraform등 다양한 툴이 많다.
    • 단점 : Learning curve가 높다.
  3. VM도입
    • 리소스 소비가 크고, 느리다.

Docker 도입

  • 장단점
    • Docker Image로 만들면 어디서든 동작가능하다.
    • 리소스 낭비가 적고 빠른 실행이 가능하다.
    • Container의 수가 늘어나면 관리가 힘들다는 점이 있다. → 컨테이너 관리도구의 필요성
  • 많은 DevOps 엔지니어들이 Docker Image로 만들어서 운영하고있다.
  • Containerization : 모든 것의 컨테이너화
  • Docker를 기본으로하는 서비스의 배포 과정 : 개발 → 이미지 빌드 → 이미지 등록 → 컨테이너 실행의 순서를 갖는다.

Container Orchestration

: 다수의 컨테이너들이 다수의 서버위에서 실행된 상황에서 컨테이너들을 효율적으로 관리하기 위한 도구.

기능

: 한 클러스터 안에 다양한 서비스들이 공존하는 상황에서 배포, 스케일링, 네트워크, 인사이트 등의 기능들을 제공한다.

  • 소프트웨어 배포 : 서비스 이미지를 컨테이너로 배포, 롤백 기능도 수행한다.
  • 스케일링 : 특정 서비스의 Container 수를 조절하는 것.
  • 네트워크 : 서비스가 다수의 컨테이너로 나누어지면서 이들을 대표하는 로드 밸런서를 만들어주어야한다.
  • 인사이트: 노드,컨테이너의 문제 시 해결 해야한다. Logging, 분석등의 기능도 제공한다.

다양한 Orchestration tools: Mesos, Marathon, DEIL, Rancher, Nomad, Docker Swarm, K8s

→ 현재는 K8s가 중심이되어 정리되고 있다.

K8s

: 컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈소스 프레임워크

  • 확장성이 좋아 다양한 환경에서 사용된다.
    • ml : Kubeflow
    • CI/CD : Tekton
    • Service Mesh : Istio
    • Serverless : Kubeless
  • 다수의 서버에 컨테이너 기반 프로그램을 실행하고 관리한다.
    • Docker와 K8s가 같이 사용된다.
    • Pod : 같은 디스크와 네트워크를 공유하는 하나 혹은 그이상의 컨테이너들의 집합.

K8s 아키텍처

  • 기본구조 : 마스터-노드
    - Node는 물리서버이거나 가상서버가 된다.
    - 마스터는 클러스터를 관리하는 역할
    - Kubelet: 마스터와 통신하는 에이전트

이미지 출처 : https://kubernetes.io/docs/concepts/overview/components/

  • Master 내 다양한 프로세스
    • API Server (Container로 동작): kube-apiserver
      • Entrypoint of K8s cluster
      • Web UI, CLI(kubectl), API 로 접근
    • Scheduler
      • Pods 생성과 할당을 수행
    • Controller Manager
      • 전체 상황을 모니터링하고 fault tolerance를 보장한다.
    • Master는 High Availability가 중요하다.
    • etcd
      • K8s의 환경정보가 저장되는 key-value 스토어로 백업

Pod란?

  • Pod : K8s 사용자가 사용하는 가장 작은 빌딩 블록
  • 1 Pod = 1 Container가 보편적이다.
    • 하나보다 많은 경우에는 helper container가 같이 사용되기도 한다.
    • 같은 Pod안에는 디스크와 네트워크가 공유된다.
    • Fail-over를 위해 replicas(복제본)을 지정하는 것이 일반적이다.
  • Pod는 네트웍 주소를 갖는 self-contained server이다.
  • Pod 생성 예시
    • kubectl create -f pod-definition.yml : 해당 yml을 참고해서 pod생성
    • kubectl get pods : 실행중인 pod 출력
    • kubectl describe pod nginx : pod 상세정보 출력
    • kubectl run nginx —image nginx : 특정 이미지를 바탕으로 pod를 생성하고 실행

K8s/Docker 사용 예#1

쏘카 데이터 그룹 - Airflow와 함께한 데이터 환경 구축기(feat. Airflow on Kubernetes)

K8s/Docker 사용 예#2

버킷플레이스 Airflow 도입기 - 오늘의집 블로그


fault tolerance

: 장애 허용, 시스템 내에 일부분이 고장나거나 결함이 있어도 정상적으로 기능을 수행할 수 있는 시스템이다.

0개의 댓글