Concepto de función de enlace de recursos POD

En Kubernetes, la función de enlace de recursos del Pod (Lifecycle Hooks) es un conjunto de funciones de devolución de llamada que pueden insertar lógica personalizada en el ciclo de vida del Pod. Estas funciones de enlace le permiten realizar operaciones específicas en diferentes etapas del Pod, como ejecutar scripts antes o después de que se inicie el contenedor, enviar notificaciones, etc.

Kubernetes proporciona las siguientes cuatro funciones de enlace:

  1. PostStart : una función de enlace que se ejecuta inmediatamente después de que se inicia el contenedor. Se puede utilizar para realizar algunas tareas de inicialización, cargar configuraciones o enviar notificaciones de inicio.
  2. PreStop : función de enlace ejecutada antes de que finalice el contenedor. Se puede utilizar para realizar algunas tareas de limpieza, guardar estado o enviar notificaciones de terminación, etc.
  3. PreStartContainer : función de enlace ejecutada antes de que se inicie el contenedor. Se puede utilizar para realizar algunas tareas de preprocesamiento antes de que se inicie el contenedor, como verificación de configuración, preparación de archivos, etc.
  4. PostStartContainer : función de enlace ejecutada después de que se inicia el contenedor. Se puede utilizar para realizar algunas operaciones después de que se inicia el contenedor, como controles de estado, servicios de registro, etc.

Estas funciones de enlace se pueden definir en el campo de la configuración del Pod lifecycle. He aquí un ejemplo:

Sintaxis de configuración de la función de enlace

[root@k8s-master ~]# kubectl explain pod.spec.containers.lifecycle
[root@k8s-master ~]# kubectl explain pod.spec.containers.lifecycle.postStart
[root@k8s-master ~]# kubectl explain pod.spec.containers.lifecycle.preStop

KIND:     Pod
VERSION:  v1
RESOURCE: lifecycle <Object>
FIELDS:
   postStart	<Object>			//定义容器启动后执行的钩子函数
     exec	<Object>				//exec命令方式,在容器里面执行相应的命令
       command		<[]string>		//指定运行的命令
   	 httpGet	<Object>			//httpGet方式,探测容器应用的url
   	   host	<string>				//主机地址,一般就是pod地址
   	   path	<string>				//请求的url路径
   	   port	<string>				//应用端口号
   	   scheme	<string>			//协议
     tcpSocket	<Object>			//tcpSocket方式,访问容器指定的socket
     	host	<string>			//pod地址
     	port	<string>			//端口号
   preStop	<Object>				//定期容器关闭前执行的钩子函数
     exec	<Object>				//exec命令方式,在容器里面执行相应的命令
     ·····
   	 httpGet	<Object>			//httpGet方式,探测容器应用的url
   	 ·····
     tcpSocket	<Object>			//tcpSocket方式,访问容器指定的socket
     ·····
postStart 和 preStop的子配置语法都一致

Comandos de soporte del manejador de ganchos

comando ejecutivo: ejecuta un comando una vez dentro del contenedor

lifecycle:
  postStart:
    exec:
      command:
      - cat						#命令和参数可以写在一行也可以分开写
      - /tmp/healthy

TCPSocket: intente acceder al socket especificado en el contenedor actual

lifecycle:
  postStart:
    tcpSocket:
      port: 8080

HTTPGet: inicia una solicitud http a una determinada URL en el contenedor actual

lifecycle:
  postStart:
    httpGet:
      path: /
      port: 80
      host: 192.168.10.111
      scheme: HTTP

Caso

Configure la función de enlace para crear un archivo de página de inicio después de que se inicie el contenedor nginx y salga correctamente de nginx cuando esté cerrado. 

1.编写yaml
[root@k8s-master ~]# vim pod-hook-exec.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-hook-exec
  namespace: dev
  labels:
    app: base
spec:
  containers:
  - name: main-container
    image: nginx:1.18
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP
    lifecycle:					#定义钩子配置
      postStart:				#定义容器启动后的钩子函数
        exec:					#采用exec命令方式
          command: ["/bin/sh","-c","echo postStart... > /usr/share/nginx/html/index.html"]		#创建一个首页文件
      preStop:					#定义容器退出前的钩子函数
        exec:					#采用exec命令方式
          command: ["/usr/sbin/nginx","-s","quit"]			#退出nginx

2.创建pod
[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f pod-hook-exec.yaml
pod/pod-hook-exec created

3.查看pod是否运行
[root@k8s-master ~/k8s_1.19_yaml]# kubectl get pod pod-hook-exec -n dev -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATES
pod-hook-exec   1/1     Running   0          23s   10.244.3.22   k8s-node2   <none>           <none>

4.访问容器中的nginx查看首页是否是容器启动后执行的钩子函数
[root@k8s-master ~]# curl 10.244.3.22
postStart...