9.3.5. 生命周期 Hook
Recreate 和 Rolling 策略支持生命周期 hook,它允许在策略的预定义点将行为注入到部署过程中:
以下是 pre
生命周期 hook 示例:
pre:
failurePolicy: Abort
execNewPod: {} 1
- 1
execNewPod
是基于 pod 的生命周期 hook。
每个 hook 都有 failurePolicy
,定义在遇到 hook 失败时策略应执行的操作:
| 如果 hook 失败,部署过程将被视为失败。 |
| 应重试 hook 执行过程,直到成功为止。 |
| 所有 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
在本例中,将使用 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
卷。