k8s核心资源Pod-主容器之钩子函数

一、什么是钩子函数

钩子函数能够感知自身生命周期中的事件,并在相应的时刻到来时运行用户指定的程序代码。

kubernetes在主容器的启动之后和停止之前提供了两个钩子函数:

  • post start:容器创建之后执行,如果失败了会重启容器(启动后)

  • pre stop :容器终止之前执行,执行完成之后容器将成功终止,在其完成之前会阻塞删除容器的操作(终止前)

二、支持的三种方式定义动作

Exec命令:在容器内执行一次命令

复制代码
……
lifecycle:
  postStart: 
    exec:
      command:
      - cat
      - /tmp/healthy

TCPSocket:在当前容器尝试访问指定的socket

复制代码
……      
lifecycle:
  postStart:
    tcpSocket:
      port: 8080
……

HTTPGet:在当前容器中向某url发起http请求

复制代码
……
lifecycle:
  postStart:
    httpGet:
      path: / #URI地址
      port: 80 #端口号
      host: 192.168.19.1 #主机地址
      scheme: HTTP #支持的协议,http或者https
……

三、钩子函数的使用

接下来,以exec方式为例,演示下钩子函数的使用,创建pod-exec.yaml文件

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-hook-exec
  namespace: test
spec:
  containers:
  - name: main-container
    image: nginx:1.18
    ports:
    - name: nginx-port
      containerPort: 80
    lifecycle:
      postStart: 
        exec: #容器启动时执行修改nginx默认网页类容 
          command: ["/bin/sh", "-c", "echo helloworld > /usr/share/nginx/html/index.html"]
      preStop:
        exec:  #容器停止之前关闭nginx服务
          command: ["/usr/sbin/nginx","-s","quit"]

创建pod

复制代码
[root@master ~]# kubectl create -f pod-exec.yaml
pod/pod-hook-exec created
[root@master ~]# kubectl get pod -n test -o wide
NAME                READY   STATUS     RESTARTS   AGE
pod-hook-exec       1/1     Running    0          28s

访问pod

复制代码
[root@master ~]# curl http://10.244.1.14
helloworld
​
# 进入该pod
kubectl exec pod-hook-exec -n test -it -c main-container /bin/sh
​
# 进入目录,/usr/share/nginx/html
cd /usr/share/nginx/html
​
#查看index.html
cat index.html
相关推荐
lwx91485214 小时前
Docker-安装SSH服务
docker·容器·ssh
艾伦_耶格宇18 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
时间售卖铺19 小时前
Docker实战:一键部署轻量级容器
运维·docker·云原生
月落汀兰19 小时前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
艾伦_耶格宇20 小时前
【kubernetes - 1.28版本】-10 K8S命名空间
云原生·容器·kubernetes
tedcloud1231 天前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
syntaxsage1 天前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo1 天前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
草莓熊Lotso1 天前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
todoitbo1 天前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器