웹사이트 검색

Kubernetes에서 StatefulSet를 생성하는 방법


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

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

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

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

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

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

전제 조건

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

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

    우리가 할 일

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

  • Statefulset 만들기

    Statefulset 만들기

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

    vim statefulset.yml

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

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

    kubectl get statefulset

    kubectl create -f statefulset.yml

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

    kubectl get statefulset

    kubectl get service

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

    kubectl get pods

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

    kubectl get statefulset

    kubectl describe statefulset web

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

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

    kubectl get pods

    kubectl delete pods web-0 web-2

    kubectl get pods

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

    결론

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