앞서
이 게시글은 subicura 님의 인프런 유료 강의, "초보를 위한 쿠버네티스 안내서"를 듣고 정리하기 위해 작성했습니다.
서버 관리?
- 서버의 상태를 관리하기 위한 노력 ( 밤에 출근하기 싫다. 갑자기 죽는 서버가 밉다... )
- 첫 번째 노력 : 문서화
- 환경이 조금 바뀌면 다 바뀌어야 한다.
- 두 번째 노력 : 서버 관리 도구 (CHEF, puppet, ansible ... )
- 좋기는 한데,,, 서버 관리 도구를 또 배워야 하네.
- 서버가 복잡해지면 ? 관리도 너무너무너무 복잡해짐.
- Java 도 써야 하고, Node.js 도 써야 하는데.. 한 서버에서 어떻게 하지?
- 세 번째 노력 : 가상 머신
- 서버 하나에 가상 머신 여러 개를 띄워서 쓰기 -> 안정적이고 관리도 잘 됨(느리지만..)
- 특정 vendor 에 의존하게 됨. 그리고 느림..
- 모든 실행 환경을 container 로 바꾸게 됨.
- 도커만 설치 되어 있으면 어디서든 동작하고, 쉽고, 느리지도 않다. (최고!)
컨테이너의 특징
- 가상머신에 비해 생성이 쉽고 효율적
- 컨테이너 이미지를 이용한 배포와 롤백이 간단
- 언어나 프레임워크 상관 없이, 동일한 방식으로 애플리케이션 관리
- 개발, 테스팅, 운영 환경은 물론 로컬 PC와 클라우드까지 동일한 환경을 구축
- 오픈 소스이고, 특정 클라우드 vendor 에 종속적이지 않음.
MySQL, redis, Jenkins, ... 모든 것을 컨테이너로 관리하고 싶은 욕구가 생긴다. => Containerization
도커의 등장 이후,
- 개발자가 코드 작성
- 빌드
- 컨테이너화
- 실행!
의 과정으로 개발이 이뤄지게 되었다. 드디어 편해졌나?
모든 걸 컨테이너화 하긴 했는데...
- 컨테이너가 점점 많아지면..?
- 4개일 때는 괜찮았는데, 100개, 1000개, Integer.MAX_VALUE 개가 된다면..? 어떻게 관리함???
도커 그 이후
배포는 어떻게?
- 도커 서버가 많아지면 ? 하나하나 실행하기가...
- 컨테이너가 실행되지 않는 서버도 생긴다.
- 그럼 당연히 비어있는 서버에 실행하는 게 좋은데,
- 어떤 게 비어있지??
- v1 -> v2 로 업데이트를 힘들게 서버 하나하나 접속해가며 했는데, 오류가 나서 롤백을 해야 한다
서비스 검색은 어떻게?
프록시가 있고, 컨테이너를 연결해줄 때, 컨테이너가 늘어나면 ?
- 생각할 수 있는 것 : 로드밸런서 붙이기
- 마이크로서비스가 유행하면서, 점점 컨테이너가 많아지는 데, 이럴 때 마다 도커 서버 주소를 추가해주고, 어떤 건 삭제하고... 일련의 과정이 너무 힘들다.
서비스 노출은?
기존의 방식
- public 영역에 nginx 같은 프록시 서버를 두고, 들어오는 host 에 따라서 private 영역의 내부 서버에 연결하는 방식
- 마찬가지로, 서버 하나 추가되면 nginx conf 파일 들어가서 추가해주고.. 귀찮다
모니터링은??
어떤 서버가 죽어버리거나, 느려져버리면.. 그게 하필 새벽이라면..
복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구가 필요해!
Container Orchestration 의 등장
- 서버 관리자의 일을 대신 해주는 도구
- 특징
- Cluster
- 중앙제어(Cluster)
- node 1번에는 뭐가 있고, 얼마의 리소스가 있고, 2번에는...
- 이게 많아지면 ? 사람이 알고 있기에는 한계가 있다.
- 이 많은 node 들을 cluster 라는 단위로 묶어서 관리한다.
- 상태관리(State)
- app1 이라는 이미지를 replicas 2로 설정하면 2개 뜨게, 3으로 설정하면 3개 뜨게 함.
- 3개인 상황에서 하나가 문제가 생기면, 죽이고 하나를 새로 띄워주는 것
- 배포관리(Scheduling)
- 어느 서버가 여유있는 지 찾아서, 새로운 앱을 띄울 때 그 서버에 띄워주거나, 혹은 여유 있는 서버가 없으면 서버 하나 새로 띄워주는 것
- 배포 버전관리(Rollout-Rollback)
- { version : "v2" } 로 하면 v2 로 모두 바뀌고, v1 으로 하면 모두 바뀌게 중앙에서 처리해주는 것
- 서비스 등록 및 조회(Service Discovery)
- 서버가 x.x.x.100 에 뜨면 master node 에 등록되고, 101에 하나 더 뜨면 또 등록됨.
- 설정 변경 시 프로세스 재시작을 자동으로 해줌.
- 볼륨 스토리지(Volume)
- 1번 노드는 NFS 에 연결, 2번 노드는 AWS EBS 에 연결, 3번 노드는 ...
- 손으로 일일히 할 수 있지만, 설정으로 관리해줄 수 있음.
- 중앙제어(Cluster)
Container Orchestration 은 하나의 개념이다.
다양한 게 생겼고, docker 에서 만든 docker swarm 이란 것도 있다. 하지만 kubernetes 가 암묵적인 표준이 되어버렸다
왜 kubernetes 가??
- 1주일에 20억개의 컨테이너를 생성하는 google
- 컨테이너 배포 시스템으로 사용하던 borg 를 기반으로 만듦.
- 유연하고, 어디서든 동작하며, 오픈소스이다.
- 무한한 확장성 : 머신러닝, CI/CD, 서비스메시, 서버리스 등... k8s 가 하나의 플랫폼이 되어버렸다.
- 도커도 쿠버네티스 지원하고, 아마존, azure, google 도 다 지원하게 되었다.
사실상의 표준(de facto) 이다.
마치며
- subicura 님의 강의력이 너무 좋더라구요. 그래도 제 머리가 미천하여 한 번 듣고는 기억을 못할 것 같아서 작성하게 되었습니다. 혹시 문제가 된다면 삭제하겠습니다.
'DevOps > Kubernetes' 카테고리의 다른 글
초보를 위한 쿠버네티스 안내서 (2) : 쿠버네티스 아키텍처 (0) | 2021.06.24 |
---|
최근댓글