쿠버네티스

Dasole Kwon·2022년 9월 13일
1

컨테이너란, 우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해주는 기술.

컨테이너를 사용할 때 필요한 도구가 컨테이너 런타임이다. 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구이며, 가장 유명한 것은 도커. 물론 도커가 사용하는 컨테이너 규격은 표준화되어있기 때문에 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용 할 수 있다.

쿠버네티스는 컨테이너 런타임을 통해 다루는 도구를 말한다. 쿠버네티스가 해주는 일은 여러 서버(노드)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용 할 비밀번호나 환경 설정을 관리하고 주입해 주는 일 등이다. 이것을 컨테이너 오케스트레이션이라고 한다.

단순한 컨테이너 플랫폼이 아닌 마이크로서비스, 클라우드 플랫폼을 지향하고 컨테이너로 이루어진 것들을 손쉽게 담고 관리할 수 있는 그릇 역할을 한다. 서버리스, CI/CD, 머신러닝 등 다양한 기능이 쿠버네티스 플랫폼 위에서 동작한다.

다양한 배포 방식

쿠버테니스가 왜 필요할까?
: 쿠버네티스를 사용하면 컨테이너화 된 애플리케이션 환경(containerized application)을 탄력적으로 실행할 수 있게 된다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 한다. 예를 들어, 컨테이너가 다운 된다면 다른 컨테이너를 다시 시작하여 가동 중지 시간을 최소화하여야 한다. 이러한 문제를 시스템에 의해 관리되도록 하는 것이 쿠버네티스의 역할이다.

쿠버네티스에서 제공하는 기능

  • 서비스 디스커버리와 로드 밸런싱 - DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출
  • 스토리지 오케스트레이션 - 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재
  • 자동화된 롤아웃과 롤백 - 원하는 상태를 서술하고 현재 상태를 원하는 상태로 설정한 속도에 따라 변경 가능
    자동화된 빈 패킹 - 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 제공
  • 자동화된 복구(self-healing) - 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체
  • 시크릿과 구성 관리 - 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리

쿠버네티스 기본개념

쿠버네티스는 원하는 상태를 계속 체크하고 문제가 있다면 자동으로 조치한다. 그렇다면 원하는 상태(desired state)이란 무엇일까? 원하는 상태란 관리자가 바라는 환경을 의미하고, 좀 더 구체적으로 얼마나 많은 웹서버가 구동되고 있으면 좋은지, 몇번 포트로 서비스하기를 원하는지 등을 말한다.

쿠버네티스는 복잡하고 다양한 작업을 하지만 자세히 들여다보면, 현재 상태를 모니터링 하면서 관리자가 설정한 원하는 상태를 유지하려고 내부적으로 이런 저런 작업을 하는 단순한 로직을 가지고 있다.


쿠버네티스에서는 yaml 또는 json파일을 사용해, 원하는 애플리케이션 상태(desired state)에 대해 명시적으로 설정 할 수 있다.

작성을 완료하고 나면, 쿠버네티스가 작성 파일에 정의 된 사양에 따라 컨테이너의 라이프 사이클을 관리한다. 쿠버네티스를 사용하면 시스템으로 컨테이너 기반 애플리케이션 및 서비스의 설정, 라이프사이클, 스케일 등을 관리 할 수 있게 된다.



쿠버네티스에서 pod을 배포할 때, 컨테이너에 필요한 각 리소스의 양을 선택적으로 지정할 수 있다. 일반적으로는 CPU, 메모리(RAM) 그리고 다양한 것들을 제한 할 수 있다.

yaml파일에 다음과 같이 컨테이너에 대한 리소스 제한(limit)을 지정하면, 설정한 제한보다 많은 리소스를 사용할 수 없도록 해당 제한을 적용한다. 그 뿐만 아니라, 해당 시스템 리소스의 최소 요청량 또한 설정할 수 있다.


Ingress 설정

다양한 웹 애플리케이션을 하나의 로드 밸런서로 서비스하기 위해 Ingress기능을 제공한다. 웹 애플리케이션을 배포하는 과정을 보면 외부에서 직접 접근할 수 없도록 애플리케이션을 내부망에 설치하고 외부에서 접근 가능한 ALB나, Nginx, Apache를 프록시 서버로 활용한다. 프록시 서버는 도메인과 Path 조건에 따라 등록된 서버로 요청을 전달하는데 서버가 바뀌거나 IP가 변경되면 매번 설정을 수정해줘야 한다.
쿠버네티스의 Ingress는 이를 자동화하면서 기존 프록시 서버에서 사용하는 설정을 거의 그대로 사용 할 수 있다. 새로운 도메인을 추가하거나, 업로드 용량을 제한하기 위해 일일이 프록시 서버에 접속하여 설정할 필요가 없다.

하나의 클러스터에 여러 개의 Ingress 설정을 할 수 있어 관리자 접속용 Ingress와 일반접속용 Ingress를 따로 관리할 수 있다.

참고:
링크텍스트
링크텍스트
링크텍스트

0개의 댓글

관련 채용 정보