咱们知道,K8S能够在应用容器启动以前先执行一些预约义的操做,好比事先生成一些数据,以便于应用容器在启动的时候使用。这种方式能够经过init container技术实现,具体能够参考《Kubernetes init container》。html
那么事实上,在实际生产中,还有一种需求,就是咱们须要在应用容器启动后执行一些初始化操做,好比设置容器的dns参数等,说到这里就不得很少提一句,k8s到目前为止尚不支持经过为kubelet添加参数的方式为应用容器设置dns的options。事实上咱们在生产中之因此使用到本篇文档所说的这种钩子,就是为了在应用容器启动后为其设置一个dns的options。nginx
除了为容器添加启动后的钩子以外,还能够为容器添加销毁以前的钩子。api
定义启动后和销毁前钩子示例:post
apiVersion: v1 kind: Pod metadata: name: lifecycle-demo spec: containers: - name: lifecycle-demo-container image: nginx lifecycle: postStart: exec: command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"] preStop: exec: command: ["/usr/sbin/nginx","-s","quit"]
下面是一个在启动后执行多条指令的示例:ui
apiVersion: v1 kind: Pod metadata: name: dyland-lua-api-pre spec: containers: - name: dyland-lua-api-pre image: hub.dz11.com/op-base/openresty:1.11.2.4 imagePullPolicy: Always lifecycle: postStart: exec: command: - "sh" - "-c" - > /bin/echo 'options single-request-reopen' >> /etc/resolv.conf; /bin/echo '123456' > /home/www/server/rsync.pwd; chmod 400 /home/www/server/rsync.pwd; /usr/bin/rsync -avzLu --password-file=/home/www/server/rsync.pwd www@$(RSYNC_SERVER)::pre-lua/dyland-lua-api.pre.wh03 /home/www/server/ > /dev/stdout 2>&1; env: - name: RSYNC_SERVER value: 10.1.51.109