쿠버네티스 개념 정리 - k8s를 구성하는 기초 오브젝트

2 minute read

kubernetes(k8s)를 공부하며 기본 개념 중 node, pod, workload resoures와 서비스에 대해 간략하게 정리했습니다.

쿠버네티스란?
컨테이너(화된 애플리케이션)의 자동화된 배포, 스케일링 등을 관리하는 시스템입니다.

Pods And Nodes

쿠버네티스 마스터는 워커 ‘머신’인 노드 위에 개별 포드들을 올려서 개별 어플리케이션을 실행한다. 노드와 포드에 대해 알아보자.

Pod

img 대부분의 포드는 1개의 컨테이너로 온전한 애플리케이션 역할을 수행

  • 한 개 이상의 컨테이너 그룹을 Pod라고 한다. (포드, 파드, 팟). 쿠버네티스는 컨테이너 단위가 아닌 포드 단위로 클러스터를 관리한다.
  • 따라서 쿠버네티스 플랫폼의 가장 작은 단위(atomic unit) 이며, 하나의 포드는 온전한 하나의 애플리케이션이 된다.
  • 포드 내의 컨테이너들은 공유 스토리지(Volumn), 네트워크(Cluster IP), 실행 정보 (container Image version, ports, …) 를 공유한다.

Node

img 이런 노드가 모여 쿠버네티스 클러스터를 구성

  • 쿠버네티스의 워커 머신이다. (가상, 물리 모두 가능)
  • 각 노드는 마스터에 의해 관리되며, 이런 노드들과 마스터가 쿠버네티스 클러스터를 구성한다.
  • 모든 포드는 노드 위에서 동작하고, 하나의 노드는 여러 개의 포드를 가질 수 있다.

Workload Resources

Pod를 일일이 관리하는 것은 너무 고되고 귀찮은 일이다. 따라서 K8s에서는 Pod 집합을 관리하기 위한 Workload Resources를 사용한다. 각 Resource는 Pod가 지정한 상태와 일치하는지 확인한다.

Deployment

  • Pod, ReplicaSet가 어떻게 구성되어야하는지 정의한다.
    • ReplicaSet: 지정된 수의 Pod Replica가 항상 실행되도록 보장한다. 단독으로도 사용가능하지만(kind: ReplicaSet), 디플로이먼트가 더 폭넓은 기능을 제공하는 상위 개념이기 때문에 디플로이먼트를 사용하는 것이 권장된다.
  • 버전 업데이트 등으로 인해 원하는 정의가 변경되었을 때는 현재 상태에서 원하는 상태로 바뀌도록 변경한다.
    • 변경 사항을 저장하는 revision을 남겨서 문제 발생 시에 이전 버전으로 롤백도 가능하다.

img replicaset-v1에서 replicaset-v2으로 변경하는 모습

  • 업데이트 방식도 정의할 수 있다.
    • 블루/그린: 포드를 한번에 싹
    • 롤링: 하나씩 차례로
    • 카나리: 일부는 신버전 일부는 구버전
  • Webserver, WAS처럼 Stateless한 application에 주로 이용된다.

deployment 사용 yaml 파일 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

StatefulSet

이름처럼 위의 Deployment와 달리 Stateful한 pod를 관리하기 위한 controller다. 그래서 pod들의 고유성과 순서를 보장한다.

  • Database는 마스터노드가 기동된 후에 워커 노드가 순차적으로 기동되어야하는 경우가 많은데, 이런 경우에 사용한다.
  • 개별 포드가 Persistent Volumn(PV)을 생성하여 연결하도록 실행한다. Pod가 비정상 종료된 경우에 새 Pod가 기존 Pod에 연결된 PV를 담당하게 된다.

DemonSet

클러스터를 운용하는데 기본적인 노드-로컬 기능(node-local facilities)을 제공하는 Pods를 정의한다.

  • 예를 들어, 노드 모니터링 데몬, 로그 수집 데몬, 클러스터 스토리지 데몬 등을 실행하는데 사용한다.
  • 모든 (혹은 일부) 노드가 Pod의 사본을 실행하도록 한다.
  • 모든 (혹은 일부) 노드가 항상 실행해야 할 특정 Pod를 관리한다.

Job & CronJob

Job은 실행 완료 후 중단되는 작업을 의미한다. 성공적으로 종료될 때까지 포드의 실행을 재시도 한다. CronJob은 반복 일정에 따라 Job을 생성한다.

  • Job을 삭제해야 Job이 생성한 포드가 정리된다.
  • 작업 유형
    • Non-Parallel Jobs
    • Parallel Jobs with a Fixed complete count
    • Parallel Jobs with a work queue

Service

쿠버네티스의 포드는 언제든지 생성되거나 삭제될 수 있는 비영구적인 리소스다. 따라서 가변적인 IP가 아닌 다른 방식으로 포드에 접근할 수 있어야 하는데, 쿠버네티스에서는 서비스라는 오브젝트를 이용한다.

img

  • 서비스 종류
    • ClusterIP: k8s 내부에서만 접근하는 경우
    • NodePort: 외부에서도 접근 가능. 모든 Node의 동일한 포트를 개방
    • LoadBalancer: AWS, GCP 같은 클라우드 서비스의 로드 밸런서를 사용

references

Leave a comment