开发者社区> 颜淡慕潇> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【K8S系列】Pod入门

简介: 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”容器需要从远程获取资源来更新这些文件,如下图所示:

    imageimage.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。


      版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

      相关文章
      Kubernetes从入门到精通
      Kubernetes从入门到精通
      205 0
      云原生|kubernetes|kubernetes的etcd集群备份策略
      云原生|kubernetes|kubernetes的etcd集群备份策略
      27 0
      云原生|kubernetes|集群网络优化之启用ipvs(一)
      云原生|kubernetes|集群网络优化之启用ipvs
      16 0
      云原生|kubernetes|集群网络优化之启用ipvs(二)
      云原生|kubernetes|集群网络优化之启用ipvs
      34 0
      Kubernetes高可用集群二进制部署(Runtime Containerd-1(1)
      Kubernetes高可用集群二进制部署(Runtime Containerd-1(1)
      26 0
      Kubernetes高可用集群二进制部署(Runtime Containerd-1(2)
      Kubernetes高可用集群二进制部署(Runtime Containerd-1(2)
      25 0
      Kubernetes高可用集群二进制部署(Runtime Containerd-2(1)
      Kubernetes高可用集群二进制部署(Runtime Containerd-2(1)
      20 0
      Kubernetes 集群升级指南:从理论到实践
      集群升级是 Kubernetes 集群生命周期中最为重要的一环,也是众多使用者最为谨慎对待的操作之一。
      13266 0
      阿里云kubernetes集群自制kubeconfig
      使用kubeconfig文件来组织关于集群,用户,名称空间和身份验证机制的信息。 kubectl命令行工具使用kubeconfig文件来查找选择群集并与群集的API服务器进行通信所需的信息。默认情况下 kubectl使用的配置文件名称是在$HOME/.kube目录下 config文件,可以通过设置环境变量KUBECONFIG或者--kubeconfig指定其他的配置文件 。
      3576 0
      基于阿里云容器服务监控 Kubernetes集群GPU指标
      ### 简介 当您在阿里云容器服务中使用GPU ECS主机构建Kubernetes集群进行AI训练时,经常需要知道每个Pod使用的GPU的使用情况,比如每块显存使用情况、GPU利用率,GPU卡温度等监控信息,本文介绍如何快速在阿里云上构建基于Prometheus + Grafana的GPU监控方案。
      15748 0
      +关注
      颜淡慕潇
      欢颜如炼 悲苦如戟;浓尽必枯 淡者屡深
      文章
      问答
      文章排行榜
      最热
      最新
      相关电子书
      更多
      K8s监控神器——TSDB for Prometheus的入门与实践
      立即下载
      K8s 原生 Serverless 实践:ASK 与 Kna
      立即下载
      如何让k8s集群30s扩容3000个Pod
      立即下载