728x90

쿠버네티스 아키텍처는 크게 마스터 노드(master node)와 워커 노드(worker node)로 구분됨

마스터노드

마스터 노드는 쿠버네티스 클러스터의 컨트롤플레인(control plane)을 구성

주요 구성요소는 다음과 같음

  1. API 서버 (kube-apiserver)
    • 클러스터의 중심 통신 허브로, 모든 관리 명령이 API 서버를 통해 수행됨
    • 쿠버네티스 API를 통해 클러스터와 통신함
  2. 클러스터 저장소 (etcd)
    • 모든 클러스터 데이터를 저장하는 분산 키-값 저장소
    • 클러스터의 상태를 유지하며, 고가용성을 보장하기 위해 사용됨
  3. 컨트롤러 매니저 (kube-controller-manager)
    • 다양한 컨트롤러를 실행하여 클러스터 상태를 원하는 상태로 유지함
    • 예를 들어, 노드가 실패하면 해당 노드의 작업을 다른 노드로 이전
  4. 스케줄러 (kube-scheduler)
    • 새로 생성된 파드를 적절한 워커 노드에 할당하는 역할을 함
    • 리소스 요구 사항과 기타 제약 조건을 고려하여 배치 결정을 내림

워커 노드

워커 노드는 실제 컨테이너화된 애플리케이션을 실행하는 서버

주요 구성요소는 다음과 같음

  1. kubelet
    • 각 노드에서 실행되며, 마스터 노드의 지시에 따라 컨테이너를 시작하고 관리함
    • 파드의 건강 상태를 모니터링하고 보고함
  2. 컨테이너 런타임
    • 컨테이너를 실행하는 역할을 함
    • Docker, containerd, CRI-O 등이 있음
  3. 쿠브 프록시 (kube-proxy)
    • 노드의 네트워크 프록시 및 로드 밸런서 역할을 하며, 파드 간 네트워크 통신을 가능하게 함

동작 순서

쿠버네티스 클러스터는 다음과 같은 방식으로 동작함

  • 사용자 또는 자동화 도구가 API 서버에 명령을 제출
  • API 서버는 이 명령을 etcd에 저장하고, 상태를 갱신함
  • 컨트롤러 매니저가 변경 사항을 감지하고, 필요한 조치를 취함 (예: 파드 재배치)
  • 스케줄러가 새 파드를 적절한 워커 노드에 할당함
  • 워커 노드의 kubelet이 API 서버로부터 파드 생성 명령을 받고, 컨테이너 런타임을 통해 컨테이너를 시작함
728x90

'Kubernetes' 카테고리의 다른 글

Multi-container pod 패턴  (0) 2024.05.07
쿠버네티스 Config 파일 여러 개 관리  (0) 2024.04.30
CNI란?  (0) 2024.04.28
쿠버네티스 소개  (0) 2024.04.28
쿠버네티스와 마이크로서비스 아키텍처  (0) 2024.04.07
728x90

CNI란?

CNI는 컨테이너에 네트워크 인터페이스를 할당하고, 컨테이너를 네트워크에 연결하는 데 필요한 기본적인 작업을 수행하는 플러그인의 집합

쿠버네티스, Mesos, OpenShift와 같은 컨테이너 오케스트레이션 시스템에서 사용됨

CNI는 각 컨테이너가 시작될 때 네트워크 플러그인을 호출하여 네트워크 설정을 자동화하고, 컨테이너가 삭제될 때 이 설정을 정리함

 

CNI는 컨테이너화된 환경에서 네트워킹을 간편하게 만들어 주며,

다양한 요구 사항에 맞춰 네트워크를 구성하고 관리할 수 있는 유연성을 제공하기 때문에 

많은 개발자와 시스템 관리자가 CNI를 선호함

CNI의 주요 기능

  1. 네트워크 인터페이스 생성 및 관리
    • 컨테이너에 필요한 네트워크 인터페이스를 생성하고, 컨테이너를 네트워크에 연결하는 기능을 제공
  2. 네트워크 리소스 할당
    • IP 주소, 라우팅 규칙 등의 네트워크 리소스를 컨테이너에 할당
  3. 플러그인 기반 구조
    • 다양한 네트워킹 요구사항을 충족시키기 위해 여러 종류의 CNI 플러그인을 지원
    • 이는 사용자가 필요에 따라 플러그인을 선택하거나 교체할 수 있게 해줌

CNI 사용의 이점

  • 표준화 및 호환성: CNI는 컨테이너 네트워킹을 위한 산업 표준을 제공하여 다양한 오케스트레이션 플랫폼에서 호환되는 방식으로 네트워킹을 구현할 수 있도록 함
  • 유연성: 다양한 CNI 플러그인을 통해, 네트워크의 성능, 보안, 격리 등을 사용자의 요구에 맞춰 조정할 수 있음
  • 간소화된 관리: CNI는 네트워크 설정을 자동화하고, 컨테이너의 생명주기와 밀접하게 연동되므로 네트워크 관리를 간소화함

CNI 플러그인 예시

  • Calico: 보안과 성능을 강화한 네트워킹 및 네트워크 정책을 제공
  • Flannel: 간단하면서도 확장성 있는 네트워킹 솔루션을 제공
  • Weave Net: 네트워크 분할을 견딜 수 있는 견고한 네트워크 연결을 제공

 

728x90
728x90

쿠버네티스란?

쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 및 운영을 자동화하기 위해 설계된 시스템

컨테이너는 독립적으로 실행되며, 다양한 컴퓨팅 환경에서 일관된 작동을 보장함

쿠버네티스는 이러한 컨테이너들을 효율적으로 관리하며, 사용자가 수많은 컨테이너를 쉽게 다룰 수 있도록 도움

 

쿠버네티스는 복잡한 컨테이너 관리를 단순화하며, 대규모 시스템의 민첩성과 효율성을 높임

또한 다양한 클라우드 환경(온프레미스 포함)에서의 이식성과 호환성을 제공함

이로 인해 개발자와 시스템 관리자는 더욱 집중적으로 애플리케이션 개발과 운영에 집중할 수 있게 됨

쿠버네티스의 주요 기능

  1. 자동화된 롤아웃과 롤백
    • 쿠버네티스를 사용하면 애플리케이션을 점진적으로 업데이트하거나 이전 버전으로 롤백 가능
    • 서비스 중단 없이 변경사항을 적용할 수 있음
  2. 부하 분산
    • 애플리케이션의 트래픽을 분석하여, 필요에 따라 트래픽을 여러 인스턴스에 분산시키는 로드 밸런싱을 제공
  3. 자동화된 빈 패킹(Automatic bin packing)
    • 쿠버네티스는 애플리케이션의 요구 사항과 사용 가능한 인프라 자원을 고려하여, 컨테이너를 자동으로 스케줄링하고 최적화된 방식으로 배치
  4. 자동 복구(Self-healing)
    • 실패한 컨테이너는 자동으로 재시작되고, 비정상적인 컨테이너는 교체되며, 정의된 사용자 정책에 따라 다운된 노드에서 컨테이너를 다시 배치
  5. 비밀과 구성 관리
    • 쿠버네티스는 암호, OAuth 토큰, SSH 키와 같은 중요 정보를 보안적으로 관리하고, 애플리케이션 구성을 쉽게 업데이트하고 관리할 수 있음

쿠버네티스 커뮤니티

728x90
728x90

마이크로서비스는 소프트웨어를 작고 독립적인 서비스로 분할하여 개발하고 배포하는 아키텍처

이러한 아키텍처를 지원하기 위해 쿠버네티스(Kubernetes)가 널리 사용되고 있음

쿠버네티스란

쿠버네티스는 컨테이너 오케스트레이션(Orchestration) 도구로, 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈소스 플랫폼

Google에서 개발한 Borg 시스템을 기반으로 하여 구축되었으며, 대규모의 컨테이너화된 애플리케이션을 효율적으로 관리하기 위해 설계됨

쿠버네티스는 컨테이너의 스케줄링, 자원 관리, 네트워킹, 스토리지 관리, 로깅, 모니터링 등 다양한 기능을 제공함

마이크로서비스 아키텍처란

마이크로서비스 아키텍처는 애플리케이션을 작은 서비스 단위로 분해하여 각 서비스가 독립적으로 배포, 업데이트 및 확장될 수 있는 아키텍처

각 서비스는 특정 비즈니스 기능을 담당하며, 서로 통신하여 전체 애플리케이션을 구성함

마이크로서비스 아키텍처는 애플리케이션을 유연하고 확장 가능하게 만들며, 서비스 간의 결합도를 낮추어 유지보수성을 향상시킴

  • 마이크로서비스 아키텍처의 핵심 원칙
    • 서비스 간 독립성 : 마이크로서비스는 독립적으로 배포/확장/유지보수될 수 있어야 하며, 다른 서비스의 변경 사항에 대해 영향을 받지 않고 개별적으로 업데이트할 수 있어야 함
    • 단일 책임 원칙 : 각 서비스는 한 가지 기능 또는 책임만 가져야 하며, 이를 위해 작게 유지되어야 함
    • 통신과 관리의 분리 : 서비스 간의 통신은 API를 통해 이루어지며, 각 서비스는 자체적으로 관리되어야 함
  • 마이크로서비스 아키텍처의 이점
    • 유연성 : 각각의 마이크로서비스는 독립적으로 개발, 배포 및 확장될 수 있어 보다 빠르게 개발 가능
    • 확장성 : 서비스 단위로 분할된 애플리케이션은 필요에 따라 개별적으로 확장할 수 있어 사용자의 요구에 맞게 스케일링 가능
    • 유지보수성 : 각 서비스는 독립적으로 관리되므로 하나의 서비스를 업데이트하거나 수정할 때 전체 애플리케이션에 영향을 미치지 않음
    • 장애 격리 : 하나의 마이크로서비스가 실패하더라도 시스템 전체가 영향을 받지 않아 다른 서비스는 계속 정상적으로 작동할 수 있도록 함

쿠버네티스를 통한 마이크로서비스 관리

각 마이크로서비스는 컨테이너로 패키징되어 쿠버네티스 클러스터에서 실행될 수 있음

쿠버네티스는 여러 서비스 간의 통신, 서비스 검색, 스케일링 등을 관리하는 데 도움이 됨

  • 서비스 디스커버리 및 로드 밸런싱 자동 처리
    쿠버네티스는 서비스 디스커버리 및 로드 밸런싱을 위해 서비스를 위한 DNS를 자동으로 설정하고 서비스에 접근할 때 요청을 자동으로 분산시켜 마이크로서비스 간 통신을 용이하게 함
  • 자동화된 배포
    쿠버네티스는 애플리케이션의 배포 및 업데이트를 자동화함
    롤링 업데이트와 같은 기능을 통해 새로운 버전의 애플리케이션을 점진적으로 배포하고, 문제가 발생할 경우 자동으로 롤백할 수 있어
    안정적인 배포 프로세스를 보장함
  • 스케일링
    쿠버네티스는 수평적 스케일링을 지원하여 서비스의 부하에 따라 자동으로 인스턴스 수를 조정할 수 있어 사용량이 변하는 상황에서도 안정적인 성능을 유지할 수 있도록 도와줌

결론

쿠버네티스와 마이크로서비스 아키텍처는 현대적인 소프트웨어 개발과 운영에서 핵심적인 역할을 하고 있음

이러한 기술들은 애플리케이션을 보다 유연하고 확장 가능하게 만들어줄 뿐만 아니라, 개발자들이 개발과 운영에 투입하는 노력을 최소화하고 안정적인 서비스를 제공할 수 있도록 도와줌

728x90
728x90

윈도우용 Docker Desktop을 아래 링크에서 다운로드 받아서 설치

 

Kubernetes 활성화

작업도구 모음창에서 도커 아이콘을 우클릭해서 Settings로 들어가 kubernetes를 활성화

 

쿠버네티스 명령어 날려보기

kubectl version # 쿠버네티스 버전 보기

 

 

k9s 설치 (선택)

SCOOP 설치 > Windows Powershell  관리자 권한으로 실행 후 아래 명령어 입력 (cmd에서는 안됨)

# scoop 설치
Set-ExecutionPolicy RemoteSigned -scope CurrentUser 
$env:SCOOP = 'C:\Scoop'
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')

# k9s 설치
scoop install k9s
728x90

+ Recent posts