Kubernetes 资源清单与Pod生命周期
发布日期:2021-05-17 08:32:07 浏览次数:31 分类:精选文章

本文共 2475 字,大约阅读时间需要 8 分钟。

Kubernetes 资源清单介绍

Kubernetes 中所有的内容都抽象为资源,资源实例化之后,叫做对象。资源清单是一种通过 YAML 格式文件定义 Kubernetes 资源的文件。

Kubernetes 中存在哪些资源

名称空间级别(仅在当前Namespace空间下生效):

  • 工作负载型资源 (workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob(ReplicationController在 v1.11 版本被废弃)
  • 服务发现及负载均衡型资源 (ServiceDiscoveryLoadBalance):Service、Ingress、…
  • 配置与存储型资源:Volume(存储卷)、CSI(容器存储接口,可扩展各种各样第三方存储卷)
  • 特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)

集群级别(不管在哪个Namespace定义都可以看见):

  • 集群级资源:Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding

元数据型(提供一个指标):

  • 元数据型资源:HPA(水平扩展配置)、PodTemplate、LimitRange

资源清单的含义

资源清单是一种通过 YAML 格式文件定义 Kubernetes 资源的文件,通常用于创建符合预期期望的 Pod。

常用字段解释

详细信息可通过如下命令查看:

kubectl explain pod

必须存在的属性

主要对象

额外的参数项

Pod 生命周期

Pod 启动和停止的具体流程如下:

  • kubectl 向 Kubernetes API 发送指令
  • Kubernetes API 会调用到 kubelet(调度过程是通过 etcd 完成的)
  • kubelet 会对应操作 CR
  • CR 会完成容器环境的初始化,初始化过程中会启动一个 pause 的基础容器,这是 Google 为我们做的一个非常经典容器,他负责我们的网络和存储卷的共享
  • 接下来 CR 会进行一个或多个 init C(容器)的初始化(这取决于你的 Pod 中有多少个容器),当然 init C 也可以没有
  • 如果 Pod 的 init 容器失败, Kubernetes 会不断重启该 Pod(重启 Pod 所有 init 容器都会重新执行),直到 init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 为 Never,它不会重新启动
  • 如果 Pod 的 restartPolicy 为 Always,那么失败的容器会以指数退避的方式重启
  • 主容器在 start 和 stop 的过程中会有 readiness 和 liveness 的参与
  • readinessProbe 用于探测容器是否准备好服务请求
  • livenessProbe 用于指示容器是否正在运行
  • Init 容器的作用

    • Init 容器可以包含并运行实用工具,而不推荐在应用程序容器镜像中包含这些实用工具
    • Init 容器可以包含使用工具和定制化代码来安装
    • 应用程序镜像可以分离出创建和部署的角色
    • Init 容器可以访问 Secret,而应用程序容器不能
    • Init 容器可以作为一种简单的阻塞或延迟应用容器启动的方法

    特殊说明

    • 在 Pod 启动过程中,init 容器会在网络和数据卷初始化之后启动
    • 每个 init 容器必须在下一个容器启动之前成功完成
    • 如果 Pod 的 restartPolicy 为 Never,它不会重新启动
    • 在所有的 init 容器没有成功之前,Pod 将不会变成 Ready 状态
    • 如果 Pod 重启,所有的 init 容器必须重新执行
    • 修改 Init 容器的 image 字段会导致 Pod 重启
    • Init 容器的 name 必须唯一,与任何其他容器共享同一个名称会导致错误

    容器探针

    探针是由 kubelet 对容器执行的定期诊断。探针有三种类型:

  • ExecAction:在容器内执行指定命令
  • TCPSocketAction:对指定端口执行 TCP 检查
  • HTTPGetAction:对指定端口和路径执行 HTTP 请求
  • 每次探测都将获得以下三种结果之一:

  • 成功:容器通过了诊断
  • 失败:容器未通过诊断
  • 未知:诊断失败但不会采取任何行动
  • 探测方式

    • livenessProbe:指示容器是否正在运行
    • readinessProbe:指示容器是否准备好服务请求

    Podhook

    Podhook 是 Kubernetes 管理的,用于在容器的生命周期中执行 hook。hook 有两种类型:

  • exec:执行一段命令
  • HTTP:发送 HTTP 请求
  • 重启策略

    PodSpec 中有一个 restartPolicy 字段,可能的值为 Always、OnFailure 和 Never。默认为 Always。restartPolicy 适用于 Pod 中的所有容器。失败的容器会被 kubelet 以指数退避的方式重启。

    Pod 相位

    Pod 的 status 字段是一个 PodStatus 对象,PodStatus 中有一个 phase 字段。Pod 相位(phase)是 Pod 在其生命周期中的简单宏观概述。Pod 相位的数量和含义是严格指定的。

    Pod 相位可能存在的值:

  • 挂起(Pending):Pod 已经被 Kubernetes 系统接受,但有一个或多个容器镜像尚未创建
  • 运行中(Running):Pod 已经绑定到一个节点上,所有容器已被创建,至少有一个容器正在运行
  • 成功(Succeeded):Pod 中的所有容器都被成功终止
  • 失败(Failed):Pod 中的所有容器都已终止,至少有一个容器是因为失败终止
  • 未知(Unknown):因为某些原因无法取得 Pod 的状态
  • 上一篇:Kubernetes Init c探测
    下一篇:Jenkins配置详解----执行者数量

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年05月17日 01时02分57秒