k8s(二):Pod

news/2024/7/24 8:36:56 标签: kubernetes, 容器, 云原生

Pod

pod 是K8s中最小的可部署单元,用于容纳一个或多个容器。Pod为容器提供了一个共享的环境,包括网络命名空间、存储卷和IP地址。

pod的阶段(phase)

  • Pending: Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。

  • Running: Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。

  • Succeeded: Pod 中的所有容器都已成功终止,并且不会再重启。

  • Failed: Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。

  • Unknown: 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。

Pod 生命周期详细解析:

1. 创建与调度阶段:
  • Pod 创建: 可通过定义 Pod 的 YAML 创建 Pod 对象。

    apiVersion: v1
    kind: Pod
    metadata:
      name: example-pod
    spec:
      containers:
        - name: container-1
          image: nginx
    
    kubectl apply -f pod-definition.yaml
    
  • 调度器考虑以下因素:

    • 节点资源: 调度器检查节点的资源利用率,确保节点上有足够的 CPU、内存等资源来容纳 Pod。
    • 节点亲和性和反亲和性: 用户可以通过配置亲和性和反亲和性规则,影响 Pod 被调度到哪个节点。
    • Pod 亲和性和反亲和性: Pod 本身也可以定义与节点的亲和性和反亲和性规则。
    • Pod 优先级: Pod 的优先级和调度器的优先级策略也会影响调度决策。
    • 调度约束: 用户可以通过 PodSpec 中的 NodeSelector 字段设置调度约束,将 Pod 调度到具有特定标签的节点。
  • 节点选择: 调度器选择一个满足调度约束和条件的节点,将 Pod 分配到该节点上。如果找不到合适的节点,Pod 将保持在未调度状态。

  • Pod 被接受: 选定的节点上的 Kubelet 接受 Pod,并开始初始化过程。

  • 卷挂载: 一旦 Pod 被接受,Kubelet 开始挂载 Pod 所需的卷,以满足容器的存储需求。

2. 运行:
  1. 存在 Init 容器 如果 Pod 的配置中定义了 Init 容器,kubelet 将按照顺序执行这些 Init 容器。每个 Init 容器负责执行一些初始化任务,例如加载配置、准备数据等。这些任务在主容器启动之前完成,确保主容器运行时具备所需的环境。
  2. Initialized 状态设置: 一旦所有 Init 容器成功完成,kubelet 将设置 Pod 的 Initialized 状态为 True。这表示 Pod 已经完成了初始化阶段,并且已经准备好开始运行主容器

探针配置:

在 Pod 中定义探针是为了监控容器的健康状况。在上述提供的 YAML 示例中,定义了一个 readinessProbe,该探针使用 HTTP GET 请求检查容器/health 路径是否可达。以下是该探针的配置细节:

readinessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10
  • httpGet 配置: 使用 HTTP GET 请求进行健康检查,检查路径为 /health,端口为 8080。
  • initialDelaySeconds 探针将在容器启动后等待 5 秒钟再执行第一次检查。
  • periodSeconds 探针将每隔 10 秒执行一次检查。

PodReadyToStartContainersCondition:

如果启用了 PodReadyToStartContainersCondition 特性门控,Kubelet 会通过 Pod 的 status.conditions 字段中的 PodReadyToStartContainers 状态来报告 Pod 是否达到了初始化里程碑。这个条件反映了 Pod 是否具备了运行容器的必要条件,例如 Init 容器的成功完成、网络的正确配置等。 PodReadyToStartContainersCondition 的设置为 True 表示 Pod 已经准备好开始运行容器

3. 终止阶段:
  • 体面终止过程: Pod 在终止时尝试以优雅的方式关闭容器,可以配置 terminationGracePeriodSeconds

    terminationGracePeriodSeconds: 30
    
  • Pod 的垃圾收集: PodGC 控制器监视已终止的 Pod,当数量超过阈值时,删除已终止的 Pod 防止资源泄露。

  • 强制终止: 在需要立即删除 Pod 时,可以使用 kubectl delete 命令并设置宽限期为 0。

    kubectl delete pod example-pod --grace-period=0 --force
    

k8中的三种不同类型的探针

在 Kubernetes 中,探针(Probes)用于定期检查容器的健康状态,以确保容器能够正常运行。主要有三种类型的探针:livenessProbereadinessProbestartupProbe

1. livenessProbe 存活探针:

  • 目的: 指示容器是否仍在运行。

  • 配置方式:

    livenessProbe:
      exec:
        command:
          - cat
          - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 10
    
    • exec:使用指定的命令检查容器是否存活。如果命令成功执行(返回码为0),则认为容器存活。
    • initialDelaySeconds容器启动后等待5秒再执行第一次检查。
    • periodSeconds:每隔10秒执行一次检查。

2. readinessProbe 就绪探针:

  • 目的: 指示容器是否准备好接收流量。

  • 配置方式:

    readinessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    
    • httpGet:对容器的指定路径和端口执行 HTTP GET 请求,如果返回码在200到399之间,认为容器准备好接收流量。
    • initialDelaySeconds容器启动后等待5秒再执行第一次检查。
    • periodSeconds:每隔10秒执行一次检查。

3. startupProbe 启动探针:

  • 目的: 指示容器中的应用是否已经启动。

  • 配置方式:

    startupProbe:
      exec:
        command:
          - check-app-started.sh
      initialDelaySeconds: 10
      periodSeconds: 5
    
    • exec:使用指定的命令检查应用是否已经启动。如果命令成功执行,认为应用已经启动。
    • initialDelaySeconds容器启动后等待10秒再执行第一次检查。
    • periodSeconds:每隔5秒执行一次检查。

http://www.niftyadmin.cn/n/5233869.html

相关文章

使用gcloud SDK 管理和部署 Cloud run service

查看cloud run 上的service 列表: gcloud run services list > gcloud run services listSERVICE REGION URL LAST DEPLOYED BY LAST DEPL…

将不同时间点的登录状态记录转化为不同时间段的相同登录状态SQL求解

题目 有不同时间点的登录状态记录表state_log如下 请使用sql将其转化为如下表的不同时间段的相同登录状态记录 思路分析: 此类问题需要用到lag或lead函数取上下行对应的数据,然后对前后结果做比较打标签(0或1),再…

手写VUE后台管理系统7 - 整合Less样式

整合LESS 安装使用 Less(Leaner Style Sheets),是一门向后兼容的 CSS 扩展语言。 Less 官网:https://less.bootcss.com/ 安装 yarn add less安装完成就可以直接使用了 使用 以文件形式定义全局样式 在 assets 目录下创建 less …

rust从0开始写项目-04-多样化错误处理

一个优秀的项目,错误处理的优雅性是至关重要的,而rust,anyhow creat是绕不过去的一个,今天我们来研究下,怎么使用它,帮助我们写出更优雅的代码 关注 vx golang技术实验室,获取更多golang、rust好…

JS--异步的日常用法

目录 JS 异步编程并发(concurrency)和并行(parallelism)区别回调函数(Callback)GeneratorPromiseasync 及 await常用定时器函数 JS 异步编程 并发(concurrency)和并行(p…

认知觉醒(二)

认知觉醒(二) 内观自己,摆脱焦虑 第一章 大脑——一切问题的起源 第一节 大脑:重新认识你自己 我猜很多人并不真正了解自己,甚至从未了解过,所以才会对自身的各种问题困惑不已。这里我说的“自己”,特指自己的大…

西南科技大学模拟电子技术实验三(BJT单管共射放大电路测试)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 二、画出并填写实验指导书上…

持续集成交付CICD:CentOS 7 安装 Sonarqube9.6

目录 一、实验 1.CentOS 7 安装 Sonarqube9.6 二、问题 1.安装postgresql13服务端报错 2.postgresql13创建用户报错 一、实验 1.CentOS 7 安装 Sonarqube9.6 (1)下载软件及依赖包 ①Sonarqube9.6下载地址 https://binaries.sonarsource.com/Dis…