Red Hat Training
A Red Hat training course is available for OpenShift Container Platform
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卷。