zoukankan      html  css  js  c++  java
  • K8S系统学习-----Pod 容器组

    一、POD

    #容器组_概述

    Pod(容器组)是 Kubernetes 中最小的可部署单元。一个 Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络 IP 地址、以及一些确定容器该如何运行的选项。Pod 容器组代表了 Kubernetes 中一个独立的应用程序运行实例,该实例可能由单个容器或者几个紧耦合在一起的容器组成。

    Docker是kubernetes Pod 中使用最广泛的容器引擎,Kubernetes Pod 同时也支持其他类型的容器引擎。

    Pod中的容器可以:

    • 共享资源、依赖
    • 互相通信
    • 相互协商何时以何种方式结束运行

    提示

    将多个容器运行于同一个容器组中是一种相对高级复杂的使用方法。只有在您的容器相互之间紧密耦合是,您才应该使用这种方式。例如:您可能有一个容器是 web server,用来将共享数据卷中的文件作为网站发布出去,同时您有另一个 "sidecar" 容器从远程抓取并更新这些文件。如下图所示:

     Pod除了使用app container(工作容器)外,还会使用 init  container(初始化容器)

    Pod 为其成员容器提供了两种类型的共享资源:网络和存储

    网络 Networking

    每一个 Pod 被分配一个独立的 IP 地址。Pod 中的所有容器共享一个网络名称空间:

    • 同一个 Pod 中的所有容器 IP 地址都相同
    • 同一个 Pod 中的不同容器不能使用相同的端口,否则会导致端口冲突
    • 同一个 Pod 中的不同容器可以通过 localhost:port 进行通信
    • 同一个 Pod 中的不同容器可以通过使用常规的进程间通信手段 如:SystemV semaphores POSIX共享内存

    TIP:

    不同 Pod 上的两个容器如果要通信,必须使用对方 Pod 的 IP 地址 + 对方容器的端口号 进行网络通信

    存储 Storage

    Pod 中可以定义一组共享的数据卷。Pod 中所有的容器都可以访问这些共享数据卷,以便共享数据。Pod 中数据卷的数据也可以存储持久化的数据,使得容器在重启后仍然可以访问到之前存入到数据卷中的数据

    Pod 本身并不会运行,Pod 仅仅是容器运行的一个环境

    Kubernetes 通过引入 Controller(控制器)的概念来管理 Pod 实例。在 Kubernetes 中,更为推荐的做法是使用 Controller 来管理 Pod,而不是直接创建 Pod。

    #容器组和控制器

    应该始终使用控制器来创建 Pod,而不是直接创建 Pod,控制器可以提供如下特性:

    • 水平扩展(运行 Pod 的多个副本)

    • rollout(版本更新)

    • self-healing(故障恢复)

    Kubernetes 中使用的控制器:

    Kubernetes 中,广泛使用的控制器有

    #Pod Template

    Pod Template 是关于 Pod 的定义,但是被包含在其他的 Kubernetes 对象中(例如 Deployment、StatefulSet、DaemonSet 等控制器)。控制器通过 Pod Template 信息来创建 Pod。正是由于 Pod Template 的存在,Kuboard 可以使用一个工作负载编辑器来处理不同类型的控制器。

    POD进程的终止有两种方式:

    • gracefully terminate (优雅地终止)
    • 直接 kill,此时进程没有机会执行清理动作

    当用户发起删除 Pod 的指令时,Kubernetes 需要:

    • 让用户知道 Pod 何时被删除
    • 确保删除 Pod 的指令最终能够完成

    Kubernetes 收到用户删除 Pod 的指令后:

    1. 记录强制终止前的等待时长(grace period)
    2. 向 Pod 中所有容器的主进程发送 TERM 信号
    3. 一旦等待超时,向超时的容器主进程发送 KILL 信号
    4. 删除 Pod 在 API Server 中的记录

    二、POD的容器生命周期

    #容器组_生命周期

    #Pod phase Pod phase 代表其所处生命周期的阶段。Pod phase 并不是用来代表其容器的状态,也不是一个严格的状态机。

    phase 的可能取值:

    #容器的检查

    Probe 是指 kubelet 周期性地检查容器的状况。有三种类型的 Probe:

    • ExecAction: 在容器内执行一个指定的命令。如果该命令的退出状态码为 0,则成功
    • TCPSocketAction: 探测容器的指定 TCP 端口,如果该端口处于 open 状态,则成功
    • HTTPGetAction: 探测容器指定端口/路径上的 HTTP Get 请求,如果 HTTP 响应状态码在 200 到 400(不包含400)之间,则成功

    Probe 有三种可能的结果:

    • Success: 容器通过检测
    • Failure: 容器未通过检测
    • Unknown: 检测执行失败,此时 kubelet 不做任何处理

    Kubelet 可以在两种情况下对运行中的容器执行 Probe:

    • 就绪检查 readinessProbe: 确定容器是否已经就绪并接收服务请求。如果就绪检查失败,kubernetes 将该 Pod 的 IP 地址从所有匹配的 Service 的资源池中移除掉。
    • 健康检查 livenessProbe: 确定容器是否正在运行。如果健康检查失败,kubelete 将结束该容器,并根据 restart policy(重启策略)确定是否重启该容器。

    #容器的状态

    一旦 Pod 被调度到节点上,kubelet 便开始使用容器引擎(通常是 docker)创建容器。容器有三种可能的状态:Waiting / Running / Terminated:

    • Waiting: 容器的初始状态。处于 Waiting 状态的容器,仍然有对应的操作在执行,例如:拉取镜像、应用 Secrets等。
    • Running: 容器处于正常运行的状态。容器进入 Running 状态之后,如果指定了 postStart hook,该钩子将被执行。
    • Terminated: 容器处于结束运行的状态。容器进入 Terminated 状态之前,如果指定了 preStop hook,该钩子将被执行。

    #重启策略

    Pod 或工作负载时,可以指定 restartPolicy,可选的值有:

    • Always (默认值)
    • OnFailure
    • Never
  • 相关阅读:
    关于echarts、layer.js和jqGrid的知识点
    Aspose.Cell和NPOI生成Excel文件2
    Aspose.Cell和NPOI生成Excel文件
    关于JS嵌套点击事件的问题。
    有关二维码学习小整理
    二维码
    微信扫码登录实现原理
    C#模拟Http与Https请求框架实例
    C#中调用user32.dll库的keybd_Event函数,操作键盘
    对象数组 深拷贝
  • 原文地址:https://www.cnblogs.com/yyuuee/p/15181100.html
Copyright © 2011-2022 走看看