k8s回调钩子

回调钩子是pod生命周期中触发的动作,分别是创建容器之后,和删除容器之前。
在这里插入图片描述

lifecycle  #做回调钩子的(pod生命周期中的回调钩子)

preStop		:结束回调钩子,在容器终止之前执行。
postStart	:开始回调钩子,在容器开始之后执行。(用于初始化工作通知等工作的)

开始回调钩子(postStart)里面有如下三种方式:
exec		: 执行命令,执行的结果如果返回值不为0即为失败(注:exec下面执行的命令,必须为当前容器内支持的命令)
tcpsocket	:探测端口,探测的端口如果探测失败即为失败
httpget		: 访问链接 ,如果访问链接状态码不为200即为失败

验证开始回调钩子

vim lifecycle.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lifecycle
spec:
  selector:
    matchLabels:
      app: lifecycle
  template:
    metadata:
      labels:
        app: lifecycle
    spec:
      containers:
        - name: lifecycle
          image: nginx
          lifecycle:
            postStart:   # 启动回调钩子
              exec:
                command:
                  - "/bin/sh"
                  - "-c"
                  - "touch /opt/lifecycle.txt"


#应用资源
[root@k8s-master k8spod]# kubectl apply -f lifecycle.yaml 
# 查看pod
[root@k8s-master k8spod]# kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
bash                        1/1     Running   0          14h
lifecycle-6f5f6596d-8fh6t   1/1     Running   0          21s
mysql-56f8cdb464-lrs2l      1/1     Running   0          14h
# 进入pod
[root@k8s-master k8spod]# kubectl exec -it lifecycle-6f5f6596d-8fh6t -- sh
# ls /opt
lifecycle.txt # 文件存在,就验证了开始回调钩子

验证结束回调钩子

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lifecycle
spec:
  selector:
    matchLabels:
      app: lifecycle
  template:
    metadata:
      labels:
        app: lifecycle
    spec:
      containers:
        - name: lifecycle
          image: nginx
          lifecycle:
            postStart:         # 开始回调钩子
              exec:
                command:
                  - "/bin/sh"   #大多数容器内都支持sh,bash有的不支持
                  - "-c"        #指定将要执行的命令
                  - "touch /opt/123.txt"  #执行的命令
            preStop:             # 结束回调钩子
              exec:
                command:
                  - "/bin/sh"
                  - "-c"
                  - "rm -rf /opt/123.txt"  #删除容器当中的文件,要是下面挂载的宿主主机目录,则把宿主主机目录下的文件也删掉了
          volumeMounts:       # 选择挂载
            - mountPath: /opt/
              name: hostpath   #指定下面要挂载的本地存储卷
      volumes:            # 定义挂载
        - name: hostpath   # 下面要指定挂载本机的目录
          hostPath:    # 指定将要挂载的目录
            path: /opt   # 要挂载的本地目录


# 应用资源
kubectl apply -f lifecycle.yaml

# 查看资源在哪个节点
[root@k8s-master k8spod]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
bash                         1/1     Running   0          14h   10.244.1.104   k8s-node2   <none>           <none>
lifecycle-76c8858c4d-r7q69   1/1     Running   0          25s   10.244.3.67    k8s-node1   <none>           <none>
mysql-56f8cdb464-lrs2l       1/1     Running   0          15h   10.244.1.101   k8s-node2   <none>           <none>



# 未删除pod时候123.txt存在,删除pod后文件不存在,说明启动了结束回调钩子
[root@k8s-node1 ~]# cd /opt/
[root@k8s-node1 opt]# ls 
123.txt  cni  containerd

[root@k8s-node1 opt]# ls
cni  containerd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s钩子函数可以在容器生命周期的不同阶段执行特定的操作,常见的使用场景包括: 1. 在容器启动前进行一些初始化操作,例如加载配置文件、创建目录等。 2. 在容器启动后进行一些额外的配置,例如修改环境变量、执行一些命令等。 3. 在容器退出前进行一些清理操作,例如删除临时文件、发送通知等。 下面是一个使用钩子函数的例子,假设我们有一个应用程序需要在容器启动前加载配置文件,并在容器退出前发送通知。我们可以使用k8s钩子函数来实现这个功能。 ```yaml apiVersion: v1 kind: Pod metadata: name: myapp spec: containers: - name: myapp image: myapp:latest volumeMounts: - name: config mountPath: /etc/myapp lifecycle: postStart: exec: command: ["/bin/sh", "-c", "echo 'Loading config file'; cp /etc/myapp/config.ini /app/config.ini"] preStop: exec: command: ["/bin/sh", "-c", "echo 'Sending notification'; curl -X POST http://notification-service/send"] volumes: - name: config configMap: name: myapp-config ``` 在上面的例子中,我们定义了一个Pod,并在其中定义了一个容器。在容器中,我们使用了一个名为config的卷,并将其挂载到了容器的/etc/myapp目录下。在容器启动前,我们使用了postStart钩子函数,在容器内部执行了一个命令,将配置文件从config卷中复制到了/app/config.ini文件中。在容器退出前,我们使用了preStop钩子函数,在容器内部执行了一个命令,发送了一个HTTP POST请求到notification-service服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值