k8s的概念梳理

1、Pod是k8s中可以创建和部署的最小单位。一个pod可以看作一个逻辑主机,一个pod代表一个应用实例,可以包含多个容器。
2、label和label selector:label能够以key/value的形式可以给pod等资源对象创建一组或多组标签,实现资源分组管理功能。Label selector能够识别一组有共同特征或属性(label)的资源对象。(Label Selector有两种形式:等式方式:= 、 == 、 !=和集合方式:in、notin)。Label和Label Selector共同构成了k8s中最核心的应用模型,使得被管理对象能够被精确地分组管理。
3、Namespace是对一组资源和对象的抽象集合,常用来隔离不同的用户,也可以将其看作k8s集群中的虚拟化集群,在一个k8s集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等属于集群资源,不属于任何namespace。
4、ReplicationController用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;如果出现异常多出来的容器也会自动回收。
5、ReplicaSet是下一代复本控制器。ReplicaSet和 Replication Controller之间的唯一区别是现在的选择器支持。Replication Controller只支持基于等式的selector,但ReplicaSet还支持基于集合的selector。
6、Node是Pod真正运行的主机,一般是物理机。为了管理Pod,每个Node节点上至少要运行docker、kubelet和kube-proxy服务。
7、Service,由于Pod存在生命周期,有销毁,有重建,无法提供一个固定的访问接口(ip)给客户端。其他Pod想要发现并连接这组Pod就需要通过service,由此Service资源出现了,service可以为一类Pod资源对象提供一个固定的访问接口(虚拟ip)和负载均衡,Service基于标签选择器LabelSelector将一组Pod定义成一个逻辑组合,并通过自己的IP地址和端口调度代理请求到组内的Pod对象。
8、volume,容器中的磁盘在容器重启后文件会丢失;当很多容器在同一Pod中运行的时候需要数据文件的共享。volume与挂载它的Pod生命周期相同,当Pod被删除时,卷也不存在了。一个 volume 就是一个目录,这个目录对pod中的所有容器都是可用的。
9、PV和PVC,PersistentVolume可以看作是将分布式存储系统(NFS)上的集群存储资源划分出的一个存储块,其生命周期独立于使用其的pod。
要使用PV需要创建PersistentVolumeClaim(持久卷声明,简称PVC),PVC是用户的一种存储请求。它和Pod类似,Pod消耗Node资源,而PVC消耗PV资源。Pod能够请求特定的资源(如CPU和内存),PVC能够请求指定的大小和访问的模式(可以被映射为一次读写或者多次只读).
10、Deployment为Pod和ReplicaSet提供了一个声明式定义方法,deployment是用来管理无状态应用的,使用Deployment来创建ReplicaSet,ReplicaSet在后台创建pod。能够支持滚动升级和回滚应用、扩容和缩容。
11、StatefulSet是为了解决有状态服务的问题,对应的Deployments和ReplicaSets是为无状态服务而设计。
(1)稳定且持久的存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现;
(2)稳定且唯一的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service来实现;
(3)Pod是有顺序的,有序部署和扩展,有序收缩和删除,即在部署或者扩展的时候要依据定义的顺序依次依次进行,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态,基于init containers来实现
12、Secret存储对象解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式被使用。
13、DaemonSet保证每个Node上都运行一个Pod的副本,当有Node加入集群时,也会为他们新增一个Pod;当Node移除时,会回收Pod;删除DaemonSet将删除它创建的所有Pod。
典型用法:
日志收集daemon,比如fluentd,logstash等
系统监控daemon,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等
系统程序daemon,比如kube-proxy, kube-dns, glusterd, ceph等
14、Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。Job Controller负责根据Job Spec创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的Pod再次重试任务。
15、CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。

你可能感兴趣的:(K8S)