当前位置: 首页 > news >正文

飞天使-k8s知识点18-kubernetes实操3-pod的生命周期

文章目录

      • 探针的生命周期
        • 流程图
          • prestop

探针的生命周期

在这里插入图片描述
docker
创建:在创建阶段,你需要选择一个镜像来运行你的应用。这个镜像可以是公开的,如 Docker Hub 上的镜像,也可以是你自己创建的自定义镜像。创建自己的镜像通常需要编写一个 Dockerfile,这个文件定义了创建镜像所需的所有步骤,包括基础镜像、需要安装的软件包以及需要运行的命令。

运行:运行阶段是容器生命周期中最活跃的阶段。在此阶段,容器会运行定义在 Dockerfile 中的命令。你可以通过命令行工具如 Docker CLI,或者通过编排工具如 Kubernetes 来启动容器。一旦容器开始运行,它就会持续运行,直到进程结束或者被明确停止。

暂停和恢复:在某些情况下,你可能需要暂时停止容器的运行。这可以通过 Docker CLI 的 pause 命令来完成。当你准备恢复容器的运行时,可以使用 unpause 命令。这些命令可以让你在不完全停止容器的情况下,暂时释放一些系统资源。

停止:当你不再需要运行容器时,可以使用 Docker CLI 的 stop 命令来停止它。这会结束容器中的所有进程,并释放所有使用的系统资源。在某些情况下,你可能希望容器在完成一些任务后自动停止。这可以通过在 Dockerfile 中定义的命令来实现。

删除:如果你确定不再需要一个容器,可以使用 Docker CLI 的 rm 命令来删除它。这会从你的系统中完全移除容器,并释放所有相关的资源。

k8s
Pod 调度:一旦你创建了一个 Pod,Kubernetes 的调度器会找到一个合适的节点来运行这个 Pod。这个阶段,Pod 的状态为 Pending。

Pod 初始化:在 Pod 被调度到一个节点后,kubelet 会开始创建和启动 Pod 中的每个容器。对于每个容器,kubelet 会拉取所需的镜像(如果本地没有的话),然后运行这个镜像创建容器,最后执行用户指定的命令。如果 Pod 配置了 Init 容器,那么这些容器会在应用容器之前按顺序启动。

容器运行:一旦所有的容器都启动了,Pod 就进入 Running 状态。在运行过程中,kubelet 会定期执行用户配置的探针(如果有的话)来监控容器的健康状态。如果某个容器的探针检查失败,kubelet 可能会根据探针的配置来重启这个容器或者整个 Pod。

容器终止:当 Pod 要被删除时,或者 Pod 中的某个容器完成了它的任务并退出时,这个容器就进入终止阶段。在这个阶段,kubelet 会首先发送 SIGTERM 信号给容器中的进程,然后等待一段时间,最后如果进程还在运行,kubelet 就会发送 SIGKILL 信号强制终止这个进程。

Pod 删除:当所有的容器都终止后,Pod 就会被 kubelet 删除,并从 API server 中删除。删除后,这个 Pod 的所有资源都会被清理掉,包括日志、挂载的卷等。

流程图

在这里插入图片描述

prestop
我们添加 lifecycle 字段来添加一些生命周期钩子:apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-appimage: my-app:1.0.0ports:- containerPort: 8080lifecycle:postStart:exec:command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]preStop:exec:command: ["/bin/sh", "-c", "nginx -s quit; while killall -0 nginx; do sleep 1; done"]
在这个配置中,我们添加了两个生命周期钩子。postStart 钩子就像是一个欢迎仪式,当容器创建后,它会打印一条欢迎消息。preStop 钩子则像是一个礼貌的道别,它会优雅地关闭 nginx 服务,然后等待所有的 nginx 进程退出。

在这里插入图片描述

相关文章:

  • 普中51单片机学习(八)
  • UE4 C++联网RPC教程笔记(一)(第1~4集)
  • 生成式 AI - Diffusion 模型的数学原理(4)
  • CVE-2022-24652 漏洞复现
  • 嵌入式面试:瑞芯微
  • 【ArcGIS微课1000例】0103:导出点、线、面要素的折点坐标值
  • Code Composer Studio (CCS) - Breakpoint (断点)
  • 【数据结构与算法】图的搜索——广度优先遍历、最小生成树
  • Java基础知识学习:深入理解Java中的类与对象,Java重要知识点概念性解释,结合实例讲解请看下一篇博文
  • Ansible file文件模块 设置文件的属性,比如创建文件、创建链接文件、删除文件
  • 《白话C++》第10章 STL和boost,Page88 std::shared_ptr常用功能02
  • 数据分析 — 动画图 pyecharts
  • 服务端和客户端以及前后端相关概念区分
  • GPT-3 训练自己的数据教程详解
  • Java学习心得感悟
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Angularjs之国际化
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript服务器推送技术之 WebSocket
  • JavaScript新鲜事·第5期
  • JavaScript中的对象个人分享
  • Linux gpio口使用方法
  • MQ框架的比较
  • node和express搭建代理服务器(源码)
  • Odoo domain写法及运用
  • PHP面试之三:MySQL数据库
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 基于Android乐音识别(2)
  • 检测对象或数组
  • 区块链共识机制优缺点对比都是什么
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 一道闭包题引发的思考
  • 原生 js 实现移动端 Touch 滑动反弹
  • Spring Batch JSON 支持
  • 第二十章:异步和文件I/O.(二十三)
  • ​Linux·i2c驱动架构​
  • # 数据结构
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (20050108)又读《平凡的世界》
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (二)Linux——Linux常用指令
  • (二)windows配置JDK环境
  • (简单) HDU 2612 Find a way,BFS。
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (接口自动化)Python3操作MySQL数据库
  • (十) 初识 Docker file
  • (转)iOS字体
  • (转)scrum常见工具列表
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • **CI中自动类加载的用法总结
  • .net 验证控件和javaScript的冲突问题
  • .net生成的类,跨工程调用显示注释
  • .net中调用windows performance记录性能信息