[转帖]k8s.gcr.io/pause的作用

k8s.gcr.io/pause的作用

https://blog.51cto.com/liuzhengwei521/2422120

weilovepan520关注0人评论196人阅读2019-07-21 11:35:05

重要概念:Pod内的容器都是平等的关系,共享Network Namespace、共享文件

pause容器的最主要的作用:创建共享的网络名称空间,以便于其它容器以平等的关系加入此网络名称空间

pause进程是pod中所有容器的父进程(即第一个进程);

关于 Pod 最重要的一个事实是:它只是一个逻辑概念。

Pod 在 Kubernetes 项目里还有更重要的意义,那就是:容器设计模式;

那么,Pod 又是怎么被“创建”出来的呢?

答案是:Pod,其实是一组共享了某些资源的容器。

具体的说:Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume。

假如:一个有 A、B 两个容器的 Pod,不就是等同于一个容器(容器 A)共享另外一个容器(容器 B)的网络和 Volume 的玩儿法么?

这好像通过 docker run --net --volumes-from 这样的命令就能实现嘛,比如:

docker run --net=B --volumes-from=B --name=A image-A ...

但是,如果真这样做的话,容器 B 就必须比容器 A 先启动,这样一个 Pod 里的多个容器就不是对等关系,而是拓扑关系了。

所以,在 Kubernetes 项目里,Pod 的实现需要使用一个中间容器,这个容器叫作 Infra 容器(初始化容器)。

在这个 Pod 中,Infra 容器永远都是第一个被创建的容器,而其他用户定义的容器,则通过 Join Network Namespace 的方式,与 Infra 容器关联在一起。

这样的组织关系,可以用下面这样一个示意图来表达:

如上图所示,这个 Pod 里有两个用户容器 A 和 B,还有一个 Infra 容器。

很容易理解,在 Kubernetes 项目里,Infra 容器一定要占用极少的资源,所以它使用的是一个非常特殊的镜像,叫作:k8s.gcr.io/pause。

这个镜像是一个用汇编语言编写的、永远处于“暂停”状态的容器,解压后的大小也只有 100~200 KB 左右。

而在 Infra 容器“Hold 住(创建)”Network Namespace 后,用户容器就可以加入到 Infra 容器的 Network Namespace 当中了。

这也就意味着,对于 Pod 里的容器 A 和容器 B 来说:

  • 它们可以直接使用 localhost 进行通信;
  • 它们看到的网络设备跟 Infra 容器看到的完全一样;
  • 一个 Pod 只有一个 IP 地址,也就是这个 Pod 的 Network Namespace 对应的 IP 地址;
  • 当然,其他的所有网络资源,都是一个 Pod 一份,并且被该 Pod 中的所有容器共享;
  • Pod 的生命周期只跟 Infra 容器一致,而与容器 A 和 B 无关。

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11352780.html

时间: 2024-10-11 23:03:33

[转帖]k8s.gcr.io/pause的作用的相关文章

[转帖]k8s.gcr.io镜像无法下载的问题

k8s.gcr.io镜像无法下载的问题 https://blog.51cto.com/liuzhengwei521/2301497 看了下 赵安家老师应该是青岛人 在济南顺能网络科技有限公司上班 铭盛大厦 个人主页: https://anjia0532.github.io 今天早上简单看了下个人的简介 可能是开发运维工作多一些 涉猎很广泛 weilovepan520关注2人评论3370人阅读2018-10-17 21:50:17 在使用k8s的过程中,经常遇到k8s.gcr.io的镜像无法下载的

[ERROR ImagePull]: failed to pull image [k8s.gcr.io/kube-apiserver-amd64:v1.11.1]: exit status 1

问题描述 [[email protected] ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 在进行k8s集群初始化的时候,报以下错误: [preflight] Some fatal errors occurred: [ERROR ImagePull]: failed to pull image [k8s.gcr.io/kube-

k8s.gcr.io镜像无法下载的问题

在使用k8s的过程中,经常遇到k8s.gcr.io的镜像无法下载的问题,无意间得知可以通过这种方法下载,赶紧记下来:下载速度还很快,解决我一大难题~ curl -s https://www.zhangguanzhang.com/pull | bash -s -- k8s.gcr.io/metrics-server-amd64:v0.3.1 注:metrics-server-amd64:v0.3.1可以替换为任何k8s.gcr.io的镜像 原文地址:http://blog.51cto.com/li

安装Minikube无法访问k8s.gcr.io的解决办法

学习Kubenetes,安装Minikube报错.提示无法访问k8s.gcr.io. 上网搜索,好像多数方法是用Docker拉取镜像改标签.感觉比较麻烦. 想用本地镜像库,运行: minikube start --help |grep repo --image-repository='': Alternative image repository to pull docker images from. This can be used when you have limited access t

Kubernetes搭建过程中使用k8s.gcr.io、quay.io、docker.io的镜像加速

前言 因为众所周知的原因,在使用Kubernetes和docker的时候会出现一些镜像无法拉取或者速度较慢的情况,错误信息类似以下: [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.17.3: output: Error response from daemon ... Failed to pull image "quay.io/coreos/flannel:v0.11.0-amd64": rpc err

[转帖]k8s国内镜像

k8s国内镜像 https://www.jianshu.com/p/b9fecdb5e3a7 wu_sphinx 关注 2019.05.06 20:43* 字数 155 阅读 628评论 0喜欢 0 最近折腾k8s,使用kubeadm部署集群,遇到镜像下载的问题 $ kubeadm config images list k8s.gcr.io/kube-apiserver:v1.14.1 k8s.gcr.io/kube-controller-manager:v1.14.1 k8s.gcr.io/k

[转帖]k8s集群node节点一直NotReady, 且node节点(并非master)的kubelet报错:Unable to update cni config: No networks found in /etc/cni/net.d

k8s集群node节点一直NotReady, 且node节点(并非master)的kubelet报错:Unable to update cni config: No networks found in /etc/cni/net.d http://www.voidcn.com/article/p-wpuagtbj-byy.html ? 考虑到node节点的kubelet报错Unable to update cni config: No networks found in /etc/cni/net.

使用kubeadm部署k8s集群00-缓存gcr.io镜像

使用kubeadm部署k8s集群00-缓存gcr.io镜像 2018/2/7 原因:kubeadm init 时,需要下载一些镜像,但国内网络原因,大家懂的,不容易下载,此时,只能去绕过它.备注:官方在 1.5 收到阿里一位童鞋的 PR 来允许指定一个第三方的 registry 来解决上述问题,但因为时间所限,并未找到具体的操作方法. [在国外节点上操作] 镜像来源 针对下述镜像: gcr.io/google_containers/kube-apiserver-amd64:v1.9.0 gcr.

Kubernetes Cluster Error Accessing gcr.io

使用 kubectl run nginx --image=nginx 后查看: kubectl describe pods 发现处于creating状态,并且报错: (unable to ping registry endpoint https://gcr.io/v0/\nv2 ping attempt failed with error: Get https://gcr.io/v2/:... 原因:gcr.io被墙,无法ping到. 解决方法: 在各个nodes上,从dockerhub拉取相关