pod的定义
pod里面有容器,所以pod就是一个容器组,一个pod里面可以有多个容器也可以有一个容器,最低只能有一个容器,目前现在主流使用的都是一个pod里面一个容器,同一个pod里面的容器,需要紧耦合。配置文件中的template就是一个pod
k8s pod的定义时间是要解决两个问题,一 、容器之间的网络问题。二、容器之间的数据访问问题。一下图片可以说明:
如果没有pod,容器1访问容器2,使用的是地址访问,使用的是localhost,这样访问的本地,也就是容器1的,如果要想访问容器2的mysql,就必须配置IP地址访问,但是如果配置IP地址,容器2发生重启或者删除的时候,再次启动地址就会发生变化,这时候就需要修改代码。为了避免这种情况,之前的做法是建立link链接,,固定容器的名称,利用容器的名称进行访问。
以上图片说明,容器1的程序写入数据ab,但是容器2的程序需要读取ab,因为每个容器都有自己的空间,所以容器2要想访问ab数据,需要进行数据同步,如果这两个容器公用一块就可以了。
针对以上两种情况定义出pod的概念,pod是k8s部署中的最小单元。
pod在创建的时候会创建一个pod puse这里面共享网络,主机、cpu等信息。容器1和容器2访问的网络等信息,都是通过puse这个pod实现的。
服务的分类
服务一共分为两类,一类是无状态的服务,一类是有状态的服务。
无状态服务:理解为这个服务就是简单的提供服务,对主机没有任何操作。例如不在主机上存储数据等。没有和主机有依赖关系。代表应用nginx apache
有状态服务:理解为这个服务在提供的服务的时候,需要使用主机,比如在主机上存储数据等,代表mysql redis 。
资源分类
命名空间A中的容器不能访问命名空间B中的pod,不同的命名空间pod是隔离的。
控制器
控制器一般分为四大类,适用于无状态服务,适用于有状态服务,守护进程,任务和定时任务。
日常中使用最的是无状态服务,这里面使用最多的是Deployment
deployment部署
deployment可以使用k8s命令部署。直接简单理解部署就行了。
daemonset守护进程部署
daemoset不能使用k8s命令部署。daemonset部署一般用于日志收集等
部署形式是这样的,在daemonset的中如果不指定是否按照那个分类部署,默认的部署形式是除了master节点,其它node节点都会部署daemonset容器。
如上图所示,配置一个daemonset,这个daemonset守护进行,会为所有的node部署。
如果指定部署,如上图在node节点中指定 type:microservices。
在daemonset配置中指定这个类型匹配,type:microservices,就会在有这个标识的node节点就行daemonset进行部署。
注意点:
1、daemonset不能使用命令直接创建,没有副本数。只能通过yml文件进行配置部署。
2、HPA自动扩容不适用于无法扩容的对象,例如daemonset。
3、可以指定到某些节点运行。
Deployments和Daemonset区别和联系
相似性:都能创建pod,创建的pod对应的进程都不希望被终止掉。
区别:
使用Deployments的场景:无状态的service使用deployments,微服务,需要实现对副本的数量进行扩缩容、平滑升级。
使用Daemonset的场景:需要pod副本总是运行在全部或者特定主机上,并需要先于其它pod启动。