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:
- 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.
- 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.
- 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.
- 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...