쿠버네티스

훈이·2022년 10월 27일
0
post-custom-banner

쿠버네티스

쿠버네티스는 컨테이너화된 애플리케이션을 자동 배포, 자동 스케일링 등을 제공하는 오픈 소스 기반 관리 시스템이다.

쿠버네티스 용어

  • 클러스터(Cluster)
    쿠버네티스에서 관리하는 가장 큰 단위를 클러스터라고 부르며, 여러 서버를 논리적으로 하나로 묶었다고 보면 된다.
    클러스터 내부에는 실제로 서비스를 담당하는 워커 노드(Worker Node)와 워커 노드를 관리하는 마스터 노드(Master Node)가 존재한다.

  • 노드(Node)
    물리 서버, 가상 서버를 의미하며 한 개의 노드는 한 대의 머신(가상 or 물리)을 뜻한다. 쉽게말해서 노드를 컴퓨터 한대라고 이해 할 수 있다.

  • 파드(Pod)
    노드 내부에 애플리케이션을 설치할 수 있는데 도커로 해당 애플리케이션의 이미지를 만든 후 도커 허브에 업로드하면 쿠버네티스에서 애플리케이션 배포에 필요한 준비는 끝난다. 애플리케이션 이미지가 있는 도커 허브 링크를 설정해준 후 이 이미지를 기반으로 컨테이너를 가지고 있는 파드를 생성할 수 있다. 파드는 하나 이상의 컨테이너를 묶은거라고 할 수 있고 쿠버네티스는 파드를 언제든지 버리고 새로만들 수 있지만 조심해야할 사항들이 있다.

    1. 파드는 자신만의 가상 IP를 받는다. 하지만 파드는 새로 생성되면 IP가 바뀌는 유동적인 특성이 있기때문에 파드를 독자적으로 배포하게 된다면 IP를 설정하기 까다롭다.

    2. 가상 IP를 가지고 있기 때문에 외부에서 파드로 접근할 수 없다. 접근하려면 경로 설정이 필요하다.

    3. 파드는 장애가 발생하면 죽을 수 있기 때문에 애플리케이션이 중단될 가능성을 가지고 있다.

    4. 사용하는 이미지를 새로운 버젼으로 업데이트 하려면 모든 파드를 새로운 애플리케이션으로 업데이트 해야한다. 즉, 지금 존재하는 파드를 제거하고 새로운 버전의 이미지를 가진 파드를 생성해야 한다.

  • 서비스(Service)
    파드의 IP가 언제든 바뀔 수 있기 때문에 파드를 참조할 수 있는 IP를 미리 정해두고 파드의 IP가 변한다면 알아서 연동해주는 기술이다. 서비스를 참조하면 서비스는 자신이 관리하는 파드에 연결해준다. 서비스는 고정적인 가상 IP를 받으므로 서비스를 제거하지 않는 한 변하지 않으므로 애플리케이션과 연동하기에 적합하다.
    그리고 서비스는 자신이 관리해야할 파드를 파악하기 위해 라벨을 붙여놓는다.

  • 레플리카세트(ReplicaSet)
    파드는 언제든지 죽을 수 있기 때문에 ReplicaSet가 파드들을 직접 관리하며 파드에 문제가 생기면 새로운 파드를 생성하는 역할을 한다. 그리고 ReplicaSet를 생성할 때 어떤 파드를 만들어야 하는지 파드 정보를 설정하는 템플릿을 가진다.

  • 디플로이먼트(Deployment)
    애플리케이션의 새로운 버전을 배포하려면 모든 파드들을 죽인 후 새로 배포해야한다. 디플로이먼트는 이러한 문제를 해결해 준다.
    ReplicaSet가 파드를 템플릿으로 가지고 있다면 디플로이먼트는 ReplicaSet를 템플릿으로 가지고 있다. 그래서 새로운 버전을 선언하는 명령어를 입력하면 디플로이먼트는 템플릿을 이용해 새로운 ReplicaSet를 생성하고 파드를 순차적으로 죽이고 새로운 파드를 생성한다. 한번에 파드를 죽이는게 아니기 때문에 애플리케이션이 정지되지 않는다.

  • 인그레스(Ingress)
    쿠버네티스 클러스터로 들어오는 요청들을 URL별로 분산시켜주는 L7 로드밸런서라고 보면된다. 같은 IP로 접근하여도 어떤 URL을 가지고 접근하는지, 어떤 패스를 가지고 접근하지에 따라 다른 서비스로 분산시켜 준다.

쿠버네티스 장점

  • 애플리케이션 생산성 향상
    애플리케이션을 개발하기 위한 환경을 통일하여 환경 세팅을 하는 등 추가적인 작업이 필요가 없어 시간이 절약된다. 버그가 발견 되면 수정하기 위해 롤백과 롤아웃 기능도 제공한다.

  • 신뢰성 있는 서비스 제공
    쿠버네티스는 배포 및 통합을 위해 서버가 정지 없이 계속해서 운영이 되며 유저들에게 신뢰성 있는 서비스를 제공한다.

  • 유연한 리소스 활용(오토스케일링)
    쿠버네티스를 사용하면 사용자가 많다면 빠르게 서버를 확장하거나 사용자가 적다면 축소하여 리소스의 낭비를 줄이고 비용을 절약한다.

참고한 사이트 :
https://deveric.tistory.com/103
https://notepad96.tistory.com/125

profile
백엔드 개발자가 되자!
post-custom-banner

0개의 댓글