터칭 데이터
서버 관리의 어려움 본문
DevOps팀이 겪는 서버 관리의 어려움
복잡한 다수의 서버로 구성된 시스템을 효율적으로 관리한다는 것은 어려운 일이다
관리해야하는 서버의 수가 늘어나면?
어느 서버가 문제가 있는지?
어느 서비스가 문제를 갖고 있는지?
이런 문제들을 얼마나 빨리 알고 해결할 수 있을지?
새로 들어온 사람이나 주니어를 잘 온보딩하려면?
문제들은 밤낮없이 연휴에도 발생
해결방안 1. 문서화
지금 서비스 상황과 셋업 방법 문서화
다양한 문제 발생시 해결 방법 문서화
문서를 현재 상황에 맞게 업데이트하는 것은 엄청난 노력
또한 상황에 따라 의미가 없는 경우도 많음
또 몇백대의 서버를 일일히 관리하고 명령을 실행한다는 것은 거의 불가능
해결방안 2. 문서화가 아닌 코드로 대신
Infrastructure As Code: DevOps 엔지니어가 꼭 알아야하는 기술
문서보다는 코드로 관리
대화형 명령보다는 자동화된 스크립트로 해결
다수의 서버들에 명령을 대신 실행해줌
다양한 툴들이 쏟아져 나옴
Chef
Puppet
Ansible
Terraform
…
단점
Learning curve가 높음
설치시 소프트웨어 충돌 문제에는 크게 도움이 안됨
해결방안 3. Virtual Machine의 도입
소프트웨어 충돌 해결을 위해 VM을 사용
한 Physical Server에 다수의 VM을 올리고 서비스별로 VM을 하나씩 할당
단점
VM이 전반적으로 리소스 소비가 크고 느림
결정적으로 특정 VM 벤더 혹은 클라우드에게 종속되어 버림 (Lock-in)
해결방안 4. Docker의 도입
모든 소프트웨어를 Docker Image로 만들면 어디서건 동작
기본적으로 리눅스 환경에 최적
VM에 비해 리소스 낭비도 적고 실행 시간도 빠름
거기다가 오픈소스라 클라우드나 특정업체 Lock-in 이슈도 없음
거의 단점이 없음
하지만 Docker Container의 수가 늘어나면서 관리가 힘들다는 점이 부각됨
다시 한번 Docker Container의 장점
Container 생성이 쉽고 빠름 (VM 비교)
Image를 통해 버전 관리를 하고 배포하고 문제시 롤백이 용이
사용 언어등의 환경에 따른 관리방법에 차이가 없음
개발, 빌드, 등록, 실행 절차가 일관되게 만들어짐 (Dev, Test, Production)
개인컴퓨터이건 프로덕션 환경이나 동일
오픈소스이기에 특정 클라우드 벤더나 업체와 독립적
Docker는 이제 서비스 배포의 기본이 됨
많은 DevOps 엔지니어들은 모든 서비스를 Docker Image로 만들어서 운영 :)
즉 빌드 프로세스 출력물은 Docker Image가 되고 있음
Github에서 빌드 프로세스를 보면 docker image를 만들고 이를 내부 Registry에 등록하는 것이 일반적
그러다보니 다수의 Docker Image들을 더 많은 수의 Docker Container로 실행 관리하는 것이 필요해짐
모든 것의 컨테이너화 -> 이를 Containerization이라고 부름
Docker를 기본으로 서비스 배포 과정
Docker Image를 기준으로 프로세스가 만들어짐
하지만 컨테이너의 수가 기하급수적으로 늘어남!
Docker Container를 효율적으로 관리할 수 있는 도구가 필요함
다수의 컨테이너를 동시에 관리
놀고 있는 서버나 너무 바쁜 서버를 어떻게 알아낼지?
마이크로서비스의 등장으로 인한 서비스 수 증가로 어떤 서비스들이 있는지 쉽게 찾을 수 있는 방법이 필요
모니터링을 어떻게 할 것인가?
특정 서비스의 컨테이너 수를 탄력적으로 어떻게 운영할 것인가?
잠깐! 마이크로서비스란?
특징
Decentralization
Modularity
Domain driven design
Focus on empowering teams
웹 서비스를 다수의 작은 서비스(microservice)들로 구현하는 방식
각 서비스들은 팀 단위로 원하는 언어/기술로 개발하는 자율성을 가짐
각 서비스들은 계약관계로 지켜야하는 책임이 있고 서비스 정보를 등록해야함
Service Registry
'Docker & K8S' 카테고리의 다른 글
K8s 소개, K8s 아키텍처, 사용예 (0) | 2023.12.22 |
---|---|
Container Orchestration 소개 (0) | 2023.12.21 |
Docker 정리 (0) | 2023.12.21 |
Airflow Docker docker-compose.yml 리뷰 (0) | 2023.12.21 |
voting application의 docker-compose.yml 개선하기 (0) | 2023.12.21 |