개발계발/인프라

[쿠버네티스 세팅하기] 1. 쿠버네티스 구성 살펴보기

냥냥친구 2023. 4. 15. 21:48

쿠버네티스는 공식 문서가 매우 잘 되어있다.

다만, 많은 내용을 담고 있어 쿠버네티스 구성에 대한 내용을 간략하게 정리해 보았다.

https://kubernetes.io/ko/docs/concepts/overview/

 

쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하

kubernetes.io


쿠버네티스란

컨테이너화된 애플리케이션을 배포, 확장 및 관리해주는 시스템이다.

규모가 큰 서비스들은 여러개의 서버에 여러개의 애플리케이션을 띄워놓고 운영하는데, 서버 하나하나씩 독립적으로 관리한다면 같은 일을 여러번 관리하는 등의 번거로운 점이 발생한다. 이런 불편함을 해결해주는 것이 쿠버네티스다. yml 파일에 구성하려는 서버 리소스를 명세하고 배포하면 여러 서버에 걸쳐 항상 그 상태를 유지 및 관리해준다. 스케일 아웃된 여러 개의 컨테이너를 하나로 묶어 트래픽을 로드밸런싱해주거나 명세를 통한 자동 롤아웃과 롤백 등을 제공한다.

 

쿠버네티스 클러스터

쿠버네티스 클러스터의 구성은 아래와 같다.

컨트롤 플레인 컴포넌트

클러스터에 관한 전반적인 결정을 수행하고 클러스터 이벤트를 핸들링한다.

kube-apiserver

쿠버네티스 api를 노출하는, 컨트롤 플레인의 프론트엔드이다.

etcd

클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 key-value 스토리지이다.

kube-scheduler

생성된 파드를 노드에 할당하는 등의 스케줄링 작업을 진행한다.

kube-controller-manager

컨트롤러 프로세스를 실행한다.

 

노드 컴포넌트

동작 중인 파드를 유지, 쿠버네티스 런타임 환경 제공한다.

kubelet

파드의 스펙 등 컨테이너를 관리한다. 

kube-proxy

클러스터의 각 노드에서 실행되는 네트워크 프록시로 노드의 네트워크 규칙을 관리한다.


다음으로는 주요 개념들을 살펴보자.

노드

노드는 컨트롤플레인에 의해 관리되며 파드를 실행하는데 필요한 서비스를 포함한다. 하나의 노드는 하나의 서버라고 이해하면 된다.

하나의 클러스터 안에는 여러 개의 노드가 있을 수 있고, 하나의 노드 안에는 여러 개의 파드가 있을 수 있다.

파드

쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨터 단위이다. 하나 이상의 컨테이너를 포함하며 컨테이너에 대한 스토리지 및 네트워크를 공유한다.

파드 템플릿

파드템플릿은 파드를 생성하기 위한 명세이다. 파드 템플릿이 변경되면 기존의 파드를 갱신하지않고 새로운 파드를 생성한 후 교체한다. 

아래는 예시이다.

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    # 여기서부터 파드 템플릿이다
    spec:
      containers:
      - name: hello
        image: busybox:1.28
        command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
      restartPolicy: OnFailure
    # 여기까지 파드 템플릿이다

워크로드 리소스

워크로드 리소스로는 디플로이먼트, 레플리카 셋, 스테이트풀셋 등이 있다.

레플리카 셋

레플리카셋은 명세된 내용을 달성하기 위해 파드를 띄우거나 삭제한다. 명세 내용으로는 파드를 식별하는 방법이 명시된 셀렉터, 유지해야 하는 파드 개수를 명시하는 레플리카 개수, 레플리카 수 유지를 위해 생성하는 신규 파드에 대한 데이터를 명시하는 파드 템플릿을 포함한다. 

디플로이먼트

파드와 레플리카셋에 대한 선언적 업데이트 제공하며 레플리카 셋의 상위 수준의 리소스이다. 블로그를 좀 찾아보니 레플리카셋 대신 디플로이먼트를 주로 사용하는 것 같다.


서비스

파드에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법이다. 아래 그림이 직관적인 이해를 돕는다.

서비스에 고유한 ip주소와 파드 집합에 대한 단일 dns명을 부여하고 로드밸런싱을 수행한다. 파드가 영구적이지 않고 새로 뜨고 교체되기 때문에 논리적으로 파드에 접근할 수 있도록 해주는 역할을 한다.

인그레스

클러스터 내의 서비스에 대한 외부 접근을 관리하는 api 오브젝트이며, 일반적으로 http를 관리한다. 외부 접근을 허용하게 하는 또 다른 방법으로는 노드 포트가 있는데 이는 L4레벨까지만 다룰 수 있어서 L7레벨까지의 접근을 허용하려면 인그레스를 사용한다.

 

.

.

쿠버네티스 세팅을 진행하며 추가로 필요한 개념들은 계속 추가해 나갈 예정!

다음 포스팅에서는 쿠버네티스 세팅을 진행해보겠다.

'개발계발 > 인프라' 카테고리의 다른 글

DynamoDB 톺아보기  (0) 2022.10.29