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

文章目录

探针的生命周期

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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:1.0.0
        ports:
        - containerPort: 8080
        lifecycle:
          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 进程退出。
相关推荐
LBL12203 分钟前
内网容器部署FTP日志监控服务
运维·服务器·容器
阿里云云原生24 分钟前
云效智能评审:让团队规则持续生效
云原生
阿里云云原生1 小时前
智能聚类:从海量 Trace 中理解 Agent 的行为和表现
云原生·agent
阿里云云原生1 小时前
云栖丨AI 应用进入生产,开始拼「实时数据智能」
云原生
溜达的大象1 小时前
极空间部署Traggo时间追踪工具:Docker安装、标签管理与cpolar远程访问
运维·docker·容器
脏脏a2 小时前
极空间部署 Dashlet:Docker 搭建私人导航仪表盘,再配置固定公网访问
运维·docker·容器
运维开发王义杰2 小时前
跳出网络与文件系统:Linux CPU 与内存调优的“防假死”实战
云原生
User_芊芊君子2 小时前
Prometheus接入Pushgateway实战:二进制与Docker部署、指标推送及远程上报
docker·容器·prometheus
江湖有缘4 小时前
3款开源日记工具整理合集,可Docker一键部署!
docker·容器·开源
Thneonl16 小时前
Flink Operator 的隐藏陷阱:容器名不是你以为的那个
安全·kubernetes