【k8s】七、Pod详解(一)

目录

前言

Pod概念

Pod控制器

ReplicationController & ReplicaSet

HPA(Horizontal Pod Autoscaling)

StatefulSet

DaemonSet

Job 、Cron Job

总结

写在后面


前言

秉承着先上车,后补票,先上手,后了解概念的思想。前面直接通过搭建k8s实验环境,简单介绍k8s知识点,以实践实战为主让各位同学对于k8s有一个感性的认识。因此对于偏概念型的知识点便没有花比较多的篇幅介绍。现在跟着我教程下来的各位同学已经有了一定的k8s基础,这时,咱们来一起捋一捋相关知识点。首先讲到的,便是咱们接触的最多的Pod概念。也是咱们k8s里的最小单元。

如果还没有k8s实验环境的同学,可以翻看我之前的文章

【k8s】一、基础实验环境准备

【k8s】二、containerd的安装

【k8s】三、k8s集群的初始化

Pod概念

在k8s集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被统一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。

在k8s中,按照pod的创建方式,pod可以分成两类,自主式Pod和控制器管理的Pod。

  • 自主式Pod:Pod退出了,此类型的Pod不会被创建

  • 控制器管理的Pod:在控制器的生命周期里,始终要维持Pod的副本数目

一个pod可以封装一个或多个容器。在同一个Pod里的容器端口不能冲突。同一个Pod里,即共享网络也共享存储。

Pod控制器

Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod资源在运行中出现故障,它会基于指定策略重新编排Pod。

ReplicationController & ReplicaSet

在新版本中,官方使用ReplicaSet

ReplicationController用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收。

新版本的K8S中建议使用ReplicaSet来替代ReplicationController

ReplicaSet跟ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector

虽然ReplicaSet可以独立使用,但是一般还是建议使用Deployment来自动管理ReplicaSet,这样子就无需担心跟其他机制的不兼容问题(例如ReplicaSet不支持rolling-update但是Deployment支持)

注:Deployment控制器不负责Pod创建,Deployment新建一个RS,RS再去新建Pod。deploy在滚动更新的时候,不会删除旧的RS

HPA(Horizontal Pod Autoscaling)

HPA实现了K8S容器的平滑扩展

HPA仅适用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CPU利用率扩缩容,在V1alpha版本中,支持根据内存和用户自定义的metric扩缩容。

StatefulSet

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

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

  • 稳定的网络标志,即Pod重新调度后,其PodName和HostName不变,基于Headless Service(即没有Cluster IP的service)来实现

  • 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要一句定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready的状态),基于init containers来实现。

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

DaemonSet

DaemonSet确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。

使用DaemonSet的一些典型用法:

  • 运行集群存储daemon,例如在每个Node上运行glusterd、ceph

  • 在每个Node上运行日志收集daemon,例如fluentd、logstash

  • 在每个Node上运行监控daemon,例如Prometheus Node Exporter

Job 、Cron Job

Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束

Cron Job管理基于时间的Job,即:

  • 在给定时间点只运行一次

  • 周期性低在给定时间点运行

总结

本文简单介绍了Pod的基本概念和分类,以及Pod的控制器类型,后面会进一步介绍Pod的网络,以及各个控制器类型的具体解释和实战。由于是概念性的东西,大家先过一遍,结合之前的教程提到的与Pod相关的实战教程。【k8s】四、资源及资源清单,【k8s】五、Pod生命周期(一),【k8s】六、Pod生命周期(二)。接下来会更进一步通过实战来强化概念。

写在后面

如果觉得有用的话,麻烦一键三连支持一下攻城狮白玉,并把本文分享给更多的小伙伴。你的简单支持,我的无限创作动力

你可能感兴趣的:(k8s,Linux运维,kubernetes,docker,容器)