六、Kubernetes核心技术Pod详解、实例

1、概述

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

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

六、Kubernetes核心技术Pod详解、实例_第1张图片

 2、特性

2.1、资源共享

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

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

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

2.2、生命周期短暂

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

2.3、平坦的网络

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

3、分类

3.1、普通 Pod

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

3.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、生命周期和重启策略

5.1、Pod 的状态

状态 描述
Pending Api-server已创建改pod,但是pod中一个或者多个容器的镜像还未创建,包括镜像下载过程
Running   pod内所有容器已创建,且至少一个容器处于运行状态、正在启动或者重启状态
Completed pod内所有容器均成功执行退出,且不会重启
Failed pod内所有容器均已退出,但至少一个容器退出失败
Unknown 由于某种原因无法获取pod状态,例如网络不通畅

六、Kubernetes核心技术Pod详解、实例_第2张图片

5.2、Pod 重启策略

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

策略 描述
Always 当容器失效时,由kubelet自动重启该容器
OnFailure 当容器终止运行且运行代码不为0,,由kubelet自动重启该容器
Never 不论容器运行状态如何,kubelet都不会重启该容器

5.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

你可能感兴趣的:(kubernetes,kubernetes,容器)