简略回顾
之前咱们学习过的的 docker,例如咱们运行
docker run busybox echo "hello wrold"
他的理论外在逻辑是这个样子的
- 程序将指令推送给 docker
- docker 会查看本地是否有 busybox 镜像,若没有则去 docker hub 下面拉取镜像,并下载到本机,再基于这个镜像创立一个 容器
- 在容器中运行指令 echo“hello wrold”
后面咱们也晓得了 每一个 pod 或者 docker 容器,都有本人独立的文件系统,过程,用户,主机名和网络接口
简略运行 pod
如果想简略运行一个 pod,咱们能够这样做
kubectl run xmtkubia --image=xiaomotong888/xmtkubia --port=8080
xiaomotong888/xmtkubia 是 dockerhub 下面的具体公开的镜像
pod 中的容器运行地位
咱们晓得 pod 中能够运行 1 个容器或者多个容器,那么如果 1 个 pod 中,运行多个容器,那么这些容器都会运行在同一个工作节点下面吗?
当一个 pod 中有多个容器的时候,这些容器肯定总是运行在同一个工作节点下面的,一个 pod 相对不会逾越多个工作节点
为什么是 一个 pod 外面跑多个容器,而不是一个容器外面跑多个过程?
在咱们学习 docker 和 K8S 的过程中,有没有思考过,为什么须要引入 pod 这个概念,咱们一个容器外面设计成跑多个过程不就好了吗?
实际上,容器是被设计成每个容器只能运行一个过程的,当然这个过程在程序中主动开拓的子过程是不蕴含在内的
- 如果咱们单个容器中运行了多个不相干的过程,那么当同一个容器中别的过程解体的时候,便会影响到其余过程
- 多个过程跑在同一个容器中,如何辨别过程在规范输入打印的信息呢,这会很麻烦
提出 pod 其实是一种解决方案
- 提出 pod 这种构造后,1 个 pod 能够和多个容器绑定在一起
- 1 个 pod 外面能够同时运行多个过程(即多个容器),并且这行过程可能享有简直同样的环境
- 从内部看,这些过程如同是全副运行在单个容器中,实际上这些过程又互相放弃 肯定的隔离
下面这里说到的 pod 中的容器相互间放弃的着 肯定的隔离,而不是齐全隔离
这里指的是隔离容器组,而不是单个容器,每个容器组内的容器是能够共享容器组的资源的
容器如何共享 ip 和 端口
同一个 pod 中的容器是运行在雷同的 Network 命名空间中的,因而他们 对于 ip 地址和端口空间是共享的
那么同一个 pod 上面的容器,配置 端口号的时候就须要留神,不能抵触,例如这样
在 K8S 中,所有的 pod 都是在同一个网络地址空间中,网络信息他们是共享的
如图,不同 pod 之间是能够通过 ip 间接拜访的
看了以上 pod 的行为,有没有感觉 pod 的行为和理论的虚拟机或者物理机的行为有很多相似的中央,虚拟机外面跑的每一个过程,pod 外面也能够间接跑这些过程,只不过,pod 外面的每一个过程,都被一个容器包裹
所以啊,pod 能够看做是一个 逻辑主机
切实的案例
一个应用程序,有前端应用服务器,和 后端的数据库,如果咱们须要将这个程序放到 K8S 环境中,咱们是启 1 个 pod 还是 2 个 pod?
在 K8S 中是举荐将上述的前端服务器和 后盾数据库离开,分成 2 个 pod 去部署,起因有这些:
- 这样既可能充分利用多个节点的 CPU 和内存,还能够不便咱们后续的扩容和缩容
- 在咱们扩缩容的时候,根本单位也是 pod,K8S 中不能对单个容器进行扩缩容
- 如果将前端和后盾都放到同一个 pod 中,那么咱们扩容或者缩容时候,那么相应的容器将会成倍的减少或缩小
- 前端和后盾的扩容缩容也会是齐全不同的需要,并不能间接简略粗犷的干就完了
如果咱们把上述的前端和后盾这样来部署是不举荐的:
- 全副放到同一个 pod 的同一个 容器中
- 通一个 pod 中部署 2 个容器,别离部署前端和后盾
举荐的做法是
- 在 2 个 pod 中别离开 1 个容器,各自部署 前端,后台程序
咱们理论工作中面临是否须要在同一个 pod 中启多个容器的时候,咱们能够思考一下这样的问题
- 这些容器放在一起运行是必须的吗?是否能够拆分放在不同的主机上运行
- 这些程序是代表一个整体?还是互相独立的
- 对于扩容和锁容,是须要一起进行,还是别离进行?
这些问题,咱们之后能够解决一下
明天就到这里,学习所得,若有偏差,还请斧正
欢送点赞,关注,珍藏
敌人们,你的反对和激励,是我保持分享,提高质量的能源
好了,本次就到这里
技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。
我是 阿兵云原生,欢送点赞关注珍藏,下次见~