<返回更多

Kubernetes核心技术Pod详解、实例

2023-03-18  今日头条  全栈行动派
加入收藏

1、概述

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

Pod 是 Kube.NETes 的最重要概念,每一个 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

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>