Kubernetes 家族容器小管家 Pod 在线答疑?
Kubernetes 家族容器小管家 Pod 在线答疑❓
不知道学习 k8s 的小伙伴们有没有跟我一样的疑问?
k8s 为什么不是直接运行容器,而是让 Pod 介入?
Pod 又是什么?为什么在应用容器化如此普遍的情况下 k8s 要推出 Pod 概念?
小葵花 Pod 课堂开课啦
本文主要理解的一个核心点,什么是 Pod?我们先不关注 Pod 怎么使用,怎么调度,如何实现最佳实践。这些问题后续继续讨论,在不懂为什么 k8s 要有 Pod 的情况下,去先深究最佳实践没有实际意义。
囧么肥事-k8s 专场
Pod 官方定义
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器
这些容器共享存储、网络、以及怎样运行这些容器的声明。
Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。
Pod 所建模的是特定于应用的“逻辑主机”,
其中包含一个或多个应用容器,
这些容器是相对紧密的耦合在一起的。
Linux 命名空间、cgroups
*namespace*
Linux namespace 提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的 namespace 中来实现资源隔离的目的.Linux 中六类系统资源的隔离机制:
● Mount: 隔离文件系统挂载点
● UTS: 隔离主机名和域名信息
● IPC: 隔离进程间通讯
● PID: 隔离进程的 ID
● NetWork: 隔离网络资源
● User: 隔离用户和用户组的 ID
cgroups
cgroups 限制一个进程组能够使用的资源上限,包括 CPU
,内存,磁盘,网络带宽等,同时可以设置进程优先级,以及将进程挂起和恢复等。
docker 角度理解 Pod
Pod 的共享上下文包括一组 Linux 名字空间、控制组(cgroup)和可能一些其他的隔离 方面,即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的应用可能会进一步实施隔离。
就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器。
Pod 中多个容器如何协调?
Pod 被设计成支持形成内聚服务单元的多个协作过程(形式为容器)。
Pod 中的容器被自动安排到集群中的同一物理机或虚拟机上,并可以一起进行调度。
容器之间可以共享资源和依赖、彼此通信、协调何时以及何种方式终止自身。
例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的 “sidecar(挂斗)”容器负责从远端更新这些文件,如下图所示:
如何理解 Pod 共享上下文?
一个 Pod 的共享上下文是 Linux 命名空间、cgroups 和其它潜在隔离内容的集合。 在 Pod 中,容器共享一个 IP 地址和端口空间,它们可以通过 localhost 发现彼此。
在同一个 Pod 中的容器,可以使用 System V 或 POSIX 信号进行标准的进程间通信和共享内存。
在不同 Pod 中的容器,拥有不同的 IP 地址,因此不能够直接在进程间进行通信。容器间通常使用 Pod IP 地址进行通信。
Pod 的上下文可以理解成多个 linux 命名空间的联合:
● PID 命名空间(同一个 Pod 中应用可以看到其它进程)
● 网络 命名空间(同一个 Pod 的中的应用对相同的 IP 地址和端口有权限)
● IPC 命名空间(同一个 Pod 中的应用可以通过 VPC 或者 POSIX 进行通信)
● UTS 命名空间(同一个 Pod 中的应用共享一个主机名称)
Kubernetes 推荐学习书
Kubernetes 权威指南 PDF 链接:https://pan.baidu.com/s/11huLHJkCeIPZqSyLEoUEmQ 提取码:sa88
k8s 系列所有问题更新记录:GitHub
版权声明: 本文为 InfoQ 作者【囧么肥事】的原创文章。
原文链接:【http://xie.infoq.cn/article/b57737831f44dd7eadbd4c398】。文章转载请联系作者。
评论