Kubernetes에서 StatefulSet를 생성하는 방법


이 페이지에서

  1. 전제 조건
  2. 우리가 할 일\n
  3. Statefulset 만들기
  4. 결론

StatefulSet에는 고유하고 영구적인 ID와 안정적인 호스트 이름이 있는 Pod 집합이 포함되어 있습니다. 포드 템플릿은 해당 포드에 대한 사양을 포함하는 Statefulset에서 사용되며 포드는 이 사양을 사용하여 생성됩니다. Kubernetes에서 Statefulset를 사용하여 상태 저장 애플리케이션과 클러스터 애플리케이션을 배포할 수 있습니다. 컨테이너 이미지와 볼륨을 포함하는 Pod 사양을 변경하여 StatefulSet를 업데이트할 수 있습니다.

응용 프로그램에 다음 속성이 필요한 경우 StatefulSet를 사용할 수 있습니다.

  • 안정적이고 고유한 네트워크 식별자.\n
  • 안정적이고 지속적인 스토리지.
  • 정렬되고 정상적인 배포 및 확장.\n
  • 정렬되고 자동화된 롤링 업데이트.\n

N개의 복제본이 있는 StatefulSet의 경우 Pod가 배포될 때 {0..N-1}부터 순차적으로 생성됩니다. Pod가 삭제되면 역순으로 {N-1..0}부터 종료됩니다.

Statefulset에 대한 자세한 내용을 보려면 여기를 클릭하십시오.

이 기사에서는 Nginx 포드의 복제본으로 Statefulset를 생성합니다. Pod에서 작업을 수행하여 삭제 및 생성 방법을 확인합니다.

전제 조건

<올 스타일=텍스트-정렬:왼쪽>

  • 최소 1개의 작업자 노드가 있는 Kubernetes 클러스터.
    Kubernetes 클러스터를 만드는 방법을 알아보려면 여기를 클릭하세요. 이 안내서는 AWS Ubuntu 18l04 EC2 인스턴스에서 1개의 마스터와 2개의 노드가 있는 Kubernetes 클러스터를 생성하는 데 도움이 됩니다.\n

    우리가 할 일

    <올 스타일=텍스트-정렬:왼쪽>

  • Statefulset 만들기

    Statefulset 만들기

    파일을 만들고 그 안에 다음 Statefulset 정의를 추가합니다.

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 3
      template:
        metadata:
          labels:
            app: nginx
        spec:
          terminationGracePeriodSeconds: 10
          containers:
          - name: nginx
            image: k8s.gcr.io/nginx-slim:0.8
            ports:
            - containerPort: 80
              name: web

    이 예에서

    • nginx라는 헤드리스 서비스는 네트워크를 제어하는 데 사용됩니다.\n
    • web이라는 이름의 StatefulSet에는 고유한 포드에서 실행될 nginx 컨테이너의 3개 복제본이 있습니다.\n
    • 버전이 slim:0.8인 nginx 이미지는 Nginx를 배포하는 데 사용됩니다.\n

    Statefulset을 생성하려면 다음 명령을 실행합니다.

    다음 2개의 명령을 실행하여 위 단계에서 생성한 Statefulset 및 Service를 나열합니다.

    다음 명령을 사용하여 포드를 가져오고 포드 이름에 접미사로 번호가 있는 포드를 확인합니다.

    Statefulset의 전체 세부 정보를 얻으려면 다음 명령을 실행합니다.

    이제 포드를 삭제하고 새 포드가 생성된 후에도 이름이 어떻게 유지되는지 살펴보겠습니다.

    생성 시 새 포드에 할당되는 이름을 확인하기 위해 2개의 포드를 삭제합니다.

    위의 스크린샷에서 Pod를 삭제한 후에도 새로 생성된 Pod의 이름이 같은 것을 볼 수 있습니다.

    결론

    이 기사에서는 Statefulset을 만들고 작업을 수행하여 세부 정보를 확인했습니다. 또한 포드를 삭제하여 포드 이름이 어떻게 유지되고 삭제 후 새로 생성된 포드에 동일한 이름이 할당되는지 확인했습니다.