오늘은 Docker를 배우는 마지막 날이라 Docker의 전반적인 학습 내용을 정리하며,
Production에서 사용 시 주의점 그리고 Container Orchestration에 대해 학습하였다.
그리고 강의에서 Container Orchestration이 무엇인지 알아보며 K8s 컴포넌트 구조를 간단하게 설명주셨는데,
평소에 쿠버네티스가 궁금했던 터라 K8s에 대해 더 찾아보았다.
(다음글 : https://hyem207.tistory.com/121)
우선은 아래에 오늘 배운 내용을 정리해본다.
#️⃣ Docker를 실제 Production 환경에서 사용할 때 주의할 점
- Production에서는 Docker volumes 를 named volumes 를 써야된다.
- Docker container는 read-only 로 사용한다.
- 실행 중인 컨테이너를 수정하는 것이 아닌, 항상 이미지를 새로 빌드하고 다시 컨테이너를 새로 시작한다.
- 자동화인 CI/CD 프로세스 이용
- 다수의 Docker Container들을 다수의 호스트들에서 실행한다.
#️⃣ 서버 관리의 어려움과 해결방안
관리해야 되는 서버 수가 늘어나면 관리하기 어려워진다.
이를 위한 해결방안은 다음과 같다.
1. 문서화
현재 서비스 상황과 설정 방법을 문서화하고, 문제 발생 시 해결방법도 문서화한다.
하지만 이러한 방법은 완전한 해결법이 아님.
2. 코드로 관리
Infrastructure As Code : DevOps 엔지니어가 꼭 알아야되는 것으로, 자동화 된 스크립트로 해결한다.
이는 다수의 서버들에 명령을 대신 실행해준다.
툴로는 Chef, Puppet, Ansible, Terraform 등이 있으며, Learning curve가 높다.
또한 설치 시 소프트웨어 충돌 문제에는 크게 도움이 안 된다는 점이 있다.
3. VM 도입
소프트웨어 충돌 문제를 해결을 위해 VM을 사용할수 있다.
물리적 서버에 다수의 VM을 올리고 서비스별로 VM을 관리하는 기법
다만 VM이 리소스 소비가 크고 느리다는 단점이 있다.
4. Docker 도입
(최고의 해결법) 모든 소프트웨어를 Docker Image로 만들면 어디서든 동작한다.
- VM에 비해 리소스 낭비가 적고 Container 생성이 쉽고 빠름
- Image를 통해 버전 관리를 하고 배포하고 문제시 롤백이 용이
- 사용 언어등의 환경에 따른 관리방법에 차이가 없음
- Dev, Test, Productio환경을 일관되게 만들 수 있음
- 오픈소스라, 특정 클라우드 벤더나 업체와 독립적임
많은 회사에서 Docker를 이용하여 서비스 배포를 한다.
이때 모든 것을 컨테이너 화 한다고 하여 Containerization 라고 한다.
#️⃣ Container Orchestration
다수의 container를 효율적으로 관리하는 위한 방법
한 클러스터 안에 다양한 서비스들이 공존하는데, 자원 요청을 받아 마스터가 자원을 할당한다.
또한 배포, 스케일링, 네트워크, 인사이트 등 다양한 기능을 제공한다.
- 소프트웨어 배포 : 서비스 이미지를 Container로 배포하며, 컨테이너에 이상이 감지 되면 이전 버전으로 롤백한다.
- 스케일링 : 특정 서비스의 Container 수를 쉽게 늘리고 줄이는 것으로 서버의 utilization을 고려한다.
- 네트워크 : 서비스가 다수의 Container로 나눠짐에 따라, 앞단에 Load Balancer를 만들어줘야 하고, 서비스 디스커버리를 제공해야 된다.
- 인사이트 : 노드나 컨테이너에서 문제가 생기면이를 해결해야 된다. 또한 Logging과 Analytics등의 기능과 전체 서비스 분석을 제공해야 된다.
Container Orchestration의 대표적 툴이 K8s임
#️⃣ Kubernetes (K8s)
가장 많이 사용되는 컨테이너 관리 (Container Orchestration) 시스템
✅ 1. 컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈소스 프레임워크로,
현재 Cloud Native Computing Foundation이라는 비영리 단체에서 운영한다.
✅ 2. 확장성이 좋아 다양한 환경에서 사용된다.
- 머신러닝: Kubeflow
- CI/CD: Tekton
- Service Mesh: Istio
- Serverless: Kubeless
✅ 3. 다수의 서버에 Docker Container을 실행하고 관리한다.
이때, 같은 디스크와 네트워크를 공유하는 1개 이상의 컨테이너들의 집합인 Pod 단위로 관리된다.
✅기본 구조는 Master-Node
- Node: 물리 서버/가상 서버
- 클러스터 : Node의 집합
- Master : 클러스터를 관리해주는 역할
쿠버네티스의 컴포넌트는 다음글에 이어서 작성하겠다.
'#️⃣ Cloud&Container > Docker' 카테고리의 다른 글
[Docker] Docker compose란? (0) | 2023.06.15 |
---|---|
[Docker] Volume과 Network (0) | 2023.06.14 |
Docker 기본 정리 및 Airflow에서 Docker의 필요성 (0) | 2023.06.12 |
[Docker] 도커란? (0) | 2023.02.12 |
[Docker] 컨테이너 기본 명령어 (0) | 2023.02.12 |