[TIL - 49일 차] Docker & K8S 실습 (5)

2024. 5. 30. 11:19·[프로그래머스] 데이터 엔지니어링 데브코스 3기/TIL(Today I Learn)

원래 오늘 Docker & K8s 실습 (4)를 진행해야 하는데, 노트북으로 강의를 수강하게 되어 실습이 없는 (5)를 먼저 수강하게 되었다.

K8s 맛보기

K8s의 학습은 어렵기 때문에 왜 필요하고 어떤 기능을 해주는지, 그리고 Docker와 어떻게 서로 보완적인 관계인지 이해와 기본적인 사용법을 익히는 것을 목표로 한다.

Docker 정리

Docker 관련 용어

  • Docker Image (Dockerfile)
  • Docker Container
  • Docker Hub (hub.docker.com)
  • Docker Compose
    • 다수의 Docker Container 관리
    • docker-compose.yml (servises, networks, volumes)

실제 Production 환경에서 사용할 때 유념할 점

  • Docker volumes
    • Host volume은 보통 개발 시 소스코드를 바로 Container안으로 마운트 하기 위함
    • Production에서는 named volumes를 써야 함
  • Docker Container는 read-only로 사용
    • 내용을 바꿔야 한다면 실행 중인 컨테이너를 수정하지 말 것
    • 항상 이미지를 새로 빌드하고 다시 컨테이너로 새로 론치
    • 자동화가 중요해짐 : CI / CD 프로세스
  • 다수의 Docker Container를 다수의 호스트에서 실행
    • 용량 문제
    • Fail-over, Fail-tolerant

생산성 향상을 위해 사용

  • 개발 시 모듈을 Docker 이미지로 받아와서 Container로 실행
  • 여러 소프트웨어를 연동해서 개발 시 docker-compose로 설정
  • 장점
    • 일관된 방식으로 소프트웨어 설치
    • 분리된 충돌없는 환경에서 소프트웨어 설치/실행

서버 관리의 어려움

관리할 서버의 수 증가

  • 어느 서버 / 서비스에 문제가 있는지 알기 힘듦
  • 새로 들어온 사람이 이해하기 힘듦
  • 문제들은 밤낮없이 연휴에도 발생

해결 방안 (1) - 문서화

  • 서비스 상황과 셋업 방법 문서화
  • 다양한 문제 발생 시 해결 방법 문서화
  • 문서를 상황에 맞게 업데이트하는 것은 엄청난 노력

해결 방안 (2) - 문서화 대신 코드

  • Intrastructure As Code : DevOps 엔지니어가 꼭 알아야 하는 기술 (Chef, Puppet, Ansible, Terraform 등)
  • 문서보다는 코드로 관리
    • 대화형 명령보다는 자동화된 스크립트로 해결
    • 다수의 서버에서 명령을 대신 실행
  • 단점
    • Learning Curve가 높음 = 배우기가 힘듦
    • 설치 시 소프트웨어 충돌 문제는 크게 도움이 안 됨

해결 방안 (3) - Virtual Machine 도입

  • 소프트웨어 충돌 해결을 위해 VM 사용
  • 단점
    • 전반적으로 리소스 소비가 크고 느림
    • 특정 VM 벤더 혹은 클라우드에게 종속되어 버림 (Lock-in)

해결 방안 (4) - Docker 도입

  • 모든 소프트웨어를 Docker Image로 만들면 어디서든 동작
  • VM에 비해 리소스 낭비가 적고 실행 시간도 빠름
  • 오픈소스라 클라우드나 특정 업체 Lock-in 이슈도 없음
  • Docker Container 수가 늘어나면서 관리가 힘들어짐

Container Orchestration 소개

다수의 Container를 관리하기 위해 다양한 문제들을 효율적으로 관리하기 위한 도구를 Container Orchestration이라고 부른다.

Container Orchestration 기능 - 요약

  • 한 클러스터 안에 다양한 서비스들이 공존 (DB, Web Server, Backend 등)
  • 다양한 기능 제공 : 배포, 스케일링, 네트워크, 인사이트 등

Container Orchestration

Container Orchestration 기능 - 소프트웨어 배포

  • 서비스 이미지를 Container로 배포
  • 이상이 감지되면 이전 안정 버전으로 롤백
    • v1 -> v2로 배포되는 경우 문제가 생기면 v1으로 롤백
    • Container가 많을수록 큰 이슈가 됨
    • DevOps 팀 관점에서 보면 가장 중요한 기능

소프트웨어 배포

Container Orchestration 기능 - 스케일링

  • 특정 서비스의 Container 수를 쉽게 늘리고 줄이는 것
  • 이때 서버의 Utilization도 고려

Utilization 고려

Container Orchestration 기능 - 네트워크

  • 서비스가 다수의 컨테이너로 나눠지면서 이를 대표하는 Load Balancer를 만들어줘야 함
  • 서비스 간 서로를 쉽게 찾을 수 있어야 함 (서비스 디스커버리)

네트워크

Container Orchestration 기능 - 인사이트

  • 노드 / 컨테이너 문제 시 해결
    • 서버 2의 F가 다운되면 이를 서버 3에서 재실행
    • F 로드밸런서 정보도 맞게 수정
  • Logging / Analytics 등의 기능 제공
  • 전체 서비스 분석

인사이트

K8s 소개

Kubernetes 소개

  • 컨테이너 기반 서비스 배포 / 스케일 / 관리 자동화를 해주는 오픈소스 프레임워크
    • 클라우드나 on-prem 모두 동작
    • 물리서버나 가상서버 위에서 동작
    • 주로 Docker Container 대상
  • 지금은 Cloud Native Computing Foundation이라는 비영리 단체에서 운영
  • 가장 많이 사용되는 컨테이너 관리 시스템
    • 사용 회사와 커뮤니티 활동이 활발
    • 카카오, 네이버, 라인, 쿠팡 등의 국내 업체도 활용
    • K8s 위에 기능을 추가한 Container Orchestration 툴이 생김
  • 확장성이 좋아 다양한 환경에서 사용
    • 머신러닝 : Kubeflow
    • CI / CD : Tekton
    • Service Mesh : Istio
    • Serverless : Kubeless

K8s 아키텍처

기본 구조 : 마스터 - 노드

  • High Availability : 여러 개의 서버를 구성하여 서버 하나가 다운돼도 서비스가 계속 운영되도록 하는 것
  • 노드 : 물리 서버이거나 가상 서버
  • 클러스터 :하나 이상의 노드의 집합
  • 마스터 : 클러스터를 관리해 주는 역할 수행

마스터 - 노드

기본 구조 : K8s 프로세스

  • Master에는 여러 프로세스가 실행됨
    • API Server : kube-apiserver, K8s 클러스터의 엔트리포인트 (Web UI, kubectl (CLI), API)
    • Scheduler : Pods 생성과 할당
    • Controller Manager : 전체 상황을 모니터링하고 fault tolerance 보장
    • etcd : K8s 환경 설정 정보가 저장되는 key / value 스토어에 백업
    • Master는 High Availability가 중요

Pod

  • K8s 사용자가 사용하는 가장 작은 빌딩 블록
  • K8s는 컨테이너를 바로 다루지 않음
  • 1 Pod = 보통은 하나의 Container로 구성
  • Pod는 네트워크 주소를 갖는 self-contained server

Pod

Kubectl : 커맨드라인 툴

  • kubectl run hello-minikube
  • kubectl cluster-info
  • kubectl get node

K8s / Docker 사용 예 살펴보기

 

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

지난 3년간 Airflow 구축 및 운영기록

tech.socarcorp.kr

 

 

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

탁월한 데이터플랫폼을 위한 Airflow 도입기

www.bucketplace.com

'[프로그래머스] 데이터 엔지니어링 데브코스 3기 > TIL(Today I Learn)' 카테고리의 다른 글

[TIL - 51일 차] Airflow 고급기능과 DBT, 데이터 디스커버리 (1)  (0) 2024.06.03
[TIL - 50일 차] Docker & K8S 실습 (4)  (0) 2024.05.31
[TIL - 48일 차] Docker & K8S 실습 (3)  (0) 2024.05.29
[TIL - 47일 차] Docker & K8S 실습 (2)  (0) 2024.05.28
[TIL - 46일 차] Docker & K8S 실습 (1)  (0) 2024.05.27
'[프로그래머스] 데이터 엔지니어링 데브코스 3기/TIL(Today I Learn)' 카테고리의 다른 글
  • [TIL - 51일 차] Airflow 고급기능과 DBT, 데이터 디스커버리 (1)
  • [TIL - 50일 차] Docker & K8S 실습 (4)
  • [TIL - 48일 차] Docker & K8S 실습 (3)
  • [TIL - 47일 차] Docker & K8S 실습 (2)
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타
        • 취업 & 진로
        • 회고록
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[TIL - 49일 차] Docker & K8S 실습 (5)
상단으로

티스토리툴바