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启动。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐