4.3.5. 라이프사이클 후크

롤링 및 재현 전략에서는 라이프사이클 후크 또는 배포 후크를 지원하므로 전략 내의 미리 정의한 지점에서 배포 프로세스에 동작을 삽입할 수 있습니다.

pre 라이프사이클 후크의 예

pre:
  failurePolicy: Abort
  execNewPod: {} 1

1
execNewPod는 Pod 기반 라이프사이클 후크입니다.

모든 후크에는 후크에 오류가 발생했을 때 전략에서 취해야 하는 조치를 정의하는 실패 정책이 있습니다.

Abort

후크가 실패하면 배포 프로세스가 실패로 간주됩니다.

Retry

성공할 때까지 후크를 다시 실행합니다.

Ignore

모든 후크 오류를 무시하고 배포를 계속 진행합니다.

후크에는 후크 실행 방법을 설명하는 유형별 필드가 있습니다. 현재는 Pod 기반 후크가 지원되는 유일한 후크 유형으로 execNewPod필드에 지정되어 있습니다.

Pod 기반 라이프사이클 후크

Pod 기반 라이프사이클 후크는 DeploymentConfig 오브젝트의 템플릿에서 파생된 새 Pod에서 후크 코드를 실행합니다.

간소화된 다음 예제 배포에서는 롤링 전략을 사용합니다. 간결성을 위해 트리거 및 몇 가지 기타 사소한 세부 정보는 생략되었습니다.

kind: DeploymentConfig
apiVersion: v1
metadata:
  name: frontend
spec:
  template:
    metadata:
      labels:
        name: frontend
    spec:
      containers:
        - name: helloworld
          image: openshift/origin-ruby-sample
  replicas: 5
  selector:
    name: frontend
  strategy:
    type: Rolling
    rollingParams:
      pre:
        failurePolicy: Abort
        execNewPod:
          containerName: helloworld 1
          command: [ "/usr/bin/command", "arg1", "arg2" ] 2
          env: 3
            - name: CUSTOM_VAR1
              value: custom_value1
          volumes:
            - data 4
1
helloworld 이름은 spec.template.spec.containers[0].name을 나타냅니다.
2
commandopenshift/origin-ruby-sample 이미지로 정의된 모든 ENTRYPOINT를 재정의합니다.
3
env는 후크 컨테이너의 선택적 환경 변수 세트입니다.
4
volume은 후크 컨테이너의 선택적 볼륨 참조 세트입니다.

이 예제에서 pre 후크는 helloworld 컨테이너의 openshift/origin-ruby-sample 이미지를 사용하여 새 Pod에서 실행됩니다. 후크 Pod에는 다음과 같은 속성이 있습니다.

  • 후크 명령은 /usr/bin/command arg1 arg2입니다.
  • 후크 컨테이너에는 CUSTOM_VAR1=custom_value1 환경 변수가 있습니다.
  • 후크 실패 정책이Abort이므로 후크가 실패하면 배포 프로세스가 실패합니다.
  • 후크 Pod는 DeploymentConfig 오브젝트 Pod의 data 볼륨을 상속합니다.

4.3.5.1. 라이프사이클 후크 설정

CLI를 사용하여 배포에 라이프사이클 후크 또는 배포 후크를 설정할 수 있습니다.

프로세스

  1. oc set deployment-hook 명령을 사용하여 원하는 후크 유형을 --pre, --mid 또는 --post로 설정합니다. 예를 들어 사전 배포 후크를 설정하려면 다음을 실행합니다.

    $ oc set deployment-hook dc/frontend \
        --pre -c helloworld -e CUSTOM_VAR1=custom_value1 \
        --volumes data --failure-policy=abort -- /usr/bin/command arg1 arg2