【K8S系列】Pod入门

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。Docker是Kubernetes Pod中最常见的runtime ,Pods也支持其他容器runtimes。...

 什么是Pod

Pod是Kubernetes创建或部署的最小/最简单基本单位,一个Pod代表集群正在运行的一个进程

一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。

Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。

Docker是Kubernetes Pod中最常见的runtime ,Pods也支持其他容器runtimes。

Kubernetes中的Pod使用可分两种主要方式:

    • Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。
    • Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源,这些容器可以形成一个单一的内部service单位 -(类似docker swam?) 一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。
    • 每个Pod都是运行应用的单个实例,如果需要水平扩展应用(例如,运行多个实例),则应该使用多个Pods,每个实例一个Pod。在Kubernetes中,这样通常称为Replication。Replication的Pod通常由Controller创建和管理。更多信息,请参考Pods和控制器

    Pods如何管理多个容器

    Pods的设计可用于支持多进程协同工作(作为容器),形成一个cohesive的Service单位。Pod中的容器在集群中Node上被自动分配,容器之间可以共享资源、网络和相互依赖关系,并同时被调度使用。

    请注意,在单个Pod中共同管理多个容器是一个相对高级的用法,应该只有在容器紧密耦合的特殊实例中使用此模式。

    Pods提供两种共享资源:网络和存储

    例如,有一个容器被用作WEB服务器,用于共享volume,以及一个单独“sidecar”容器需要从远程获取资源来更新这些文件,如下图所示:

    image.gif编辑

    网络

    每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。当Pod中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。

    存储

    Pod可以指定一组共享存储volumes。Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。volumes 还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。有关Kubernetes如何在Pod中实现共享存储的更多信息,可以参考Volumes。

    如何使用Pod

    很少会直接在kubernetes中创建单个Pod。因为Pod的生命周期是短暂的,用后即焚的实体。(什么意思?)

    当Pod被创建后(不论是由你直接创建还是被其他Controller),都会被Kuberentes调度到集群的Node上。直到Pod的进程终止、被删掉、因为缺少资源而被驱逐、或者Node故障之前这个Pod都会一直保持在那个Node上。

    注意:重启Pod中的容器跟重启Pod不是一回事。Pod只提供容器的运行环境并保持容器的运行状态,重启容器不会造成Pod重启。

    Pod不会自愈。如果Pod运行的Node故障,或者是调度器本身故障,这个Pod就会被删除。同样的,如果Pod所在Node缺少资源或者Pod处于维护状态,Pod也会被驱逐。

    Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。虽然可以直接使用Pod,但是在Kubernetes中通常是使用Controller来管理Pod的

    Pod和Controller

    Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。例如,如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上

    包含一个或者多个Pod的Controller示例:

      通常,Controller会用你提供的Pod Template来创建相应的Pod。


      相关实践学习
      通过Ingress进行灰度发布
      本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
      容器应用与集群管理
      欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
      相关文章
      |
      1天前
      |
      Kubernetes 固态存储 调度
      在K8S中,如何在指定节点上部署Pod呢?
      在K8S中,如何在指定节点上部署Pod呢?
      |
      1天前
      |
      存储 缓存 Kubernetes
      在K8S中,业务Pod数据如何存储?
      在K8S中,业务Pod数据如何存储?
      |
      1天前
      |
      Prometheus Kubernetes 监控
      在K8S中,Pod请求另一个pod偶尔出现超时或延迟,如何排查?
      在K8S中,Pod请求另一个pod偶尔出现超时或延迟,如何排查?
      |
      1天前
      |
      Kubernetes 监控 测试技术
      在K8S中,如何查看pod状态的详情? 事件显示cpu不足如何处理?
      在K8S中,如何查看pod状态的详情? 事件显示cpu不足如何处理?
      |
      1天前
      |
      Kubernetes Perl 容器
      在K8S中,如果pod处于不健康状态怎么排查?
      在K8S中,如果pod处于不健康状态怎么排查?
      |
      1天前
      |
      存储 缓存 Kubernetes
      在K8S中,Pod优雅终止过程是什么?
      在K8S中,Pod优雅终止过程是什么?
      |
      1天前
      |
      Prometheus Kubernetes 监控
      在K8S中,当Pod业务量比较大时候,如何实现水平伸缩和扩容?
      在K8S中,当Pod业务量比较大时候,如何实现水平伸缩和扩容?
      |
      1天前
      |
      Kubernetes 网络安全 Docker
      在k8S中,Worker节点加入集群的过程是什么?
      在k8S中,Worker节点加入集群的过程是什么?
      |
      1天前
      |
      Kubernetes 安全 数据安全/隐私保护
      在k8S中,如何保证集群的安全性?
      在k8S中,如何保证集群的安全性?
      |
      1天前
      |
      存储 Kubernetes 监控
      在K8S中,worke节点如何加入K8S高可用集群?
      在K8S中,worke节点如何加入K8S高可用集群?

      推荐镜像

      更多