쿠버네티스(Kubernetes)_1편 요약
지난 시간 쿠버네티스에 대한 간략한 정의와 탄생 배경에 관해 알아보았습니다.
쿠버네티스는 컨테이너의 배포, 관리, 확장 및 네트워킹을 자동화하는 하는 역할을 합니다.
쿠버네티스의 이점
쿠버네티스를 사용하여 MSA(MicroService Architecture)를 관리할 때, 주요한 이점은 아래와 같아요.
MSA란?
- 작고, 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크.
- 컨테이너 오케스트레이션 비용 절감.
- MSA를 위한 데브옵스 효율성 향상
- 멀티 클라우드 환경에서 워크로드 배포 용이
- 종속 가능성 없는 이식성 제고
- 배포 자동화 및 확장성 강화
- 클라우드 환경에서의 앱 안정성 및 가용성 강화
- 오픈소스 생태계의 일부로서 이용하기 편리
쿠버네티스_1편에서도 확인할 수 있듯, 쿠버네티스는 보유한 리소스를 최대한 활용하고, 효율적인 워크플로우를 제공하기 때문에, 자연스레 비용이 절감됩니다. 또, 자동화된 데브옵스 프로세스를 통해 소프트웨어 개발자의 작업을 단순화하여 효율을 높여줍니다. 이는 생산성의 향상으로도 연결됩니다.
쿠버네티스가 제공하는 기능
컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법입니다. 하지만 저도 프로젝트를 하며 경험했지만, 쿠버네티스 없이 도커로 컨테이너를 관리하는데 불편함을 많이 느꼈습니다. 컨테이너가 다운되면 다시 시작해야 하고... 이러한 문제를 시스템을 통해 해결하면 더 좋지 않을까? 하는 점이 바로 쿠버네티스가 필요한 이유입니다.
쿠버네티스는 아래와 같은 기능을 제공합니다.
- 서비스 디스커버리와 로드 밸런싱
쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 통해 컨테이너를 노출할 수 있습니다. 컨테이너에 대한 트랙픽이 많다면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있게 해 줍니다.더보기DNS?
DNS는 Domain Name System의 약자로, 인터넷 전화번호부입니다.
만약 사용자가 'naver.com'과 같은 도메인 이름을 웹 브라우저에 입력하면 DNS는 해당 사이트의 IP 주소를 찾는 역할을 합니다.
로드밸런싱?
로드밸런싱은 네트워크 기술의 일종으로, 둘 이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 부하(Load)를 나누는 것을 의미합니다. 이로 인해 가용성 및 응답시간을 최적화시킬 수 있습니다. - 스토리지 오케스트레이션
로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있습니다. - 자동화된 롤아웃과 롤백
배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있습니다.
예를 들어, 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있습니다. - 자동화된 bin packing
컨테이너화된 작업을 실행하는 데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공합니다. 각 컨테이너가 필요로 하는 CPU와 메모리를 쿠버네티스에게 지시합니다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해줍니다.더보기클러스터?
클러스터는 공통의 목표를 위해 작동하는 컴퓨터 또는 애플리케이션들의 그룹입니다.
클러스터 노드는 클러스터를 구성하는 개별 컴퓨터 시스템 또는 가상 머신을 말합니다. - 자동화된 복구
쿠버네티스는 실패한 컨테이너를 재가동하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컩테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않습니다.더보기사용자 정의 상태 검사?
쿠버네티스에서 사용자 정의 상태 검사란 새로운 리소스 유형을 정의하는 메커니즘 입니다.
사용자가 쿠버네티스 클러스터에 새로운 리소스 유형을 추가할 수 있도록 합니다. - 시크릿과 구성 관리
쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리할 수 있습니다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트할 수 있습니다.
쿠버네티스 활용
쿠버네티스를 처음 구성할 때 사용할 수 있는 도구에는 여러 가지가 있습니다.
상황에 따라 선택 가능한 도구가 여러 가지이고, 도구마다 설치, 구성방법이 다르기 때문에 상황에 맞는 도구를 선택하는 것도 중요합니다.
아래에서는 몇 가지의 도구를 살펴보겠습니다.
미니쿠브(minikube)
개발 용도에 적합한 쿠버네티스 구성 방법은 '미니쿠브(minikube)'입니다.
미니쿠브의 특징은 로컬 시스템에 쉽게 설치 가능하다는 것입니다. 리눅스, 맥 OS, 윈도우를 지원하며, 설치 파일 이외에도 각 OS가 지원하는 패키지 매니저를 활용하여 편리하게 설치 가능합니다. 설치가 간단하면서도 쿠버네티스의 대부분의 기능을 활용할 수 있다는 장점이 있습니다. 또한, 인텔리제이와 같은 개발도구들과 연계가 가능해 프로젝트가 쿠버네티스 상에서 동작하는 결과를 바로 확인할 수 있습니다.
하지만 미니쿠브는 로컬에 설치되며 단일 노드 형태로 동작하기 때문에 다중 노드를 구성하여 수행해야 하는 작업에는 맞지 않습니다. 또, 노드를 가상화 형태로 생성하기 때문에 도커, 버추얼박스 등의 가상화 도구가 추가로 필요합니다.
세줄 요약
용도 : 간단한 학습 및 개발 환경 구성
장점 : 설치가 쉽고 개발 도구와의 연계가 편리함
단점 : 단일 노드만 지원하며 추가적인 가상화 도구 필요
K3s
k3s는 보다 실질적으로 활용 가능한 쿠버네티스 클러스터를 구성하고 싶은데 리소스가 충분하지 않을 경우에 적합합니다.
k3s는 랜처랩스(Rancher Labs)에서 개발한 경량의 쿠버네티스 배포판으로 CNCF(Cloud Native Computing Foundation)의 샌드박스 프로젝트로 육성되고 있습니다.
k3s는 쿠버네티스와 완전히 호환하며 아래와 같은 향상된 기능을 갖춘 배포판입니다.
- 단일 바이너리로 패키지화
- 기본 스토리지 메커니즘으로 splite3을 기반으로 하는 경량 스토리지 백엔드
- 복잡한 TLS 및 옵션을 처리하는 간단한 런처에 포함
- 경량 환경을 위한 합리적인 기본값으로 기본적으로 보안을 유지
- 다음과 같이 간단하지만 강력한 'batteries-included' 기능 추가.
ex)
- local storage provider
- service load balancer
- Helm controller
- Traefik ingress controller - 모든 쿠버네티스 컨트롤 플레인 구성 요소의 작동은 단일 바이너리 및 프로세스로 캡슐화. 이를 통해 k3s는 인증서 배포와 같은 복잡한 클러스터 작업을 자동화하고 관리
- 외부 종속성 최소화(최신 커널과 cgroup 마운트만 필요)
세줄 요약
용도 : 쿠버네티스와 완전히 호환되는 가벼운 배포판
장점 : 설치가 쉽고 시스템 리소스를 적게 사용, 높은 쿠버네티스 호환성
단점 : 구조가 단순하여 높은 성능, 안정성을 요구하는 시스템에는 부적합
랜처(Rancher)
조금 더 대규모 환경에 적합한 쿠버네티스 구성 방법에는 랜처가 적합합니다.
랜처는 k3s와 마찬가지로 Rancher Labs에서 만든 대규모 클러스터 및 기업용 환경에도 적합한 쿠버네티스 관리 플랫폼입니다.
랜처의 장점은, 쿠버네티스 클러스터뿐 아니라 운영에 필요한 모니터링, 보안 관련 기능을 쉽게 설치할 수 있다는 점입니다. 또한, 추가 기능이 필요할 때, 사용자가 설정 방법을 고민할 필요 없이 랜처가 제공하는 마켓 플레이스에서 앱을 내려받는 것처럼 쿠버네티스 관련 도구를 설치하고 구성할 수 있습니다. 또한 랜처의 관리 도구를 사용해서 새로운 쿠버네티스 클러스터를 쉽게 생성하고 여러 클러스터를 한 곳에서 관리할 수 있습니다. 이때 퍼블릭 클라우드(AWS, Azure, GCP...)와 프라이빗 클라우드를 가리지 않고 설치할 수 있기 때문에 클라우드에 대한 전문지식이 부족해도 여러 클라우드를 동시에 활용하는 멀티 클라우드 환경을 구성할 수 있습니다.
랜처는 앞서 말했듯 대규모 시스템 관리까지 가능한 플랫폼이기에 자체적 구성 요소가 많이 포함되어 있으며 이로 인하여 다른 도구에 비해 무거운 면이 있습니다. 실제로 현장에서 랜처를 모니터링 및 대시보드를 자동으로 구성해 주는 도구로 접근하는 경우가 있는데, 중소 규모의 단일 클러스터는 이를 구성해주는 다른 도구를 사용하고, 모니터링이나 대시보드를 쉽게 설정해 주는 추가 기능을 활용하는 것이 조금 더 효율적일 수 있습니다.
세줄 요약
용도 : 대규모 및 기업용 환경에서도 활용 가능한 다목적 쿠버네티스 관리 플랫폼
장점 : 기본적으로 포함되어 있는 기능이 많고 추가 도구 설치도 쉬움. 멀티 클라우드 관리 가능
단점 : 다른 도구에 비해 무거우므로 시스템 환경에 따라 적절한 고려가 필요
kubeadm
앞서 언급한 미니쿠브, k3s, 랜처는 쿠버네티스의 전체 구성을 목적에 맞게 자동으로 설치해 주는 도구라 하면, kubeadm은 기본적인 상태의 쿠버네티스를 시스템상에 구성해주는 도구입니다.
kubeadm은 사용자가 기본적인 쿠버네티스 클러스터 구성 이외에 운영에 필요한 서비스, 스토리지, 모니터링 등의 세부 구성 요소를 직접 설정해야 합니다. 그렇기 때문에 처음 접하게 되면 조금 어려울 수 있습니다. 하지만 세부적인 설정이 가능한 전문적 사용자라면 자신의 환경에 맞는 쿠버네티스 클러스터를 설정할 수 있습니다.
매니지드 쿠버네티스
위 과정들을 모두 생략하고 가장 쉽고 빠르게 쿠버네티스를 접하는 방법이 바로 퍼블릭 클라우드에서 제공하는 매니지드 쿠버네티스 서비스입니다. 사용자가 쿠버네티스를 설치하는 부담 없이 퍼블릭 클라우드 서비스를 제공하는 콘솔의 지시사항을 따라는 것만으로도 쿠버네티스 클러스터를 생성할 수 있으며, 생성된 클러스터의 관리까지 퍼블릭 클라우드에서 해주기 때문에 사용자는 쿠버네티스 기능을 사용하는 데에만 집중할 수 있게 됩니다.
각 퍼블릭 클라우드 서비스들이 제공하는 매니지드 쿠버네티스 서비스는 AWS(EKS), Azure(AKS), GCP(GKE)와 같은 것들이 있습니다. 삼성 SDS 또한 CNCF의 Certified kubernetes 인증을 받은 Samsung Cloud Platform(SCP) Kubernetes Engine 서비스를 제공하고 있습니다.
쿠버네티스 공부
Kubernetes the hard way 에서는 쿠버네티스 클러스터를 구성하기 위해 필요한 모든 구성 요소를 단계별로 직접 설정하는 방법을 가이드해주고 있습니다. 전문적인 쿠버네티스 운영자가 되기 위해서는 구성 요소와 세부사항을 이해하는 것이 필요할 수 있기에 추천드립니다.
후기
쿠버네티스에 대해서 이해하고 공부하려고 작성한 글인데 아직까지는 모르는 부분이 확실히 더 많은 것 같습니다. 어느 순간부터 이해하기 어렵고 생소한 서비스들이 등장하면서 이것저것 찾아보며 이해하였지만 직접 사용해 보며 익혀야 할 것 같습니다.
참고
k3s
MSA란 무엇인가?
쿠버네티스 공식문서
쿠버네티스란 무엇인가?
삼성SDS 쿠버네티스 알아보기 2편
쿠버네티스 이해하기
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스(Kubernetes)_1편 (0) | 2024.05.10 |
---|