IT/Cloud & DevOps

Kubernetes 쿠버네티스

iamhyeon 2025. 4. 15. 22:08

💡 Kubernetes 클러스터란?

 

쿠버네티스( Kubernetes, K8s )란?
컨테이너로 구성된 애플리케이션을 효율적으로 관리해주는 오픈 소스 플랫폼이다.
이를 통해 여러 서버에 걸쳐 수백, 수천 개의 애플리케이션을 자동으로 배포하고, 실행하고, 확장할 수 있다. 

 

컨테이너화란?
컨테이너는 애플리케이션을 실행하는 데 필요한 코드, 라이브러리, 설정 파일 등을 하나로 묶은 실행 단위이다.
이 방식은 어느 환경에서나 동일하게 작동하도록 해주며, "한 번 만들면 어디서든 실행 가능"한 장점이 있다. 

 

쿠버네티스 클러스터란?
쿠버네티스 클러스터는 여러 대의 서버(노드)를 하나로 묶어서, 컨테이너화된 애플리케이션을 배포하고 운영할 수 있는 구조를 말한다.
클러스터는 크게 두 가지 역할로 나뉜다.
- 컨트롤 플레인:  클러스터를 관리하고 제어하는 중심 시스템 
- 노드 :  실제로 어플리케이션(컨테이너)을 실행하는  서버


- Kubernetes(K8s) 클러스터는 컨테이너화된 애플리케이션을 실행하는 컴퓨팅 노드 또는 작업자 머신 그룹이다

- 컨테이너화는 애플리케이션의 코드를 모든 인프라에서 실행하는 데 필요한 모든 파일 및 라이브러리와 함께 번들로 제공하는 소프트웨어 배포 및 런타임 프로세스이다

- Kubernetes는 대규모 컨테이너를 관리, 조정 및 스케줄링할 수 있는 오픈 소스 컨테이너 오케스트레이션 소프트웨어이다

- Kubernetes는 컨테이너를 포드에 배치하고 노드에서 실행한다

- Kubernetes 클러스터에는 최소한 컨테이너 포드를 실행하는 프라이머리 노드와 클러스터를 관리하는 컨트롤 플레인이 있다

- Kubernetes를 배포하면 기본적으로 Kubernetes 클러스터가 실행된다 


💡 Kubernetes 기초


- 컨테이너는 종속성과 함께 패키징된 단일 애플리케이션 또는 마이크로서비스로, 독립형 환경 및 애플리케이션을 하나로 통합하여 실행할 수 있다

- 최신 애플리케이션은 모든 애플리케이션이 독립적으로 실행되는 수백 또는 수천 개의 개별 소프트웨어 구성 요소를 포함하는 분산 마이크로서비스 아키텍처를 채택했다

- 모든 구성 요소(또는 마이크로서비스)는 코드 모듈성을 향상시키기 위해 단일 독립 기능을 수행한다

- 각 서비스에 대해 독립적인 컨테이너를 생성하여 애플리케이션을 여러 머신에 배포하고 배포할 수 있다

- 개별 마이크로서비스 워크로드 및 컴퓨팅 기능을 확장하거나 축소하여 애플리케이션 효율성을 극대화할 수 있다
- Kubernetes는 대규모 컨테이너 관리를 간소화하는 오픈 소스 컨테이너 오케스트레이션 소프트웨어이다

- 컨테이너를 스케줄링, 실행, 시작 및 종료하고 관리 기능을 자동화할 수 있다

- 개발자는 관리 오버헤드 없이 대규모 컨테이너화의 이점을 누릴 수 있다

 

클러스터 구성 요소
- 포드(Pod), 노드(Node)

 

|  포드

 

- 포드는 Kubernetes에서 배포할 수 있는 표준 유닛이다

- 포드는 하나 이상의 컨테이너를 포함하며, 포드 내에서 컨테이너는 스토리지 및 네트워킹과 같은 동일한 시스템 리소스를 공유한다

- 각 포드에는 고유한 IP 주소가 있다
- 포드 내의 컨테이너는 격리되지 않는다

- 포드는 VM에서 실행되는 애플리케이션과 비슷한 컨테이너를 장착한 가상 머신(VM)과 비슷하다고 생각하면 된다

- 환경 유형에 대해 'dev' 또는 'prod' 레이블을 지정하는 등 속성 레이블을 첨부하여 포드 및 포드 그룹을 구성할 수 있다  

- 컨테이너 간 협업이 필요한 경우 하나의 포드로 묶어 사용한다 

|  노드


- 노드는 포드를 실행하는 가상 머신 또는 물리 서버이다

- Amazon EC2 인스턴스와 같은 물리적 또는 가상 서버일 수 있다

- 노드의 구성 요소

    - 노드 및 컨테이너 관리를 위한 Kubelet
    - 네트워크 프록시를 위한 kube-proxy
    - 컨테이너 런타임 :  Docker 등 실제 컨테이너 실행 프로그램 
- 컨테이너를 실행하려면 호환 가능한 컨테이너 런타임을 노드에 설치해야 한다

- Kubernetes는 Kubernetes 컨테이너 런타임 인터페이스 및 컨테이너와 같은 여러 컨테이너 런타임을 지원한다

 

복제본 세트 및 배포

- 포드는 기본적으로 자동 복구되지 않는다.

- "복제본 세트(ReplicaSet)"를 사용해서 여러 개를 만들어두면, 장애가 생겨도 자동 복구된다
- "배포(Deployment)"를 통해 애플리케이션을 점진적으로 업데이트하거나, 롤백할 수 있다.

- 포드는 독립형 아티팩트이며 노드가 다운되어도 자동으로 재시작하지 않는다

- 포드를 복제본 세트로 그룹화한 경우, Kubernetes에서 노드 전체에서 항상 실행되는 복제본 세트를 지정할 수 있다

- 이는 확장 및 축소하고 앱과 서비스의 연속성을 보장하는 데 매우 중요하다  
- 배포는 애플리케이션을 배포하고 앱을 오프라인으로 전환하지 않고 업데이트하거나 롤백하기 위한 Kubernetes 관리 객체이다

서비스 및 인그레스

- 서비스(Service)는 포드를 외부 또는 내부에서 접속할 수 있도록 네트워크 엔드포인트를 제공한다
- 인그레스(Ingress)는 외부의 HTTP/HTTPS 요청을 받아서 적절한 서비스로 연결해주는 진입 지점이다


💡 Kubernetes 클러스터 구성 요소?

 

- Kubernetes 클러스터는 실행 중인 포드가 있는 하나 이상의 노드 그룹이다

- 클러스터 내에서 Kubernetes 컨트롤 플레인은 노드와 포드를 관리한다

컨트롤 플레인 구성 요소
    - 클러스터 내부 및 클러스터 간의 통신을 관리하는 Kubernetes API 서버(kube-apiserver)
    - 클러스터의 영구 상태를 기록하기 위한 스토리지(etcd)
    - 노드 및 후속 포드 Kubernetes 리소스를 관리하기 위한 스케줄러(kube-scheduler)

 
- 다른 구성 요소로는 노드 및 작업 제어를 위한 컨트롤러 관리자(kube-controller-manager)와 제공자별 퍼블릭 클라우드 인프라와의 통합을 위한 클라우드 컨트롤러 관리자(cloud-controller-manager)가 있다.

- 컨테이너에는 영구 스토리지가 없으므로 애플리케이션은 영구 데이터를 저장해야 한다

- 포드에는 공유 데이터에 대한 액세스가 필요할 수 있다. 영구 볼륨은 클러스터에 스토리지로 추가할 수 있으며, 이는 노드와 마찬가지로 클러스터 내에서 참조된다.

 


💡 Kubernetes 클러스터 관리란?


- Kubernetes 클러스터 관리는 여러 Kubernetes 클러스터를 대규모로 관리한다는 의미이다 

- 클러스터 관리란 단일 클러스터뿐 아니라 여러 개의 클러스터를 동시에 운영하고 제어하는 것을 의미한다

- 예를 들어 팀에 여러 개의 분산된 현장과 클라우드 기반 물리적 및 가상 시스템에서 각각 실행되는 테스트, 개발 및 프로덕션 클러스터가 필요할 수 있다.

- 서로 다른 여러 유형의 클러스터를 함께 관리하려면 생성 및 삭제, 현장 업데이트, 유지 관리, 재구성, 보안, 클러스터 데이터 보고 등과 같은 클러스터 작업을 수행할 수 있어야 한다.

- 다중 클러스터 관리는 Kubernetes 서비스, 전문 도구, 구성 및 모범 사례의 조합을 통해 달성할 수 있다.


쿠버네티스를 배우면
- 대용량 트래픽을 수용할 수 있는 서비스를 구축하는 원리를 알게된다
- 고가용성과 내결함성을 고려한 서비스를 구축할 수 있는 능력을 갖게된다

 

컨테이너 기술과 쿠버네티스
- 쿠버네티스는 컨테이너 기술을 바탕으로 복잡한 운영환경을 잘 운영할 수 있도록 도와준다
    - 최신 버전의 쿠버네티스는 컨테이너 기술 중 conatainerd,  CRI-O와 같은 플랫폼을 사용한다
- 컨테이너 플랫폼은 OCI 라는 표준 인터페이스를 따르고 있기 때문에 거의 호환되기 때문에 도커로 실습한다
- 도커를 기준으로 만들어진 앱도 다른 컨테이너 플랫폼, Podman 에서도 똑같이 실행할 수 있다

VM과 컨테이너 비교
- 컨테이너 기술은 호스트 OS와 완전히 격리된 것처럼 느껴지지만, 실제로는 호스트 OS와 자원을 공유한다
    - 컨테이너가 통째로 일종의 프로세스처럼 동작하는 것
- VM 기술은 하드웨어의 자원을 나눠서 직접 게스트 OS에 설치하는 방법이다
    - 보안적인 측면에서는 더 좋지만, 아무래도 가상으로 직접 OS를 설치하다 보니 성능이 좋지 못하다

 

쿠버네티스는 왜 컨테이너 기술을 바탕으로 하나
- 컨테이너 기술을 이용해서 만들어진 앱을 실행시키면, 어떤 환경에서 개발된 앱이라도 항상 동일한 조건으로 실행할 수 있다
    - 실제 운영 환경에서 보다 개발자의 의도대로 앱이 동작할 수 있다
- VM기술보다 컨테이너 기술이 훨씬 가볍기 때문에 성능이 좋다

 

 

 

 


refer to

https://aws.amazon.com/ko/what-is/kubernetes-cluster/

https://kubernetes.io/docs/home/

https://dev.to/ajeetraina/docker-desktop-kubernetes-evolution-single-node-to-multi-node-38gm

 

반응형

'IT > Cloud & DevOps' 카테고리의 다른 글

클라우드 환경에서 쿠버네티스 클러스터 만들기  (0) 2025.04.19
도커 이미지 만들어 보기  (0) 2025.04.19
도커 사용해보기  (0) 2025.04.17
컨테이너  (0) 2025.04.17
Windows 11 Home 에서 Docker 설치  (0) 2025.04.12