Pod

PodKubernetes 中最重要的概念之一,PodKubernetes 中最小的调度对象,容器的本质是进程,而我们知道,Linux 进程组之间,在这个语境环境下,父进程、子进程,线程之间共享文件、信号、数据内存、紧密一起的完成一个程序的工作。

前面已经说了容器的本质是进程,一个容器只能有一个进程,比如一个运行着 java -jar snap.shot.jar 的 java web 容器,这个容器对应的进程就是这个java 命令,但其实这个容器内也可以再安装一个 mysql ,并对外提供服务, 问题就在于,这个容器并没有办法,管理mysql服务,如果mysql 挂了,没有人去处理。

Kubenetes 通过 进程组的概念,将多个容器组成Pod , 这样Pod 会管理其中的容器,作为 Kubernetes 中的最小调度单元,作为一组共享了某些资源的容器的组成/边界。这些Pod中的容器,共享着一个 Network Namespace ,可以共享一个 Volume ,Docker 中也可以作出A容器基于B容器的这种关系,但是存在依赖的拓扑关系,而不是 对等关系,这很重要。

在 Kubernetes 项目中,Pod 的实现需要一个中间容器,这个容器叫做 Infra 容器,其他用户自定义的容器,可以加入这个容器,如果你不下提前从 k8s.gcr.io/pause 下载 tag 好 镜像,就会发现在创建 pod 的时候,在pull这个pasue的时候被墙,这个pause 容器,其实就是pod 的infra 容器,100-200kb 而已,是作为pod 的其他容器的,netword 、volume 共享的容器,永远处于 pause 状态,用汇编语言写的。

对于 Pod 中的 A、B 容器来说:

  • 他们可以通过 localhost 进行通信
  • 他们的网络设备和加入的 Infra 容器一致
  • 一个Pod的 IP 只有一个
  • Pod 的生命周期是Infra 的生命周期,与自定义容器无关
  • 每个Pod 独立网络资源,A、B共享

操作

# 创建一个  Pod 
$ kubectl create -f xxx.yaml
$ kubectl replace -f xxx.yaml

# 或者 	创建
$ kubectl apply -f xxxx.yaml
# 修改  yaml 的内容  更新
$ kubectl apply -f xxxx.yaml
# 删除
$ kubectl  delete -f xxx.yaml

Logo

开源、云原生的融合云平台

更多推荐