K8S钩子操作

简介

我们知道,K8S可以在应用容器启动之前先执行一些预定义的操作,比如事先生成一些数据,以便于应用容器在启动的时候使用。这种方式可以通过init container技术实现,具体可以参考《Kubernetes init container》

那么事实上,在实际生产中,还有一种需求,就是我们需要在应用容器启动后执行一些初始化操作,比如设置容器的dns参数等,说到这里就不得不多提一句,k8s到目前为止尚不支持通过为kubelet添加参数的方式为应用容器设置dns的options。事实上我们在生产中之所以使用到本篇文档所说的这种钩子,就是为了在应用容器启动后为其设置一个dns的options。

除了为容器添加启动后的钩子之外,还可以为容器添加销毁之前的钩子。

配置

定义启动后和销毁前钩子示例:

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"]

下面是一个在启动后执行多条指令的示例:

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

猜你喜欢

转载自www.cnblogs.com/breezey/p/9233344.html
k8s
今日推荐