일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- yarn
- AWS
- SQL
- redshift
- snowflake
- 데이터마트
- airflow.cfg
- docker-compose
- Django
- Hive
- truncate
- 컨테이너 삭제
- airflow
- 데이터레이크
- dag 작성
- docker
- ELT
- 웹 스크래핑
- ETL
- Serializer
- 데이터파이프라인
- 알고리즘
- dag
- selenium
- docker hub
- spark
- Kafka
- Django Rest Framework(DRF)
- 데이터 웨어하우스
- 웹 크롤링
Archives
- Today
- Total
개발 기록장
05. Kubernetes(K8s) 본문
반응형
학습 주제: Docker 정리, Kubernetes(K8s)
Docker 정리
Docker 관련 용어
Docker 란?
: 소프트웨어를 이미지 -> 컨테이너화 하여 독립된 환경에서 실행할 수 있는 플랫폼, 다른 소프트웨어와의 의존성을 줄일 수 있다.
- Docker Image: 소프트웨어를 패키지화 한 것(독립적)
- Dockerfile: Docker Image 빌드하기 위한 명령어를 담은 텍스트 파일, Docker Image를 Docker Container화 하기 위한 환경설정 파일
- Docker Container: Image를 기반으로 만들어진 SW의 독립된 환경
- Docker Hub (hub.docker.com): Docker Image를 위한 Reop. 생성 한 Image를 다른 사람(팀원)과 공유하여 사용하거나 Docker Hub로 부 터 새로운 이미지를 다운받아 사용
- Docker Compose: 다수의 컨테이너 Docker 애플리케이션을 정의하고 다루기 위한 것(편의성 증대)
Docker 실제 Production 환경에서 사용 시 유의할 점
- Docker volumes
- Host volume은 보통 개발 시 소스코드르 바로 container 안으로 마운트하기 위함
- Production에서는 named volumes를 써야함
- Docker container는 read-only로 사용
- 내용을 바꿔야한다면 실행 중인 컨테이너를 수정하지 말 것
- 항상 이미지를 새로 빌드하고 다시 컨테이너들을 새로 론치
- 자동화가 중요해짐: CI/CD 프로세스
- 다수의 Docker Container들을 다수의 호스트들에서 실행 필요
- 용량 문제와 Fail-over(또는 fail-tolerant)
개인 생산성 향상을 위해 Docker 사용
- 개발 시 필요한 모듈을 Docker 이미지로 받아와서 Container로 실행
- 여러 소프트웨어를 연동해서 개발 시 이것들을 docker-compopse로 설정
장점
- 일관된 방식으로 소프트웨어 설치(문서화하고 매뉴얼하게 설치 불필요)
- 분리된 충돌없는 환경에서 소프트웨어 설치/실행
서버 관리의 어려움
: 복잡한 다수의 서버로 구성된 시스템을 효율적으로 관리하기는 어려운 일
해결방안: 문서화
- 현재의 서비스 상황과 셋업 방법 문서화
- 다양한 문제 발생 시 해결 방법 문서화
- 문서를 현재 상황에 맞게 업데이트하는 것은 엄청난 노력
- 상황에 따라 의미 없는 경우도 많음
- 몇백 대의 서버를 일일이 관리하고 명령을 실행한다는 것은 거의 불가능에 가까운 일
해결방안: 문서화가 아닌 코드로 대신
- Infrastructure As Code: DevOps 엔지니어가 꼭 알아야 하는 기술
- 문서보다는 코드로 관리
- 대화형 명령보다는 자동화된 스크립트로 해결
- 다수의 서버들에 명령을 대신 실행해 줌
- 다양한 툴들이 존재
- Chef
- Puppet
- Ansible
- Terraform
- 단점
- Learning curve가 높음
- 설치 시 소프트웨어 충돌 문제에는 크게 도움이 안 됨
해결방안: Virtual Machine 도입
- 소프트웨어 충돌 해결을 위해 VM을 사용
- 한 Physical Server에 다수의 VM을 올리고 서비스별로 VM을 하나씩 할당
- 단점
- VM이 전반적으로 리소스 소비가 크고 느림
- 결정적으로 특정 VM 벤더 혹은 클라우드에게 종속됨(Lock-in)
해결방안: Docker의 도입
- 모든 소프트웨어를 Docker Image로 만들면 어디서든 동작함
- 기본적으로 리눅스 환경에 최적
- VM에 비해 리소스 낭비도 적고 실행 시간도 빠름
- 오픈소스이므로 클라우드나 특정업체 Lock-in 이슈도 없음
- 거의 단점 없음
- 하지만 Docker Container의 수가 늘어나면서 관리가 힘들다는 점이 부각됨
Docker의 장점
- Container 생성이 쉽고 빠름(VM과 비교했을 때)
- Image를 통해 버전 관리를 하고, 배포 후 문제 발생 시 롤백이 용이함
- 사용 언어 등의 환경에 따른 관리방법에 차이가 없음(환경의존성 X)
- 개발, 빌드, 등록, 실행 절차가 일관되게 만들어짐(Dev, Test, Production)
- 개인 컴퓨터와 프로덕션 환경이 동일
- 오픈소스이므로 특정 클라우드 벤더나 업체와 독립적
Docke은 서비스 배포의 기본이 됨
- 많은 DevOps 엔지니어들은 모든 서비스를 Docker Image로 만들어서 운영
- 즉, 빌드 프로세스 출력물은 Docker Image가 되고 있음
- Github에서 빌드 프로세스를 보면 docker image를 만들고 이를 내부 Registry에 등록하는 것이 일반적
- 따라서, 다수의 Docker Image들을 더 많은 수의 Docker Container로 실행 관리하는 것이 필요해짐
- 모든 것의 컨테이너화: Containerization
Container Orchestration 소개
: 다수의 Container을 효율적으로 관리하는 것
Container Orchestration 기능: 요약
- 한 클러스터 안에 당야한 서비스들이 공존함(DB, Web Service, Backend 등)
- 자원 요청을 받아 마스터가 자원을 할당
- 다양한 기능 제공: 배포, 스케일링, 네트워크, 인사이트 등
Container Orchestration 기능: 소프트웨어 배포
- 서비스 이미지를 Container로 배포
- 이상이 감지되면 안정적이었던 이전 버전으로 롤백
- ex) v1에서 v2로 배포되는 경우 문제 발생하면 v1으로 롤백
- Container의 수가 많을수록 큰 이슈가 됨
- DevOps 팀 관점에서 보면 가장 중요한 기능
Container Orchestration 기능: 스케일링
- 특정 서비스의 Container 수를 쉽게 늘리고 줄이는 것
- 이때 서버의 utilization도 고려
Container Orchestration 기능: 네트워크
- 서비스가 다수의 컨테이너로 나눠지면서 이들을 대표하는 Load Balancer를 만들어주어야 함
- 서비스들간에 서로를 쉽게 찾을 수 있어야 함
- 서비스 디스커버리
Container Orchestration 기능: 인사이트
- 노드/컨테이너 문제 시 해결
- 예를 들어, 서버 2의 어떤 기능이 다운되면 이를 서버 3에서 재실행
- 그에 맞게 로드밸런서 정보도 수정
- Logging/Analytics 등의 기능 제공
- 외부 서비스 plug and play
- 전체 서비스 분석
- 시각화
- 문제 분석
Container Orchestration Tool
- Mesos
- Marathon
- DEIS
- Rancher
- Nomad
- Docker Swarm
- Kubernetes(K8s): 대부분 K8s 사용, 모든 클라우드 업체들은 이것 관련 서비스를 내놓고 있음(ex. EKS, AKS, GKE)
Kubernetes(K8s)
Kubernetes(K8s) 소개
컨테이너 기반 서비스 배포/스케일/관리 자동화 해주는 오픈소스 프레임 웍
- 구글에서 사용하던 Borg 서비스를 오픈소스화 함(2015년)
- 클라우드나 on-prem 모두에서 잘 동작
- 어떤 컨테이너에서도 가능하지만 주로 Docker Container들이 대상이 됨
- 물리서버나 가상서버 위에서 모두 동작
지금은 Cloud Native Computing Foundation이라는 비영리 단체에서 운영
- 클라우드 환경에서 어떻게 소프트웨어를 배포하는 것이 효율적인가
- 컨테이너, 서비스메시, 마이크로서비스, API, DevOps, On-demand Infra
- 클라우드 환경에서 어떻게 소프트웨어를 배포하는 것이 효율적인가
가장 많이 사용되는 컨테이너 관리(Orchestration) 시스템
- 사용회사와 커뮤니티 활동이 굉장히 많고 활발함
- 카카오, 네이버, 라인, 쿠팡 등의 국내 업체도 활발히 사용
- 모든 글로벌 클라우드 업체들이 지원: EKS, AKS, GKE
확장성이 좋아 다양한 환경에서 사용됨
- 머신러닝: Kubeflow
- CI/CD: Tekton
- Service Mesh: Istio
- Serverless: Kubeless
다수의 서버에 컨테이너 기반 프로그램을 실행하고 관리
- 컨테이너 기반 프로그램: Docker Container
- 보통 Docker와 K8s는 같이 사용됨
- Pod: 같은 디스크와 네트워크를 공유하는 1+ 컨테이너들의 집합
Kubernetes(K8s) 아키텍처
기본 구조
마스터 - 노드
노드는 물리서버이거나 가상서버
- Kubelet: 마스터와 통신하는 에이전트
클러스터는 1+ 노드의 집합
마스터는 클러스트를 관리하는 역할 수행
K8s 프로세스
- Master안에는 여러 프로세스들이 돌고 있음
- API Server(Container로 동작): Kube-apiserver
- Entrypoint of K8s cluster
- Web UI, CLI(Kebectl), API
- Scheduler
- Posd 생성과 할당(노드들의 상황 고려 - utilization)
- Controller Manager
- 전체 상황을 모니터링하고 fault tolerance 보장
- Master는 Hign Availability가 중요함
- etcd
- K8s 환경 설정 정보가 저장되는 key/value 스토어로 백업됨
- API Server(Container로 동작): Kube-apiserver
- Controller runtime
- 대부분 Docker가 사용됨
Pod란?
- K8s 사용시 컨티에너를 바로 다루지 않음
- Pod: K8s 사용자가 사용하는 가장 작은 빌딩 블록
- 1 Pod = 보통은 하나의 container로 구성
- 하나보다 많은 경우에는 보통 helper container가 같이 사용됨
- 같은 Pod 안에서는 디스크와 네트워크가 공유됨
- Fall-over를 위해 replicas를 지정하는 것이 일반적
- 다양한 방법으로 복제본을 유지
- 하나보다 많은 경우에는 보통 helper container가 같이 사용됨
- Pod는 네트워크 주소를 갖는 self-contained server
반응형
'데브코스(DE) > Docker & K8S' 카테고리의 다른 글
04. Docker Compose (0) | 2024.05.30 |
---|---|
03. Docker Volume과 다수 컨테이너 SW 다루기 (0) | 2024.05.29 |
02. Docker에서 웹 서비스 실행 (0) | 2024.05.28 |
01. Docker (0) | 2024.05.28 |