前面我们介绍了kubernetes的容器(Container),这篇文章我们介绍下kubernetes里面的容器组(Pod)。那么pod是什么呢?其实pod是kubernetes中最小的可部署单元。一般我们也喜欢在kuboard里面把他称为工作负载。一个完整的容器组包含的内容主要有:
1、基本信息 2、容器信息 3、存储挂载 4、其他高级设置 5、网络路由
如图:
下面挨个介绍下:
一、基本信息
基本信息一般就是我们给这个容器组填写一些类型、名称、描述、注解、标签等信息
二、容器信息
容器信息主要就是填写部署docker需要使用的信息,例如我们前面的nacos配置信息
三、存储信息
这里主要是填写某些docker需要挂载的存储信息,例如mysql的存储室需要挂载的,那么当前应用需要使用哪个存储挂载,这些信息需要填写
四、其他高级设置信息
这里主要是其他的一些附加信息填写:
五、网络路由信息
这里主要是配置一些访问的信息,例如内部访问,或者外部访问这种。
备注:
1、上面的讲解可能和官方会有一些出入,这块主要是希望依托kuboard的界面很直观的给大家讲解下每一个容器组(Pod)里面到底包含的有哪些信息。
2、每一个容器组里面一般常规是一个工作容器,即只允许一个docker,但是有可能会涉及到两个docker,例如kafka这边的部署就需要zookeeper,但是我们也可以把zookeeper和kafka放到一个容器组里面民政案例后面的文章会介绍到。
3、一个pod只会允许到一个kubernetes工作节点上
4、一个pod中多个容器也只会运行在同一个kubernetes工作节点上
5、关于pod中多个容器的网络说明:
1)同一个 Pod 中的所有容器 IP 地址都相同 2)同一个 Pod 中的不同容器不能使用相同的端口,否则会导致端口冲突 3)同一个 Pod 中的不同容器可以通过 localhost:port 进行通信 4)同一个 Pod 中的不同容器可以通过使用常规的进程间通信手段,例如 SystemV semaphores 或者 POSIX 共享内存
6、关于pod中多个容器的存储说明:
Pod 中可以定义一组共享的数据卷。Pod 中所有的容器都可以访问这些共享数据卷,以便共享数据。Pod 中数据卷的数据也可以存储持久化的数据,使得容器在重启后仍然可以访问到之前存入到数据卷中的数据。
7、如果用户发起了一个pod删除命令的时候会发生什么过程?
1、用户通过 Kuboard 或者 kubectl 发起删除 Pod 的指令,默认 grace period (等待时长)为30秒 2、Pod 的最大存活时间被更新,超过此存活时间,将被认为是“dead” 3、Pod 的状态变更为 “Terminating” 4(与步骤 3 同时)Kubelet 识别出 Pod 的状态是 “Terminating”并立刻开始关闭 Pod 的过程 4.1、如果 Pod 中的某个容器定义了 preStop hook,该钩子程序将被在容器内执行,如果 preStop hook 的执行超过了 grace period (等待时长),步骤二将被执行(并拥有额外的 2 秒等待时长) 4.2)向容器的主进程发送 TERM 信号 5、(与步骤 3 同时)将 Pod 从 Service 的 endpoint 列表中移除(Service 不再将请求路由到该 Pod)。 6、一旦超过 grace period(等待时长),向 Pod 中的任何仍在运行的进程发送 KILL 信号 7、Kubelet 将 Pod 从 API Server 中删除,Kuboard / kubectl 上不再显示该 Pod
还没有评论,来说两句吧...