Kubernetes容器的生命周期

简介: Kubernetes容器的生命周期

容器的生命周期

Kubernetes 会跟踪 Pod 中每个容器的状态,就像它跟踪 Pod 总体上的阶段一样。你可以使用容器生命周期回调来在容器生命周期中的特定时间点触发事件。

一旦调度器将 Pod 分派给某个节点,kubelet 就通过容器运行时开始为 Pod 创建容器。容器的状态有三种:Waiting(等待)、Running(运行中)和 Terminated(已终止)。

每种状态都有特定的含义:

Waiting(等待)

处于 Waiting 状态的容器仍在运行它完成启动所需要的操作:例如,从某个容器镜像仓库拉取容器镜像,或者向容器应用 Secret 数据等。当你使用 kubectl 来查询包含 Waiting 状态的容器的 Pod 时,你也会看到一个 Reason 字段,其中给出了容器处于等待状态的原因。

Running(运行中)

Running 状态表明容器正在执行状态并且没有问题发生。如果配置了 postStart 回调,那么该回调已经执行且已完成。如果你使用 kubectl 来查询包含 Running 状态的容器的 Pod 时,你也会看到关于容器进入 Running 状态的信息。

Terminated(已终止)

处于 Terminated 状态的容器由于正常结束或者因为某些原因失败。如果你使用 kubectl 来查询包含 Terminated 状态的容器的 Pod 时,你会看到容器进入此状态的原因、退出代码以及容器执行期间的起止时间。

如果容器配置了 preStop 回调,则该回调会在容器进入 Terminated 状态之前执行。

要检查 Pod 中容器的状态,你可以使用 kubectl describe pod 。 其输出中包含 Pod 中每个容器的状态。

容器生命周期回调/事件/钩子

类似于许多具有生命周期回调组件的编程语言框架,例如 Angular、Vue、Kubernetes 为容器提供了生命周期回调。回调使容器能够了解其管理生命周期中的事件,并在执行相应的生命周期回调时运行在处理程序中实现的代码。

有两个回调暴露给容器:

  • PostStart:这个回调在容器被创建之后立即被执行。但是,不能保证回调会在容器入口点(ENTRYPOINT)之前执行。没有参数传递给处理程序。
  • PreStop:在容器因 API 请求或者管理事件(诸如存活态探针、启动探针失败、资源抢占、资源竞争等)而被终止之前,此回调会被调用。如果容器已经处于已终止或者已完成状态,则对 preStop 回调的调用将失败。在用来停止容器的 TERM 信号被发出之前,回调必须执行结束。Pod 的终止宽限周期在 PreStop 回调被执行之前即开始计数,所以无论回调函数的执行结果如何,容器最终都会在 Pod 的终止宽限期内被终止。没有参数会被传递给处理程序。

示例 Pod

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle
spec:
  containers:
    - name: nginx
      image: nginx:1.19
      lifecycle:
        postStart: # 容器创建过程中执行
          exec:
            command: ["/bin/sh","-c","echo postStart >> /start.txt"]
        preStop:  # 容器终止之前执行
          exec:
            command: ["/bin/sh","-c","echo postStop >> /stop.txt && sleep 5"]
      ports:
    - containerPort: 80


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
存储 Kubernetes 负载均衡
【容器编排】初识 Kubernetes
【容器编排】初识 Kubernetes
71 0
|
8月前
|
Kubernetes 监控 应用服务中间件
Kubernetes(k8s)容器编排控制器使用2
Kubernetes(k8s)容器编排控制器使用2
65 0
|
8月前
|
Kubernetes 监控 应用服务中间件
Kubernetes(k8s)容器编排控制器使用3
Kubernetes(k8s)容器编排控制器使用3
56 0
|
8月前
|
Kubernetes 监控 应用服务中间件
Kubernetes(k8s)容器编排控制器使用1
Kubernetes(k8s)容器编排控制器使用1
83 0
|
18天前
|
Kubernetes 调度 容器
Kubernetes容器资源限制
Kubernetes容器资源限制
21 0
|
8月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes(k8s)容器编排Pod介绍和使用
Kubernetes(k8s)容器编排Pod介绍和使用
123 0
|
8月前
|
Kubernetes 应用服务中间件 nginx
|
5月前
|
Kubernetes 应用服务中间件 Apache
理解Kubernetes中的Pod — 容器协同工作
当你在Kubernetes中部署一个应用程序时,你通常会使用Pod作为最小的可部署单元。Pod是一个可以包含一个或多个容器的组。这些容器在Pod内部共享网络和存储,并可以通过localhost直接通信。这种设计使得它们能够协同工作,共享数据,并能够一起被调度和管理。
55 1
|
6月前
|
运维 Kubernetes Cloud Native
Kubernetes(K8s):容器编排的未来是什么?
Kubernetes(通常简称为K8s)已经成为当今云原生应用程序开发和部署的标准。它是一个强大的开源容器编排平台,能够自动化应用程序的部署、扩展和管理。本文将深入探讨Kubernetes的现状和未来趋势,为什么它正在成为云原生开发的核心,以及如何更好地利用它。
144 0
|
8月前
|
存储 Kubernetes API
Kubernetes(k8s)容器编排组件介绍
Kubernetes(k8s)容器编排组件介绍
99 0