Kubernetes核心技术Pod详解、实例

云计算 云原生
Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的 Pause 容器。Pause 容器对应的镜 像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个 Pod 还包含一个或多个紧密相关的用户业务容器。

1、概述

Pod 是 k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最 小资源对象模型,也是在 k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支 撑或者扩展 Pod 对象功能的,比如控制器对象是用来管控 Pod 对象的,Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的,PersistentVolume 资源对象是用来为 Pod 提供存储等等,k8s 不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成。

Pod 是 Kubernetes 的最重要概念,每一个 Pod 都有一个特殊的被称为”根容器“的 Pause 容器。Pause 容器对应的镜 像属于 Kubernetes 平台的一部分,除了 Pause 容器,每个 Pod 还包含一个或多个紧密相关的用户业务容器。

2、特性

(1)资源共享

一个 Pod 里的多个容器可以共享存储和网络,可以看作一个逻辑的主机。共享的如 namespace,cgroups 或者其他的隔离资源。

多个容器共享同一 network namespace,由此在一个 Pod 里的多个容器共享 Pod 的 IP 和 端口 namespace,所以一个 Pod 内的多个容器之间可以通过 localhost 来进行通信,所需要 注意的是不同容器要注意不要有端口冲突即可。不同的 Pod 有不同的 IP,不同 Pod 内的多 个容器之前通信,不可以使用 IPC(如果没有特殊指定的话)通信,通常情况下使用 Pod 的 IP 进行通信。

一个 Pod 里的多个容器可以共享存储卷,这个存储卷会被定义为 Pod 的一部分,并且可 以挂载到该 Pod 里的所有容器的文件系统上。

(2)生命周期短暂

Pod 属于生命周期比较短暂的组件,比如,当 Pod 所在节点发生故障,那么该节点上的 Pod 会被调度到其他节点,但需要注意的是,被重新调度的 Pod 是一个全新的 Pod,跟之前的 Pod 没有半毛钱关系。

(3)平坦的网络

K8s 集群中的所有 Pod 都在同一个共享网络地址空间中,也就是说每个 Pod 都可以通过其 他 Pod 的 IP 地址来实现访问。

3、分类

(1)普通 Pod

普通 Pod 一旦被创建,就会被放入到 etcd 中存储,随后会被 Kubernetes Master 调度到某 个具体的 Node 上并进行绑定,随后该 Pod 对应的 Node 上的 kubelet 进程实例化成一组相 关的 Docker 容器并启动起来。在默认情 况下,当 Pod 里某个容器停止时,Kubernetes 会 自动检测到这个问题并且重新启动这个 Pod 里某所有容器, 如果 Pod 所在的 Node 宕机, 则会将这个 Node 上的所有 Pod 重新调度到其它节点上。

(2)静态 Pod

静态 Pod 是由 kubelet 进行管理的仅存在于特定 Node 上的 Pod,它们不能通过 API Server 进行管理,无法与 ReplicationController、Deployment 或 DaemonSet 进行关联,并且 kubelet 也无法对它们进行健康检查。

4、Pod存在的意义

一个Pod可以存入多个容器,咱们就拿docker来说,docker是建议一个容器只是只是运行一个应用程序,pod是以多进程设计的,可以将依赖度比较高的两个容器放入同一个pod(例如一个微服务项目调用了mysql数据库,微服务和mysql数据库这两个容器放入同一个pod),因为pod内网络共享,这样微服务连接mysql就像连接本地数据一样,减少网络IO等提高调用效率。

5、生命周期和重启策略

(1)Pod 的状态

状态

描述

Pending

Api-server已创建改pod,但是pod中一个或者多个容器的镜像还未创建,包括镜像下载过程

Running

pod内所有容器已创建,且至少一个容器处于运行状态、正在启动或者重启状态

Completed

pod内所有容器均成功执行退出,且不会重启

Failed

pod内所有容器均已退出,但至少一个容器退出失败

Unknown

由于某种原因无法获取pod状态,例如网络不通畅

(2)Pod 重启策略

Pod 的重启策略包括 Always、OnFailure 和 Never,默认值是 Always

策略

描述

Always

当容器失效时,由kubelet自动重启该容器

OnFailure

当容器终止运行且运行代码不为0,,由kubelet自动重启该容器

Never

不论容器运行状态如何,kubelet都不会重启该容器

(3)常见状态转换

Pod包含的容器数

Pod当前状态

发生事件

Pod结果状态






RestartPolicy=Always

OnFailure

Never

1个容器

Running

容器成功退出

Running

Succeeded

Succeeded

1个容器

Running

容器失败退出

Running

Running

Failure

2个容器

Running

1个容器失败退出

Running

Running

Running

2个容器

Running

容器被OOM杀掉

Running

Running

Failure

责任编辑:姜华 来源: 今日头条
相关推荐

2016-12-12 09:01:47

Amazon Go核心技术

2022-05-07 14:31:46

物联网

2017-03-08 10:06:11

Java技术点注解

2009-06-26 16:01:39

EJB组织开发EJB容器EJB

2016-11-15 14:33:05

Flink大数据

2017-03-24 17:17:35

限流节流系统

2009-06-15 17:54:50

Java核心技术

2022-05-09 08:21:29

Spring微服务Sentinel

2011-11-23 15:53:54

Java核心技术框架

2019-05-15 08:26:44

工业物联网MQTT物联网

2016-11-22 17:05:54

Apache Flin大数据Flink

2019-03-05 14:57:21

大数据Hadoop框架

2021-07-28 07:53:20

C#.NET设计

2022-05-16 08:22:11

网关过滤器路由

2018-05-16 11:05:49

ApacheFlink数据流

2019-05-15 08:40:34

工业物联网MQTT物联网

2022-10-11 08:37:43

Servlet配置版本

2017-05-08 13:37:32

IaaS核心虚拟化

2009-11-09 14:49:16

宽带路由器

2009-02-26 10:11:00

宽带路由器网络共享
点赞
收藏

51CTO技术栈公众号