본문 바로가기

가상 머신/쿠버네티스

[ 쿠베네티스 / Kurbernetes ] 컨트롤러에 대해서 알아보기

반응형

Kubernetes의 컨트롤러는 클러스터 상태를 원하는 상태로 유지하기 위해 사용되는 주요 컴포넌트입니다.
컨트롤러는 클러스터의 현재 상태를 지속적으로 모니터링하고, 필요에 따라 조치를 취하여 원하는 상태를 유지합니다.
Kubernetes에서 제공하는 다양한 유형의 컨트롤러는 각각 특정한 목적과 기능을 가지고 있습니다.
주요 컨트롤러 타입은 다음과 같습니다:

1. ReplicationController

  • 목적: 지정된 수의 Pod 복제본이 항상 실행되도록 보장합니다.
  • 특징: 특정 수의 동일한 Pod를 유지하며, Pod가 죽거나 삭제되면 새로운 Pod를 생성합니다.
  • 예시:
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: my-replication-controller
    spec:
      replicas: 3
      selector:
        app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: mycontainer
            image: myimage

2. ReplicaSet

  • 목적: 지정된 수의 Pod 복제본이 항상 실행되도록 보장합니다.
  • 특징: ReplicationController의 개선된 버전으로, 더 강력한 레이블 셀렉터를 지원합니다. ReplicaSet은 보통 Deployment에 의해 관리됩니다.
  • 예시:
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: my-replicaset
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: mycontainer
            image: myimage

3. Deployment

  • 목적: 애플리케이션의 배포 및 업데이트를 관리합니다.
  • 특징: ReplicaSet을 생성하고 관리하여 애플리케이션의 롤아웃, 롤백, 업데이트 전략을 제공합니다.
  • 예시:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: mycontainer
            image: myimage

4. StatefulSet

  • 목적: 상태를 가지는 애플리케이션을 관리합니다.
  • 특징: Pod의 정해진 순서와 네트워크 식별자를 보장하며, 데이터가 있는 Pod에 적합합니다. 예를 들어, 데이터베이스 클러스터와 같은 상태 저장 애플리케이션에 사용됩니다.
  • 예시:
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: my-statefulset
    spec:
      serviceName: "my-service"
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: mycontainer
            image: myimage
            volumeMounts:
            - name: myvolume
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: myvolume
        spec:
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 1Gi

5. DaemonSet

  • 목적: 클러스터의 모든 (또는 특정) 노드에서 단일 Pod 복제본이 실행되도록 보장합니다.
  • 특징: 클러스터 내의 모든 노드에 Pod를 배포하며, 노드가 추가되거나 제거될 때 자동으로 조정됩니다. 주로 로그 수집, 모니터링 에이전트, 시스템 관리 작업 등에 사용됩니다.
  • 예시:
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: my-daemonset
    spec:
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: mycontainer
            image: myimage

6. Job

  • 목적: 일회성 작업을 실행하고 완료를 보장합니다.
  • 특징: 작업이 완료될 때까지 하나 이상의 Pod를 실행하며, 성공적으로 완료되면 더 이상 실행되지 않습니다.
  • 예시:
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: my-job
    spec:
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: mycontainer
            image: myimage
          restartPolicy: Never

7. CronJob

  • 목적: 일정한 시간 간격으로 Job을 실행합니다.
  • 특징: Cron 표현식을 사용하여 주기적으로 Job을 실행하며, 특정 시간에 작업을 예약할 수 있습니다.
  • 예시:
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: my-cronjob
    spec:
      schedule: "*/5 * * * *"
      jobTemplate:
        spec:
          template:
            metadata:
              labels:
                app: myapp
            spec:
              containers:
              - name: mycontainer
                image: myimage
              restartPolicy: Never

이러한 다양한 컨트롤러들은 Kubernetes 클러스터에서 애플리케이션의 다양한 요구 사항을 충족시키기 위해 사용되며, 각각의 목적과 사용 사례에 맞게 선택하여 사용할 수 있습니다.

반응형