Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

9.3.5. 生命周期 Hook

RecreateRolling 策略支持生命周期 hook,它允许在策略的预定义点将行为注入到部署过程中:

以下是 pre 生命周期 hook 示例:

pre:
  failurePolicy: Abort
  execNewPod: {} 1

每个 hook 都有 failurePolicy,定义在遇到 hook 失败时策略应执行的操作:

Abort

如果 hook 失败,部署过程将被视为失败。

Retry

应重试 hook 执行过程,直到成功为止。

Ignore

所有 hook 失败都应忽略,部署应继续进行。

Hook 具有特定类型的字段,用于描述如何执行 Hook。目前,pod-based hooks 是唯一受支持的 hook 类型,通过 execNewPod 字段指定。

9.3.5.1. 基于 Pod 的生命周期 Hook

基于 Pod 的生命周期 hook 在从部署配置中模板派生的新 pod 中执行 hook 代码。

以下简化的部署配置示例使用了 Rolling 策略。为简明起见,省略了触发器和其他一些次要的细节:

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
command 覆盖 openshift/origin-ruby-sample 镜像中定义的任何 ENTRYPOINT
3
env 是 hook 容器的一组可选环境变量。
4
volumes 是 hook 容器的一组可选的卷引用。

在本例中,将使用 helloworld 容器中的 openshift/origin-ruby-sample 镜像在新 pod 中执行 pre hook。hook pod 将具有以下属性:

  • hook 命令将是 /usr/bin/command arg1 arg2
  • hook 容器将具有 CUSTOM_VAR1=custom_value1 环境变量。
  • hook 失败策略是 Abort,这意味着如果 hook 失败,部署过程将失败。
  • hook pod 将从部署配置 pod 中继承 data 卷。