首页 > 科技 > 「K8S系列」K8S核心基础—Pod详解

「K8S系列」K8S核心基础—Pod详解

Pod 概念


不同载体最小单位

不同于以往的虚拟机和Docker,Kubernetes中管理的最小单位是Pod,这是一个很基础但是很重要的一个概念。俗话说:麻雀虽小五脏俱全。小小的Pod其实可以看做是宏观操作系统的一个缩影,理解这句话对于理解Kubernetes很有帮助的。具体细节我会循序渐进慢慢道来。

Pod是由一组一个或多个 容器(例如Docker容器)组成,它们共享存储/网络,同时规范了容器如何运行。在同一Pod里面,所有容器在共享上下文中运行,并协同工作和调度。

Pod 本质

其实Pod 并没有一个明确的边界。它只是一个逻辑概念。

说到这不得不提一下Pod内的Docker 本质了,Docker 容器是利用了Linux 的 Namespace(命名空间)来做访问隔离,用Cgroups做资源限制。所以Pod 的本质也是继承了这些,上面提到的共享上下文其实就是共享同一个命名空间,说白了大家都是一个家人。

Pod 的 0 到 1

在部署K8S 集群时候,大家可能会注意到有个pause的镜像,相信大家初次接触时候肯定会对此有一定疑惑,因为其他的镜像都是可以从命名上猜出它们的作用比如api、schedule等。

官网的定义:

it's part of the infrastructure. This container is started first in all Pods to setup the network for the Pod.

Pause容器,又叫Infra容器。也就是基础设施。我们先来直观看下。

root@Gitlab-Tools:~# docker ps | grep pause0e1c2c7b7c53 docker.pkg.github.com/yangvipguang/k8s/pause:3.1 "/pause" 5 weeks ago Up 5 weeks k8s_POD_coredns-75c6bcb557-ksqtw_kube-system_10898c04-aace-4155-b446-db422a568a8d_1

Pause容器是Pod 里的万物之源。Pause 容器是最先被创建出来的。起到了开天辟地的作用,Hold 住了Pod中的Namespace。然后其他的容器会加入到这个Pause容器所在的Namespace。


A 容器和 B 容器加入同一个命名空间

这个Pause 容器是非常小的,用的C语言编写大概只有不到200k。有兴趣大家可以去Github上看看:https://github.com/kubernetes/kubernetes/tree/master/build/pause

这样的Pod 形成后,我们可以看到

  1. 容器A 和 容器B 可以通过localhost 来互相通信。
  2. 整个Pod 会单独分配一个IP 地址。

这样的一个模型是不是感觉很熟悉,就像我们的宏观的操作系统一个。K8S 就是云平台,Pod 就是虚拟机,而Pod 中的容器就是虚拟机中的用户程序。

总结


本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/2004004.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)