首页 > 其他分享 >D16 kubernetes 容器生命周期回调

D16 kubernetes 容器生命周期回调

时间:2024-09-05 19:14:32浏览次数:11  
标签:容器 D16 生命周期 kubernetes 回调 master pod k8s poststart

1、简介

容器生命周期回调是指在容器的生命周期中执行用户定义的操作。
  • kubernetes支持以下生命周期回调
PostStart(容器启动后):在容器启动后立即执行的回调,它可以用于执行一些初始化任务
PreStop(容器停止前):在容器停止之前执行的回调。它可以用于执行清理或保存状态的操作
可以通过使用exec、httpGet或tcpSocket方法配置回调。有关这些方法的具体用法参考这个链接 https://www.cnblogs.com/suyj/p/18376865

2、PostStart

  • PostStart回调在容器启动后立即执行,它有以下应用场景
执行预热操作:执行一系列预热操作,例如加载应用程序所需的数据或缓存数据,以提高应用程序的响应速度
准备文件:修改容器中已有文件或外部地址下载文件,以确保应用程序可以使用到正确的文件
通知其他组件:向其他组件发送通知(如调用api),以通知它们容器以启动
  • PostStart回调配置示例如下:
[root@k8s-master k8s]# cat pod-poststart.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: pod-poststart
  name: pod-poststart
spec:
  containers:
  - name: web
    image: uhub.service.ucloud.cn/librarys/nginx:1.23
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo $(date) 'Container started' > /tmp/poststart.log"]
[root@k8s-master k8s]# kubectl apply -f pod-poststart.yaml
pod/pod-poststart unchanged
[root@k8s-master k8s]# kubectl exec -it pod-poststart  -- cat /tmp/poststart.log
Thu Sep 5 09:50:07 UTC 2024 Container started
	在上述配置中,lifecycle部分定义了一个PostStart回调,用于在容器启动后执行 echo $(date) 'Container started' > /tmp/poststart.log命令
	例如:有一个Python Django开发的web应用,它要求在启动之前执行数据同步操作,以确保对ORM模型代码的变更应用到数据库中。这一需求可以通过配置postStart回调来实现,配置示例如下:
[root@k8s-master k8s]# cat django-app.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: django
  name: django-app
spec:
  containers:
  - name: web
    image: lizhenliang/django-app:v1
    lifecycle:
      postStart:
        exec:
          command:
          - /bin/sh
          - -c
          - |
            python mamage.py makeigrations &&
            python manage.py migrate
通过这样的配置,pod启动时执行 python mamage.py makeigrations 和python manage.py migrate命令分别生成数据库迁移文件,执行数据同步操作
需要注意的是,这里的command字段使用横岗-写法,与中括号[]等价,当执行复杂命令时,这种写法更易读

3、preStop

  • preStop回调在容器终止之前执行,它有以下应用场景
优雅关闭连接:关闭数据库连接,网络连接等,以确保数据的完整性和资源的正确释放
保存状态和数据:将应用程序生成的状态和数据写入数据库中或远程存储,以便在下次启动时恢复到之前的状态
通知其他组件:向其他组件发起通知,以通知它们容器即将终止
  • preStop回调配置示例如下:
[root@k8s-master k8s]# cat pod-prestop.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: pod-prestop
  name: pod-prestop
spec:
  containers:
  - name: web
    image: uhub.service.ucloud.cn/librarys/nginx:1.23
    lifecycle:
      preStop:
        exec:
          command: ["nginx", "-s", "quit"]
[root@k8s-master k8s]# kubectl apply -f pod-prestop.yaml
pod/pod-prestop created
[root@k8s-master k8s]# kubectl get pod
NAME           READY   STATUS    RESTARTS   AGE
pod-prestop   1/1     Running   0          1s
在上述配置中,lifecycle部分定义了一个preStop回调,用于在容器终止前执行 nginx -s quit命令。该命令向正在运行的nginx进程发送关闭信号,使该进程在处理完当前正在进行的请求后,优雅的停止服务,释放相关资源,并最终关闭与客户端的链接。这种做法确保了正在处理的请求得到正确处理,避免了异常终止或数据丢失,并提高了网站的稳定性和可靠性

标签:容器,D16,生命周期,kubernetes,回调,master,pod,k8s,poststart
From: https://www.cnblogs.com/suyj/p/18398888

相关文章

  • Maven超详细教程(二):Maven 生命周期管理详解
    Maven作为Java开发者广泛使用的项目管理工具,其核心特性之一就是其强大的生命周期管理。Maven生命周期定义了一系列有序的阶段(phases),每个阶段都可以绑定特定的插件(plugins)和目标(goals),以实现项目的构建、测试、打包、部署等任务。本文将详细梳理Maven的主要生命周期、各个......
  • D15 kubernetes 初始化容器(initContainers)
    初始化容器(initContainers)是Pod中一种特殊类型的容器,专用于在主容器启动之前执行一些初始化任务和操作,以满足主容器所需的环境。 初始化容器在整个pod的生命周期内仅运行一次,并且在主容器启动之前完成它们的任务,既初始化容器一旦任务完成,就必须退出。初始化容器有以下应用场......
  • Kubernetes学习指南:保姆级实操手册06——部署kubernetes集群
    Kubernetes学习指南:保姆级实操手册06——部署kubernetes集群1、配置YUM源###在所有Master节点执行#配置yum源cat>/etc/yum.repos.d/kubernetes.repo<<EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x8......
  • 最新版Kubernetes部署教程v1.31.0
    最新版Kubernetes高可用部署教程v1.31.0系统:Almalinux9架构:192.168.100.10control-plane-endpoint.k8s.localcontrol-plane-endpoint#负载均衡服务器,配置负载均衡后修改ip后续会讲解192.168.100.10masterA.k8s.localmasterA192.168.100.20masterB.k8s.localma......
  • Kubernetes学习指南:保姆级实操手册04——主机系统初始化
    四、Kubernetes学习指南:保姆级实操手册04——主机系统初始化前言:本章节主要内容是对主机操作系统的初始化操作,如发另外标注,所有的节点操作步骤一致,可以使用软件批量初始化。1.检查系统端口确保以下端口未被占用:运行后未有任务显示,表示端口未被占用。[root@k8s-master01~]#ss-......
  • Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡
    五、Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡简介:Keepalived提供VRRP实现,并允许您配置Linux机器使负载均衡,预防单点故障。HAProxy提供可靠、高性能的负载均衡,能与Keepalived完美配合1、配置Keepalive官方文档提供了两种运行方式(此案例使用选项1):选项1:在......
  • Kubernetes从零到精通(03-资源对象)
    资源对象的种类今天我们开始研究Kubernetes中的资源对象,资源对象是Kubernetes这个软件定义的抽象逻辑概念,这些资源对象及其对应的属性(如资源对象之间的对应关系),都会保存到ectd数据库中并通过Kubernetes各控制组件实时更新,下面我们先看一下资源对象的分类和用途,然后再根据一个......
  • kubernetes初始化集群时报错
    报错:kubernetes初始化端口占用及文件存在(本人是之前初始化过一次)[root@master~]#kubeadminit--apiserver-advertise-address=192.168.20.200--image-repository=registry.aliyuncs.com/google_containers--kubernetes-version=v1.28.0--pod-network-cidr=10.244.0.0/16--......
  • 09--kubernetes持久化存储和StatefulSet控制器
    前言:本章是k8s持久化存储的详细笔记,由持久化引申出来的statefulset控制器和无头svc都会在本章有详细记录。1、K8s持久化存储PV和PVC在前面文章已经使用卷挂载的方式将pod文件持久化保存在宿主机中,但实际工作中pod往往会以多副本形式存在,此时需要每一个宿主机上都有对应的挂载......
  • D13 kubernetes 容器资源配额
    1、资源请求与资源限制 默认情况下,容器可以无限制的使用节点上所有的资源(如内存、cpu)。 假设在一个节点上运行多个pod,其中一个pod的访问量突然增加,该pod将不断请求节点资源。最终该pod占用大量资源,导致其他的资源缺乏足够的资源可用,从而引发访问速度非常慢,甚至无法正常提供服务......