일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터 엔지니어
- Tableau
- Snowflake
- django
- AWS
- 슈퍼셋
- 팀 프로젝트
- cloud platform
- PCCP
- VPC
- sql챌린지
- 코딩 테스트
- airflow
- Til
- beuatifulsoup
- 데브코스
- sqlsolve
- GCP
- superset
- 코딩테스트
- 데이터 시각화
- Kafka
- Spark
- SQL
- Selenium
- 코테 연습
- solvesql
- HTML
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
데이터 엔지니어링 50일차 TIL 본문
학습내용
Docker 사용시 유의점
- Docker Volumes
- Host volume은 보통 개발시 소스코드를 바로 ontainer안으로 마운트 하기 위함
- Production에서는 named volumes를 써야한다
- Docker container는 read-only로 사용한다
- 내용을 바꿔야한다면 실행 중인 컨테이너를 수정하지 말 것
- 항상 이미지를 새로 빌드하고 다시 컨테이너들을 새로 론치한다
- 자동화가 중요하다 : CI/CD 프로세스
- 다수의 Docker Container들을 다수의 호스트들에서 실행 필요
- 용량 문제와 Fail-over(fail-tolerant)
관리해야하는 서버의 수가 늘어난다면?
해결방안
1. 문서화
- 지금 서비스 상황과 셋업 방법 문서화
- 다양한 문제 발생시 해결 방법 문서화
=> 단점 : 완벽한 문서화는 거의 불가능하다
2. 코드로 대신하기
- Infrastru ture As Code : DevOps엔지니어가 꼭 알아야하는 기술
- 문서보다는 코드로 관리
- Chef, Puppet, Ansible, Terraform 등의 다양한 툴을 사용
=> 단점 : Learning curve가 높다
설치시 소프트웨어 충돌 문제에는 큰 효과가 없다.
3. Vitrual Machine의 도입
- 소프트웨어 충돌해결을 위해 VM을 사용
- 한 Physical Server에 다수의 VM을 올리고 서비스별로 VM을 하나씩 할당
=> 단점 : VM이 전반적으로 리소스 소비가 크고 느리다
결정적으로 특정 VM 벤더 혹은 클라우드에게 종속되어 버림(Lock-in)
4. Docker의 도입
- 모든 소프트웨어를 Docker Image로 만들면 어디서건 동작 가능
- 기본적으로 리눅스 환경에 최적화되어 있다
- VM에 비해 리소스 낭비도 적고 실행 시간도 빠르다
=> 단점 : Docker Container의 수가 늘어나면서 관리가 힘들다는 점이 부각되고 있다.
Container-Orchestration
: 다수의 container들을 관리하는 방식
- 다양한 문제들을 효율적으로 관리하기 위한 도구
1. 소프트웨어 배포 기능
- 서비스 이미지를 Container로 배포
- 이상이 감지되면 이전 안정 버전으로 롤백
- v1에서 v2로 배포가 되는 경우 문제가 생기면 v1으로 롤백
- Container의 수가 많을수록 큰 이슈가 된다
- DevOps팀 관점에서 보면 가장 중요한 기능이다
2. 스케일링 기능
- 특정 서비스의 Container 수를 쉽게 늘리고 줄이는 것
- 이때 서버의 utilization도 고려해야한다
3. 네트워크 기능
- 서비스가 다수의 컨테이너로 나눠지면서 이들을 대표하는 Load Balancer를 만들어 주어야한다.
- 서비스들간에 서로를 쉽게 찾을 수 있어야한다.
- 서비스 디스커버리
4. 인사이트 기능
- 노드/컨테이너 문제발생시 해결
- 서버2의 F가 다운되면 이를 서버 3에 재실행
- F 로드밸런서 정보도 맞게 수정
- Logging/Analytics 등등의 기능 제공
- 외부 서비스 plug and play
- 전체 서비스 분석
- 시각화, 문제분석
Container Orchestration 툴의 종류
: Mesos, Marathon, DEIS, Rancher, Nomad, Docker Swarm, K8S
=> K8s를 중심으로 정리가 되고 있고 모든 클라우드 업체들은 K8s관련 서비스를 내고 있다. ex) EKS(AWS), AKS(Azure), GKE(Google)
Kubernetes(K8s)
- 컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈소스 플랫폼
- 구글에서 사용하던 Borg를 서비스를 오픈소스화함
- 클라우드나 on-prem 모두에서 잘 동작
- 어느 컨테이너이던지 가능하지만 주로 Docker Container들이 대상이 된다.
- 물리서버나 가상서버 위에서 모두 동작한다
- 가장 많이 사용되는 컨테이너 관리시스템
- 사용회사와 커뮤니티 활동이 굉장히 많고 활발하다
- 카카오, 네이버, 라인, 쿠팡 등의 국내 업체도 활발히 사용
- K8s위에 기능을 추가한 Container Orchestration 툴들이 생겨남
- 모든 글로벌 클라우드 업체들이 지원 : EKS, AKS, GKE
- 확장성이 좋아서 다양한 환경에서 사용된다
- 머신러닝 : Kubeflow
- CI/CD : Tekton
- Service Mesh : Istio
- Serverless : Kubeless
- 다수의 서버에 컨테이너 기반 프로그램을 실행하고 관리
- 컨테이너 기반 프로그램 == Docker Container
- 보통 Docker와 K8s는 같이 사용됨
- Pod : 같은 디스크와 네트웍을 공유하는 하나 혹은 그 이상의 컨테이너들의 집합
K8s의 기본구조
- 마스터-노드 구조
- Kebelet : 마스터와 통신하는 에이전트
- 노드는 물리서버이거나 가상서버이다
- 프로세스들
- API Server(Container로 동작) : Kube-apiserver
- Entrypoint of K8s Cluster
- Web UI, CLI(kubectl), API
- Scheduler : pdos생성과 할당(노드들의 상황 고려 - utilization)
- Controller Manager : 전체 상황을 모니터링하고 falut tolerance보장
- 마스터는 High Availablity가 중요하다
- etcd : K8s 환경설정 정보가 저장되는 key/value 스토어로 백업된다
- Controller runtime : 대부분 도커가 사용됨
Kubectl 커맨드라인 툴
- Kubectl run 하드이름 :
- Kubectl cluster-info : 클러스터 상황보기
- Kubectl get node : 노드셋팅 보기
Pod란?
- K8s 사용자가 사용하는 가장 작은 빌딩 블록
- 1 Pod = 보통 하나의 Container로 구성
- 하나보다 많은 경우에는 보통 helper container가 같이 사용됨
- 같은 Pod 안에서는 디스크와 네트워크가 공유가 된다
- Fail-over를 위해 replicas를 지정하는 것이 일반적이다
- 다양한 방법으로 복제본을 유지
- Pod는 네트워크 주소를 갖는 self-contained server이다
Pod 생성의 예
- Kubectl create -f pod-definition.yml : 하드를 생성
- Kubectl get pods : 지금 돌고 있는 모든 하드를 보여줌
- Kubectl describe pod nginx : nginx하드의 상세한 정보를 보여줌
- Kubectl run nginx --image nginx : 하드를 생성하고 이름을 줌
1. Docker란?
리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트이다. 가볍고 빠른 배포가 장점이다.
2. Docker 용어 정리
- Docker Image : 애플리케이션 실행에 필요한 모든 것을 포함하는 패키지이다.
- Dockerfile : Docker Image를 빌드하기 위한 명령어들을 포함한 텍스트 파일이다. Docker build명령어를 사용해 도커 이미지를 생성할 수 있다.
- Docker Container : 애플리케이션과 그 실행에 필요한 모든 것을 포함하는 가상화된 런타임 환경으로 이미지를 기반으로 생성되며 독립적으로 실행가능하다.
- Docker Hub (hub.docker.com) : Docker Image를 저장하고 공유할 수 있는 온라인 공간이다. 공개, 개인 이미지를 호스팅하며 이미지를 검색, 다운로드, 업로드 할 수 있다.
- Docker Compose : 멀티 컨테이너를 사용할 때 정의하고 실행하기 위한 도구이다. docker-compose.yml 파일을 사용하여 구성요소를 정의 할 수 있다.
3. Docker 사용시 주의할 점
: 이미지 크기를 최소화하여 빌드시간과 저장 공간을 절약할 수 있도록하며, 보안패치를 적용하고 신뢰할 수 있는 이미지를 사용할 수 있도록 하며, 민감한 정보를 포함하지 않도록 한다.
4. Kubernetes (K8s) 이란?
컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈소스 플랫폼이다.
'데브코스' 카테고리의 다른 글
데이터 엔지니어링 52일차 TIL (1) | 2024.06.05 |
---|---|
데이터 엔지니어링 51일차 TIL (1) | 2024.06.05 |
데이터 엔지니어링 49일차 TIL (0) | 2024.06.05 |
데이터 엔지니어링 48일차 TIL (1) | 2024.06.05 |
데이터 엔지니어링 47일차 TIL (0) | 2024.06.05 |