ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] Container Orchestration
    DevOps/Kubernetes 2022. 1. 9. 17:57

    Background

    서버를 관리한다는 것은 ❔❔

    서버를 관리한다는 것은 서버 상태를 관리한다는 말이다. 즉, 서버 관리자가 서버에 문제가 없도록, 서버가 죽지 않도록 관리하는 것이다. 서버가 언제 어떠한 이유로 죽을지 모르기 때문에 서버 관리자가 서버 상태를 모두 관리하는 것은 굉장히 어려운 일이다. 그래서 서버 관리를 간편하게 하기 위한 다양한 방법들이 등장했다.

    문서화

    출처: https://kr.techbriefly.com/%EB%A9%94%EB%AA%A8%EC%99%80-%ED%95%A8%EA%BB%98-powerpoint-%ED%94%84%EB%A0%88%EC%A0%A0%ED%85%8C%EC%9D%B4%EC%85%98%EC%9D%84-%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80-%EB%AC%B4-articles-51035/

    서버의 현재 상태, 리소스 사용량, 프로그램 설치 방법 등을 문서화함으로써 서버를 관리할 수 있다.

    하지만 문서를 아무리 잘 만들었다고 해도 업데이트가 안 될 수도 있고, OS나 버전 등 환경이 바뀌면 문서가 무용지물될 수 있다.

    서버 관리 도구

     

    문서화의 관리가 힘들다는 단점을 보완하기 위해 CHEF, Puppet, Ansible과 같은 서버를 관리할 수 있는 도구들이 등장했다. 서버 관리자가 직접 서버에 접속해서 명령어를 날리는 것이 아니라 서버 관리 도구에 필요한 설정을 정의하고 도구가 대신 명령어를 날려줌으로써 간편하게 관리할 수 있다.

    하지만 이러한 서버 관리 도구를 배워야 하는 문제가 있고, 서버를 복잡하게 관리하게 되면 도구 사용법의 난이도가 높아지게 된다.

    가상 머신

    출처: https://hiseon.me/linux/ubuntu/ubuntu-virtualbox-install/

    서버 관리 도구의 복잡성을 해결할 수 있는 방법으로 가상 머신이 등장했다. 가상 머신에 하나의 프로그램만 사용할 경우 프로그램 간에 충돌 날 가능성이 없다.

    하지만 가상 머신의 경우 특정 벤더에 종속되기 때문에 클라우드 환경에서 부적합하다.

    도커

    출처: https://ko.wikipedia.org/wiki/%EB%8F%84%EC%BB%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)

    도커는 어디서든 동작하고, 사용법도 굉장히 쉬우며 가상 머신처럼 느리지 않고 효율적으로 동작한다는 장점을 가지고 있다. 이러한 장점으로 도커가 현재 대부분의 서버 관리자들의 복잡함을 해결해주고 있다.

    컨테이너의 특징

    • 가상 머신과 비교하여 컨테이너 생성이 쉽고 효율적이다.
    • 컨테이너 이미지를 이용한 배포와 롤백이 간단하다.
    • 언어나 프레임워크에 관계없이 애플리케이션을 동일한 방식으로 관리할 수 있다.
    • 개발, 테스팅, 운영 환경은 물론 로컬 PC와 클라우드까지 동일한 환경을 구축할 수 있다.
    • 특정 클라우드 벤더에 독립적이다.

     

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    이러한 다양한 컨테이너의 장점으로 서버 관리자는 모든 프로그램을 컨테이너로 관리할 수 있게 된다.

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    모든 프로그램을 컨테이너화하면 다음과 같이 정형화된 프로세스로 프로그램을 실행할 수 있게 된다.

    개발자가 코드를 작성하고 도커 이미지를 만들고(Build) 만든 이미지를 도커 허브나 저장소에 저장하고(Ship) 도커 이미지를 컨테이너로 실행(Run)한다.

    컨테이너의 수가 굉장히 많아진다면 ❔❔

    다음과 같이 4개의 앱이 컨테이너로 만들어져 있다고 가정해보자.

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    이 4개의 앱의 사용량이 점점 늘어나게 되어 부하가 많아지게 된다면 컨테이너 수를 늘려 부하를 분산할 것이다.

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    이런 식으로 계속해서 컨테이너가 굉장히 많아지게 된다면 모든 컨테이너를 관리하기 힘들 것이다.

    이러한 복잡한 컨테이너 환경을 효과적으로 관리하기 위해 필요한 기술이 컨테이너 오케스트레이션이다!!!

     

    Container Orchestration(컨테이너 오케스트레이션)

    Cluster

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    중앙 제어

    • 기존에는 서버 관리자가 각 서버 스펙, 리소스 상태, 어플리케이션 설치 등을 관리
    • 컨테이너 오케스트레이션은 노드를 추상화된 클러스터 단위로 관리
    • 노드별로 관리하는 것이 아닌 마스터 노드를 통해 클러스터 관리

    네트워킹

    • 클러스터 내의 노드 간에 원활한 네트워킹 제공

    노드 스케일

    • 클러스터 내에 노드 스케일이 커져도 관리할 수 있음

    State

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    • 컨테이너 오케스트레이션이 관리자가 원하는 상태(Desired state)에 맞춰 자동으로 상태를 관리할 수 있음
      • 장애로 인해 문제가 발생해도 상태 변화를 감지하여 설정된 상태를 유지할 수 있음

    Scheduling

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    • 유휴(idle) 리소스를 관리하여 새로운 컨테이너 생성 시 알맞은 서버에 배치 시킬 수 있음
      • 유휴 리소스가 부족한 경우 새로운 노드(서버)를 생성할 수 있음

    Rollout & Rollback

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    • 중앙에서 간단하게 버전을 관리할 수 있음

    Service discovery

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    • 새로 등록된 서비스 ip나 변경된 ip를 자동으로 관리해줌
      • e.g., 웹 서버를 등록할 경우 프록시 서버의 설정을 내부적으로 변경함

    Volume

    출처: https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

    • 각 노드에 필요한 볼륨을 설정으로 쉽게 마운트할 수 있음

    Reference

    https://www.youtube.com/watch?v=Ia8IfowgU7s&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=2

     

     

    'DevOps > Kubernetes' 카테고리의 다른 글

    [Kubernetes] Objects  (0) 2022.01.11
    [Kubernetes] Architecture  (0) 2022.01.11

    댓글

Designed by Tistory.