상태 저장 애플리케이션 배포

이 페이지에서는 Google Kubernetes Engine을 사용하여 상태 저장 애플리케이션을 배포하는 방법을 설명합니다.

개요

상태 저장 애플리케이션은 서버, 클라이언트, 기타 애플리케이션에서 사용할 수 있도록 영구 디스크 저장소에 데이터를 저장합니다. 상태 저장 애플리케이션의 예로는 데이터가 저장되고 다른 애플리케이션에 의해 검색되는 데이터베이스 또는 키-값 저장소가 있습니다.

영구 저장소는 요청 시 동적 프로비저닝이 가능하므로 기본 볼륨을 미리 수동으로 만들 필요가 없습니다. Kubernetes에서는 StorageClass를 만들어 동적 프로비저닝을 구성합니다. GKE에서는 기본 StorageClass가 설치되어 있으므로 Google Compute Engine 영구 디스크를 동적으로 프로비저닝할 수 있습니다.

Kubernetes는 StatefulSet 컨트롤러를 사용하여 상태 저장 애플리케이션을 StatefulSet 객체로 배포합니다. StatefulSet의 포드는 상호 호환되지 않습니다. 각 포드는 어디에 예약되는지에 상관없이 유지되는 고유한 식별자를 갖습니다.

상태 저장 애플리케이션은 세션 간의 클라이언트 데이터가 서버에 저장되지 않는 상태 비추적 애플리케이션과 대조됩니다.

시작하기 전에

이 작업을 준비하려면 다음 단계를 수행하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project [PROJECT_ID]
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 리전 클러스터를 사용하는 경우 기본 컴퓨팅 리전을 설정합니다.
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update
  • 컨테이너식 애플리케이션이 Container Registry와 같은 이미지 레지스트리에 저장되어 있는지 확인합니다.

GKE를 처음 사용하는 경우, GKE API를 사용 설정하고 제품의 작동 방식을 배울 수 있는 빠른 시작을 완료해야 합니다.

StatefulSet에서 영구 저장소 요청

애플리케이션은 PersistentVolumeClaim 객체를 사용하여 영구 저장소를 요청할 수 있습니다.

일반적으로 포드뿐 아니라 PersistentVolumeClaim 객체도 사용자가 만들어야 합니다. 다만 StatefulSet에는 PersistentVolumeClaim 객체를 자동으로 생성하는 volumeClaimTemplates 배열이 포함됩니다. 각 StatefulSet 복제본은 고유한 PersistentVolumeClaim 객체를 얻습니다.

StatefulSet 만들기

kubectl apply를 사용하여 StatefulSet를 만듭니다.

kubectl apply는 매니페스트 파일을 사용하여 클러스터에서 리소스를 생성, 업데이트, 삭제합니다. 이것은 객체 구성의 선언적 메소드입니다. 이 메소드는 변경 내용을 객체 구성 파일에 다시 병합하지 않고 실시간 객체에 대한 쓰기를 보관합니다.

다음은 별도로 생성된 서비스가 적용되는 간단한 StatefulSet의 예입니다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: [STATEFULSET_NAME]
spec:
  serviceName: [SERVICE_NAME]
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app=[APP_NAME]
    spec:
      containers:
      - name: [CONTAINER_NAME]
        image: ...
        ports:
        - containerPort: 80
          name: [PORT_NAME]
        volumeMounts:
        - name: [PVC_NAME]
          mountPath: ...
  volumeClaimTemplates:
  - metadata:
      name: [PVC_NAME]
      annotations:
        ...
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

각 항목의 의미는 다음과 같습니다.

  • [STATEFULSET_NAME]은 StatefulSet에 대해 선택하는 이름입니다
  • [SERVICE_NAME]은 서비스에 대해 선택하는 이름입니다
  • [APP_NAME]은 포드에서 실행되는 애플리케이션에 대해 선택하는 이름입니다
  • [CONTAINER_NAME]은 포드의 컨테이너에 대해 선택하는 이름입니다
  • [PORT_NAME]은 StatefulSet에 의해 열리는 포트에 대해 선택하는 이름입니다
  • [PVC_NAME]은 PersistentVolumeClaim에 대해 선택하는 이름입니다

이 파일에서 kind 필드는 파일에서 정의된 사양을 사용하여 StatefulSet 객체를 만들어야 한다고 지정합니다. 이 예시 StatefulSet는 3개의 복제된 포드를 생성하고, StatefulSet를 인터넷에 노출하기 위해 포트 80을 엽니다.

StatefulSet를 만들려면 다음 명령어를 실행하세요.

kubectl apply -f [STATEFULSET_FILE]

kubectl apply -f [DIRECTORY]/를 사용하여 디렉토리에 저장된 구성 파일에서 정의된 모든 객체(기존 객체 제외)를 만들 수도 있습니다.

kubectl apply에 대한 자세한 내용은 kubectl 참조 문서를 참조하세요.

StatefulSet 검사

kubectl

StatefulSet를 검사하려면 다음 명령어를 실행하세요.

kubectl get statefulset [STATEFULSET_NAME] -o yaml

이 명령어는 StatefulSet의 라이브 구성을 YAML 형식으로 표시합니다.

StatefulSet에 의해 생성된 포드를 나열하려면 다음 명령어를 실행하세요.

kubectl get pods -l app=[APP_NAME]

이 명령어에서 -l 플래그는 kubectl에게 앱 [APP_NAME] 라벨이 지정된 모든 포드를 가져오라고 지시합니다.

출력은 다음과 비슷합니다.

NAME                                READY     STATUS    RESTARTS   AGE
[POD_NAME]                                      1/1       Running   0          1m
[POD_NAME]                                      1/1       Running   0          1m

StatefulSet에 대한 자세한 정보를 보려면 다음 명령어를 실행합니다.

kubectl describe statefulset [STATEFULSET_NAME]

여기서 [STATEFULSET_NAME]은 StatefulSet의 이름입니다.

특정 포드에 대한 정보를 가져오려면 다음을 실행합니다.

kubectl describe pod [POD_NAME]

생성된 PersistentVolumeClaim을 나열하려면 다음을 실행합니다.

kubectl get pvc

출력은 다음과 비슷합니다.

NAME                            STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
[STATEFULSET_NAME]-[PVC_NAME]-0 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800002   1G         RWO            standard        9s
[STATEFULSET_NAME]-[PVC_NAME]-1 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800003   1G         RWO            standard        9s
[STATEFULSET_NAME]-[PVC_NAME]-2 Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800004   1G         RWO            standard        9s

특정 PersistentVolumeClaim에 대한 정보를 가져오려면 다음을 실행합니다.

kubectl describe pvc [STATEFULSET_NAME]-[PVC_NAME]-0

특정 PersistentVolume에 대한 정보를 가져오려면 다음을 실행합니다.

kubectl describe pv [PV_NAME]

Console

StatefulSet를 검사하려면 다음 단계를 수행하세요.

  1. GCP Console에서 Google Kubernetes Engine 작업 부하 메뉴로 이동합니다.

    작업 부하 메뉴로 이동

  2. 메뉴에서 원하는 작업 부하를 선택합니다.

작업 부하 메뉴는 몇 가지 메뉴를 제공합니다.

  • StatefulSet의 라이브 구성을 보려면 YAML을 클릭합니다.
  • StatefulSet와 관련된 모든 이벤트를 보려면 이벤트를 클릭합니다.
  • StatefulSet의 업데이트 기록을 보려면 업데이트 기록을 클릭합니다.

StatefulSet 업데이트

StatefulSet를 업데이트하는 방법은 여러 가지가 있습니다. 일반적인 선언적 메소드는 kubectl apply입니다. 셸 또는 원하는 편집기에서 직접 StatefulSet를 업데이트하려면 kubectl edit를 사용하면 됩니다. GCP Console의 GKE 작업 부하 메뉴에서 YAML 편집기를 사용할 수도 있습니다.

이미지, 리소스 사용량/요청 또는 구성 등 StatefulSet의 포드 사양에 업데이트를 롤아웃할 수 있습니다.

kubectl apply

새롭거나 업데이트된 매니페스트 파일을 적용하여 StatefulSet를 업데이트할 수 있습니다. 이것은 확장할 때나 애플리케이션의 새 버전을 지정하는 등 StatefulSet를 다양하게 변경하는 경우에 유용합니다.

StatefulSet를 업데이트하려면 다음 명령어를 실행하세요.

kubectl apply -f [STATEFULSET_FILE]

여기서 [STATEFULSET_FILE]은 업데이트된 매니페스트 파일입니다.

kubectl apply 명령어는 매니페스트 파일을 리소스에 적용합니다. 지정된 리소스가 없으면 명령어에 의해 생성됩니다,

kubectl apply에 대한 자세한 내용은 kubectl 참조 문서를 참조하세요.

Console

StatefulSet의 구성을 수정하려면 다음 단계를 수행하세요.

  1. GCP Console에서 Google Kubernetes Engine 작업 부하 메뉴로 이동합니다.

    작업 부하 메뉴로 이동

  2. 원하는 작업 부하를 선택합니다.

  3. 수정을 클릭합니다.

  4. 편집기를 사용하여 객체를 원하는 대로 변경합니다.

  5. 저장을 클릭합니다.

업데이트 롤아웃 검사

kubectl

StatefulSet의 롤아웃을 검사하려면 다음 명령을 실행합니다.

kubectl rollout status statefulset [STATEFULSET_NAME]

StatefulSet의 롤아웃 기록을 보려면 다음을 실행합니다.

kubectl rollout history statefulset [STATEFULSET_NAME]

롤아웃을 취소하려면 다음을 실행합니다.

kubectl rollout undo statefulset [STATEFULSET_NAME]

Console

StatefulSet의 업데이트 기록을 보려면 다음 단계를 수행하세요.

  1. GCP Console에서 Google Kubernetes Engine 작업 부하 메뉴로 이동합니다.

    작업 부하 메뉴로 이동

  2. 메뉴에서 원하는 작업 부하를 선택합니다.

  3. 업데이트 기록을 클릭합니다.

  4. 원하는 버전을 선택합니다.

업데이트 전략

StatefulSet의 updateStrategy 필드를 사용하여 컨테이너, 리소스 요청/한도, StatefulSet의 포드 주석에 대한 자동 롤링 업데이트를 구성하고 사용 중지할 수 있습니다.

StatefulSet 업데이트 전략에 대해서는 Kubernetes 문서의 업데이트 전략을 참조하세요.

StatefulSet 확장

kubectl

kubectl scale을 사용하여 언제든지 StatefulSet를 확장할 수 있습니다.

수동으로 StatefulSet를 확장하려면 다음 명령어를 실행하세요.

kubectl scale statefulset [STATEFULSET_NAME] --replicas [NUMBER_OF_REPLICAS]

여기서 [NUMBER_OF_REPLICAS]는 원하는 복제된 포드의 수입니다.

Console

StatefulSet를 확장하려면 다음 단계를 수행하세요.

  1. GCP Console에서 Google Kubernetes Engine 작업 부하 메뉴로 이동합니다.

    작업 부하 메뉴로 이동

  2. 메뉴에서 원하는 작업 부하를 선택합니다.

  3. 작업을 클릭한 후 확장을 클릭합니다.

  4. 복제본 필드에 원하는 복제본 수를 입력합니다.

  5. 확장을 클릭합니다.

StatefulSet 삭제

kubectl

StatefulSet를 삭제하려면 다음 명령어를 실행하세요.

kubectl delete statefulset [STATEFULSET_NAME]

Console

StatefulSet를 삭제하려면 다음 단계를 수행하세요.

  1. GCP Console에서 Google Kubernetes Engine 작업 부하 메뉴로 이동합니다.

    작업 부하 메뉴로 이동

  2. 메뉴에서 원하는 작업 부하를 선택합니다.

  3. 삭제를 클릭합니다.

  4. 확인 대화상자 메뉴에서 삭제를 클릭합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine