K8S集群学习记录03

Pod概念

只要有pod,pod中的pause容器就会被创建启动;pause容器是pod的根容器,1.初始化网络栈、挂载网络卷,即pod内部的其他容器共用pause容器的网络栈和存储卷。2.启动一系列的应用容器,应用容器数量在一个以上,即需要启动一个主容器

在同一个pod中,容器之间的端口不能冲突

服务的分类:

  • 有状态服务:例如:mysql、数据库类型
  • 无状态服务:例如:http、web服务器、ftp服务器
  • 中心化服务:
  • 去中心化服务:

pod类型

创建模式

  • 自主式pod(自己管理自己,出现问题自生自灭)

  • 控制器管理pod(控制器管理,pod出问题控制器会处理)

    控制器类型:

    • 为无状态服务设计的控制器:

      • ReplicationController(RC):用来确保容器应用的副本数始终保持在用户定义的副本数(期望),即如果有容器异常退出,会自动创建新的pod来代替;而如果异常多出来的容器也会被回收。需要注意副本数(期望)的值只是一个范围,具体能够达到多少副本的数量与资源相挂钩。 (在新版本K8S中建议使用RS来代替RC)

      • ReplicaSet(RS):与RC没有本质的不同,并且RS支持集合式的selector。RS虽好,但不支持滚动更新和回滚。

        虽然RS可以单独使用,但一般还是建议使用Deployment来管理RS,这样就无需担心跟其他机制的不兼容问题。

      • Deployment(Deploy):支持滚动更新以及回滚

        • deployment的底层原理:Deployment的原理图
      • HPA:仅适用于deployment和RS之上,在V1版本中仅支持根据pod的CPU利用率扩容,在V1 alpha版本中支持根据内存和用户自定义的metric扩容。

        说人话就是:根据pod资源使用情况,调整副本数量,依赖于RC、RS、Deployment之上。

    • 状态服务的控制器

      • StatefulSet:解决有状态服务的问题(对应RS、Deployment是为无状态服务而设计),应用场景包括:

        • 稳定的持久化存储:即pod重新调度后还是能访问到相同的持久化数据,基于PVC实现;

          每一个Pod都有自己稳定的存储

        • 稳定的网络标志:即pod重新调度后,其podName和HostName不变,基于Headless Server来实现;

          每一个控件启动的pod都有唯一的访问地址,访问地址是不变的

        • 有序部署、有序扩容:即pod是有顺序的 ,在部署或扩容的时候要依据定义的顺序依次进行(即从0到N-1,在下一个pod运行之前的所有之前pod必须都是running或ready状态),基于init containers实现

          (控制器的启动顺序有顺序,第一个不启动成功、第二个不会启动。)

        • 有序收缩、有序删除(从N-1到0)

    • daemonset:确保全部(或者一些)Node上运行一个pod的副本。当有Node加入集群时,也会为其增加一个pod;当有Node从集群移除,这些pod也会被回收。删除daemonSet将会删除他创建的所有pod。

      使用daemonSet的典型用法:

      • 运行集群存储daemon,例如在每个Node上运行glusterd、ceph
      • 在每个Node上运行日志收集daemon,例如fluentd、logstash
      • 在每个Node上运行监控daemon,例如:prometheus Node Exporter

网络通讯方式

Logo

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

更多推荐