TOP
class="layout-aside-left paging-number">
본문 바로가기
프로그래밍 및 기타/Cloud : AWS

[Cloud] 쿠버네티스(Kubernetes) 란?

by 기록자_Recordian 2025. 3. 1.
728x90
반응형
이전 내용
 

[Cloud] aws : aws cli 로 쿠버네티스 클러스터 만들기

이전 내용 [Cloud] aws : aws console로 쿠버네티스 클러스터 만들기이전 내용 [Cloud] aws: ECR(Amazon Elastic Container Registry)이전 내용 [Cloud] 도커로 DB 연결하기이전 내용 [Cloud] 컨테이너 이미지 경량화 시

puppy-foot-it.tistory.com


쿠버네티스(Kubernetes)

 

쿠버네티스(Kubernetes)는 여러 개의 도커(Docker) 컨테이너를 효과적으로 관리하기 위한 오픈 소스 플랫폼이다.

출처: 쿠버네티스 홈페이지

 

[클러스터 구성 요소 - control plane]
★ API Server

  • 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트
  • 쿠버네티스 컨트롤 플레인의 프론트 엔드
  • 최종 사용자 - 클러스터의 다른 부분 - 외부 컴포넌트가 서로 통신할 수 있도록 HTTP API를 제공
  • API 서버를 통해 쿠버네티스 오브젝트 (pod, namespace, configmap, event, query)를 조작
  • kubectl, kubeadm과 같은 컴낸드 라인도구를 사용하여 수행
  • REST 호출을 사용하여 API 서버에 직접 접근할 수도 있다.

control plane - controller-manager

  • 클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트
  • 클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 준다
  • cloud-controller-manager는 클라우드 제공자 전용 컨트롤러만 실행
  • 자신의 사내 또는 PC 내부의 학습 환경에서 쿠버네티스를 실행 중인 경우 클러스터에는 클라우드 컨트롤러 매니저가 없음
  • 논리적으로 각 컨트롤러는 개별 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 바이너리로 컴파일되고 여러 컨틀롤 루프를 단일 프로세스 내에서 실행됨 (kube-controller-manager와 같음)
  • node 컨트롤러 : 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인
  • route 컨트롤러 : 기본 클라우드 인프라에 경로를 구성
  • service 컨트롤러 : 클라우드 제공 사업자 로드밸런서를 생성, 업데이트 삭제

control plane - scheduler

  • 노드가 할당되지 않은 새로운 파드 를 감지
  • 새로운 파드가 실행될 최적의 노드 선택
  • 파드가 실행 가능한 노드를 찾은 다음 점수를 측정한 후 가장 높은 점수를 가진 노드를 선택
  • 리소스요구 사항, 하드웨어/소프트웨어/정책적 제약, 어피니티(affinity) 및 안티-어피니티(anti-affinity) 명세, 데이터 지역성, 워크로드-간 간섭, 데드라인 고려

control plane - etcd

  • 모든 클러스터 데이터를 담는 저장소로 사용되는 키-값 저장소
  • 쿠버네티스의 필수 구성 요소
  • etcd 는 분산형 합의 기반 시스템
  • 데이터를 백업하는 계획은 필수

 

[쿠버네티스의 주요 기능]

  • 컨테이너 배포 및 관리: 쿠버네티스를 사용하면 여러 도커 컨테이너를 쉽게 배포하고 관리할 수 있다. 이를 통해 애플리케이션의 배포 및 업데이트가 간편해진다.
  • 자동화된 스케일링: 쿠버네티스는 부하에 따라 컨테이너 수를 자동으로 조절할 수 있는 기능을 제공한다. 예를 들어, 트래픽이 증가하면 더 많은 인스턴스를 자동으로 생성하여 처리할 수 있다.
  • 서비스 디스커버리: 쿠버네티스는 클러스터 내의 컨테이너들이 서로를 쉽게 찾아 소통할 수 있도록 도와준다. 이로 인해 서비스 간 연결이 용이해진다.
  • 자체 복구: 이상이 발생하면 쿠버네티스는 장애가 발생한 컨테이너를 자동으로 교체한다. 이를 통해 시스템의 가용성을 높일 수 있다.
  • 트래픽 관리: 쿠버네티스는 트래픽을 효과적으로 관리하고, 여러 버전의 애플리케이션을 동시에 실행할 수 있도록 지원한다. 이를 통해 점진적인 배포가 가능하다.

Docker와 Kubernetes는 모두 컨테이너 기술과 관련이 있지만, 각각의 목적이 다르다.

Kubernetes는 컨테이너를 관리하고 조정하는 데 매우 유용한 도구인 반면, Docker는 컨테이너를 생성하고 실행하는 데 필수적인 툴이다. 따라서, 이러한 기술을 함께 사용하는 것이 이점이 크며, Docker는 여전히 컨테이너 기술의 기본으로서 매우 중요한 역할을 한다. 이렇게 함으로써 개발자들은 효율적으로 애플리케이션을 개발하고 배포할 수 있다.

 

https://kubernetes.io/ko/

 

운영 수준의 컨테이너 오케스트레이션

K8s라고도 알려진 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다. 애플리케이션을 구성하는 컨테이너들의 쉬운 관리 및 발견을 위

kubernetes.io


도커와 쿠버네티스

 

[Kubernetes가 있음에도 Docker를 사용해야 하는 이유]

1. 컨테이너화
애플리케이션 포장: Docker는 애플리케이션을 컨테이너라는 독립된 환경에 포장할 수 있게 해준다. 이는 애플리케이션과 그 의존성을 모두 포함하여, 운영 체제에 관계없이 동일하게 실행될 수 있도록 한다.


2. 개발 환경 설정
일관된 개발 환경: Docker는 개발자들 간에 일관된 환경을 제공한다. 팀의 모든 개발자가 동일한 Docker 이미지를 사용하면, 개발 환경의 차이로 인한 버그를 줄일 수 있다.

 

3. 손쉬운 배포
신속한 배포: 개발자가 Docker 이미지를 작성하기만 하면, 특정 서버나 클라우드 환경에서 쉽게 배포할 수 있다. Docker Hub와 같은 이미지 레지스트리를 사용하여 애플리케이션 이미지를 공유할 수 있다.

 

4. 빠른 속도
경량화: Docker 컨테이너는 가상 머신에 비해 훨씬 경량이다. 따라서 애플리케이션 실행 시간이 빠르고, 시스템 자원도 절약할 수 있다.

 

5. 로컬 개발 환경
로컬에서 실행 가능: Docker는 개발자가 로컬 머신에서 컨테이너를 실행하여 개발할 수 있게 해준다. 이는 서버에 배포하기 전에 애플리케이션을 테스트하고 디버깅할 수 있는 기회를 제공한다.

 

6. 관리와 유지 보수
버전 관리: Docker는 애플리케이션의 여러 버전을 쉽게 관리할 수 있게 해준다. 각 버전의 이미지를 저장하고 필요할 때 이전 버전으로 되돌릴 수 있다.

 

7. Kubernetes와의 통합
Kubernetes의 기반: Kubernetes는 클라우드 환경에서 여러 컨테이너를 관리하는 오케스트레이션 도구이다. Docker는 그 기반이 되는 컨테이너 기술로, Kubernetes와 함께 사용할 수 있다. Docker를 사용하여 컨테이너를 정의하고, Kubernetes를 사용하여 이들을 관리, 스케일 및 배포한다.

 

8. 마이크로서비스 아키텍처 지원
서비스 간 독립성: Docker는 각 마이크로서비스를 독립적인 컨테이너로 실행할 수 있게 하여, 서비스 간의 종속성을 줄이고 개별 서비스의 배포 및 업데이트를 쉽게 할 수 있게 한다.


다음 내용

 

[Cloud] aws : aws console로 쿠버네티스 클러스터 만들기

이전 내용 [Cloud] aws: ECR(Amazon Elastic Container Registry)이전 내용 [Cloud] 도커로 DB 연결하기이전 내용 [Cloud] 컨테이너 이미지 경량화 시키기이전 내용 [Cloud] 도커 허브에서 컨테이너 이미지 다운로

puppy-foot-it.tistory.com

728x90
반응형