티스토리 뷰

클라우드

쿠버네티스 기본 개념

tioon 2023. 10. 4. 18:04

쿠버네티스(Kubernates)란?

-컨테이너 오케스트레이션 도구이며, 컨테이너화된 어플리케이션들을 자동으로 배포, 확장 및 관리를 하는 도구입니다.쿠버네티스를 이용해 여러개의 컨테이너들을 관리하며 k8s라고 줄여쓰기도 합니다. 

 

 

쿠버네티스 특징

  • 컨테이너 오케스트레이션
    -여러 노드에서 동작하는 많은 컨테이너들을 관리하고 조정합니다.

  • 자동 스케일링
    -트래픽 변동시 자동으로 컨테이너를 추가하거나, 제거하여 애플리케이션을 확장하거나 축소 시킬 수 있습니다

  • 자동 복구
    -특정 컨테이너나 노드에 문제가 발생하면 자동으로 재시작하거나 대체합니다.

  • 서비스 디스커버리 및 로드 밸런싱
    -DNS 이름이나 자체 IP 주소를 사용해 서비스를 구별하여 트래픽을 분산시켜 여러 파드에 골고루 나눌 수 있습니다.

 

 

 

 

 

 

쿠버네티스 내부 노드

  • 마스터 노드
    -쿠버네티스에서 클러스터 관리 및 조정을 담당하는 중앙 컨트롤 플레인입니다.
    실제 서버가 실행되는 공간이 아니며, 워커 노드에서 실행되는 컨테이너들을 관리하는 역할을 합니다.
    마스터 노드의 구성요소는 다음과 같습니다.
구성요소 설명
kube-apiserver 쿠버네티스 API의 진입점으로 외부와 통신하고,
kubectl(쿠버네티스 CLI 도구)로부터
명령을 전달받아 실행
kube-controller-manager 쿠버네티스의 모든 컨트롤러(노드,레플리카, 엔드포인트...)를 통합 관리 및 실행
kube-scheduler 새로 생성된 파드를 적절한 워커 노드에 할당하는 역
etcd 쿠버네티스의 백엔드 저장소
클러스터 구성 데이터와 상태 정보를 저장함.

 

  • 워커 노드 
    -실제 서버에 해당 하는 부분으로, 실제 애플리케이션이 실행되며, 그외에 필요한 프로세스들이 실행이 되는 노드입니다.
    워커 노드의 구성요소는 다음과 같습니다.

 

구성요소 설명
kube-let 워커 노드에서 실행됨
마스터 노드의 kube-apiserver와 통신함
할당된 POD들의 동작 관리
kube-proxy 워커 노드에서 실행됨
네트워크 규칙 처리 및 POD간의 네트워크 통신함

 

 

쿠버네티스의 상태 유지

- 쿠버네티스는 YAML 파일을 기반으로 환경 유지를 합니다.
-쿠버네티스에 명령어를 입력해 환경을 설정해도 YAML파일 기반으로 유지됩니다.
-쿠버네티스의 상태를 변경시킬 땐 YAML파일을 변경해야 합니다.

 

 

 

쿠버네티스 구성요소

 

  • 파드
    -워커노드에서 생성되며, 쿠버네티스에서 배포하는 가장 작은 단위
    -하나이상의 컨테이너,볼륨으로 구성됨
    -한 파드에서는 동일한 로컬 네트워크와 스토리지 볼륨을 공유

  • 서비스 (추상 리소스)
    -파드를 여러개 모은 것으로, 내부 파드들은 모두 기본적으로 동일한 구성을가짐
    -서비스가 요청이 들어오면 서비스가 요청을 각 파드에 로드밸런싱(분배)를 함
    -클러스터 IP라는 서비스 대표 IP주소를 가짐

  • 컨트롤러 
    -마스터 노드에서 관리하는 프로세스
    • 레플리카세트(ReplicaSet)
      -파드의 수 지속적으로 관리
      -동일한 환경구성의 파드를 레플리카라고 부름.
      -실시간으로 파드를 생성, 제거하여 설정에 맞게 관리

    • 디플로이먼트(Deployment)
      -파드의 정보 관리(파드 이름, 이미지....)
      -레플리카세트와 같이 사용됨.

Minikube란?
  • 한 컴퓨터(로컬 시스템)에서 쿠버네티스 환경을 쉽게 구축하는 도구
  • 로컬에서 마스터노드, 워커 노드를 따로 구축가능
  • 실제 쿠버네티스를 구축하는건 매우 복잡하기 때문에 minikube로 실습용도로 쓰임.

 

 

매니페스트 파일

쿠버네티스 리소스의 정의와 구성을 설정하는 파일로, 해당 파일을 사용하여 쿠버네티스 클러스터에 리소스를 생성,수정, 삭제할 수 있습니다.

  • 쿠버네티스 리소스의 정의와 구성을 기술하는 파일
  • 파드,서비스,디플로이먼트,레플리카세트 등의 정의가 들어감
  • YAML or JSON 형식으로 구성되어 있음
  • 마스터 노드의 etcd(데이터베이스)에 저장되어 있음
  • 쿠버네티스를 통해 파일을 적용시켜 마스터노드가 관리하며, 워커노드에게 명령을 하달함

 

매니페스트 파일 구조
  • apiVersion
    -사용하려는 리소스의 API 버전을 나타내는 것
    -파드와 서비스는 core/v1 (v1으로 축약가능)
    -디플로이먼트와 레플리카세트는 apps/v1

  • kind
    -생성하려는 리소스의 종류를 나타내는 것
    -'Pod' , 'Deployment' , 'Service' , 'ConfigMap' 등이 들어갈 수 있습니다.

  • metadata
    -리소스에 관한 세부 메타 데이터를 나타내는 것
항목 이름
name 리소스 이름 정의 (유일해야함)
labels 리소스 식별하기위한 레이블 정의
(리소스를 레이블로 분류할 수 있음)
namespace 리소스가 속하는 namespace지정 (기본은 default)

 

  • spec
    -리소스의 세부 정보를 나타내는 것 
    -리소스마다 정보가 달라짐
    -파드는 따로 리소스를 생성하는게 아닌 디플로이먼트 spec 내부에 정의함.
    • Pod(파드) spec (단독구성 X)
      • name
        -리소스 이름 정의 (유일값)
      • image
        -리소스 식별하기위한 레이블 정의
      • ports
        -리소스의 포트번호 설정


    • Deployment(디플로이먼트) spec
      • replica
        -유지할 파드의 수
      • selector
        -디플로이먼트가 관리할 파드
      • template
        -생성할 파드의 정보
        -template 내부에 파드의 metadata와 spec을 기재함
        -template 안에 파드의 정보가 들어있는 형식임

    • Service(서비스) spec
      • type
        -서비스의 유형
        -'ClusterIP' , 'NodePort' , 'LoadBalancer' , 'ExternalName'의 유형으로 나뉨.
      • ports
        -트래픽 수신할 포트 설정
        -서비스 포트(port) , 워커노드의 포트(nodePort) , 컨테이너 포트(targetPort)를 설정함.
      • selector
        -서비스가 관리할 파드

 

쿠버네티스 명령어

 

  • create
    -매니페스트 파일을 이용해 리소스 생성

  • edit
    -현재 실행중인 리소스 편집 (매니페스트 파일 수정X, 리소스 파일을 직접 수정)

  • delete
    -현재 실행중인 리소스 삭제

  • get
    -현재 실행중인 리소스 상태 출력

  • set
    -현재 실행중인 리소스 값 설정

  • apply
    -현재 리소스의 변경 사항 반영

 

 

 

'클라우드' 카테고리의 다른 글

AWS RDS (Feat. 스프링 연결)  (0) 2023.12.26
도커파일  (0) 2023.10.08
도커 컴포즈(Docker Compose)  (0) 2023.09.26
도커 컨테이너 개조  (0) 2023.09.12
도커 데이터베이스 연동과 LAMP스택  (0) 2023.09.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함