发布时间:2023-02-05 14:30
在Kubernetes中,她并不直接处理单个容器,而是直接操作Pod,Pod相当于是Kubernetes中最基本的部署单位。一个Pod中是可以包含多个容器的,容器中运行的是我们的应用程序。
一个Pod中是一组紧密相关的容器,这些容器一定是运行在同一个工作节点上的。每个Pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等。下面看看工作节点、Pod、容器、应用程序之间的关系。
为什么需要Pod?为什么不直接使用容器?为什么需要同时运行多个容器?为什么不能简单地把所有进程都放在一个单独的容器中?
一个容器中运行一个进程会让水平扩缩容变的简单,如果一个容器中即运行了Tomcat,又运行了MySQL,那在扩缩容的时候就变的复杂了。同时一个容器运行一个进程会让排错变的简单。一个容器中运行一个进程,这样才能够最好地应用容器编排来管理好容器和服务。因此建议一个容器中只运行一个进程。
由于不能将多个进程聚集在一个单独的容器中,所以就需要一种更高级的结构将容器绑定在一起,并将她们作为一个单元进行管理,这就产生了Pod。在一个Pod中,我们可以同时运行一些密切相关的进程,并为他们提供相同的环境,这时这些进程就好像全部运行于单个容器中一样,同时又保持着一定的隔离。
在Docker中我们知道每个容器之间是相互隔离的,每个容器都有属于自己的一组Namespace(指的是Linux的Namespace)。但是在K8s中,Pod之间是隔离的,而Pod中的一组容器是共享一些资源的。K8s通过配置Docker来让一个Pod内的所有容器共享相同的Namespace,而不是每个容器都有自己的一组Namespace。
由于一个Pod中的所有容器都在相同的Network命名空间下(他们还共享其他的一些Namespace),所以他们都共享相同的IP和端口。这就意味着在同一Pod中的容器运行的多个进程需要注意不能绑定到相同的端口号,否则会导致端口冲突。注意是同一Pod,而不同Pod间的容器是不用担心端口冲突的。此外,一个Pod中的所有容器也都具有相同的loopback网络接口,所以同一个Pod中的多个容器是可以通过localhost进行通信的。
在K8s集群中所有的Pod都在同一共享网络地址空间中,因此,整个集群中的每个Pod都可以通过其他Pod的IP地址实现相互访问。
在通过kubeadm安装Kubernetes集群的时候设置过一个配置:
kubeadm init \ --apiserver-advertise-address=xx.xx.xx.xx \ --image-repository xxx \ --kubernetes-version v1.21.0 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16 ### 这个就是集群中Pod的网络范围
我们将Pod视为独立的机器,其中每个机器只托管一个特定的应用。以前我们习惯于将各种应用程序塞进同一台主机,但是Pod不是这么玩的。我们将应用程序组织到多个Pod中,而每个Pod中只包含紧密相关的组件或进程。(注意,Pod是很轻量的,我们可以在几乎不导致任何额外开销的前提下拥有尽可能多的Pod,所以不用担心创建了太多的Pod)
以一个由前端应用和后端服务组成的多层应用程序为例。
虽然我们可以在单个Pod中同时运行前端服务和后端服务这两个容器,但是这种方式并不推荐,前面也提到尽量让一个容器中运行一个进程。对于前端服务和后端服务来说,他们真的需要运行在同一台计算机上吗?答案一定是否定的,如果把前端和后端都部署在同一个Pod中,那么他们两个相当于是共生的,始终会部署在同一台机器上。这时如果我们集群具有多个节点,而整个前后端服务一直都部署在同一节点上,就不能对其他节点的资源进行充分利用。另外,如果我们只想扩容后端服务怎么办?所以说,更合理的做法就是把前后端服务拆分成两个Pod,然后可以部署在不同的节点上,来提高机器的资源利用率,或者更加方便的进行扩缩容等。
将多个容器添加到单个Pod中的主要原因是应用可能由一个主进程和多个辅助进程组成。
在决定是将两个容器放入一个Pod还是两个单独的Pod时,我们需要问自己以下问题:
如何通过OpenHarmony系统中集成的ffmpeg库和NAPI机制,实现更多的多媒体功能?
利用Python实现新冠疫情数据可视化(获取疫情历史数据,制作南丁格尔玫瑰图、疫情地图、动态疫情组合图、词云)
模型预测控制MPC2(无约束MPC,Unconstrained Model Predictive Control)
基于matlab的mimo仿真,基于MATLAB的MIMO系统仿真与分析|Matlab代做
Springboot----项目整合微信支付(引入延迟队列实现订单过期取消以及商户主动查单)