~阿弥陀佛~

人生能有多少天是按照自己的想法去活着

pod概念1

1.       Pod

K8S环境中,是最小的封装集合,在容器化里每一个运行的容器就是一个封装集合,那么一个pod里会封装多个容器,达到一个子节点的运行环境,它是kubernetes管理的最小单位,

2.       Pod的分类

自主式pod 非控制器管理的pod,一旦死亡无法拉起,也不会创建新的pod达到其期望值。

控制器管理的pod:字面意思

 在传统的docker中,去运行一个容器的话,每一个容器都是独立存在的,每一个容器都有自己的IP地址,每个容器都可能有自己的挂载卷等,但是在K8S移植的话不太容易 ,比如把没有在容器运行过的环境迁移到K8S上很难,像LAMPAphp之间有联系,如果将其分开,他们两个是不同的地址还需要配置反向代理,比较费事。K8S新概念POD,定义一个pod, 假设在这个pod里有两个容器(两个容器会共用pause网络站,共用存储卷。也就意味着两个容器没有独立的IP地址了,用的是pause的或者pod的地址,因此在同一个pod里不能有两个端口一样的容器),启动第一个容器pause,只要运行pod,容器就会被启动, 

3.       Pod控制器类型

Replicationcontroller  && replicaset && deployment   &&  HPA(horizontalPodAutoScale)

ReplicationController 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的pod来代替,而如果异常多出来的容器也会自动回收。在新版本的kubernetes中建议使用ReplicaSet来取代ReplicationControlleRS取代RC,本质上一样,但是在创建pod的时候会打标签,比如version=v1,http=apache等,因此rs支持集合式的selector rc不支持,因此rsrc更简单有效更有意义)

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

    虽然ReplicaSet可以独立使用,但一般还是使用Deployment来自动管理ReplicaSet, 这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update(滚动更新) 但是Deployment支持),注意:deployment并不负责pod的创建

1:创建pod滚动更新过程

1:创建deployment, deployment会自定义一个RS(即ReplicaSet),RS来创建对应的pod比如V13个副本,假设当前要更新到V2版,deployment会创建一个新的RS,逐步将镜像版本更新到V2然后删除旧的pod,注意此时旧的RS只是停用而非删除,因此,当新版本有问题需要回滚,则重新启用旧的RS,依次创建更新podHPA(horizontalPodAutoScale)Horizontal Pod Autoscaling仅适用于DeploymentReplicaSet,在V1版本中仅支持根据PodCPU利用率扩缩容,在Vlalpha版本中,支持根据内存和用户自定义的metric扩缩容  定义一个HPAHPA基于RS去定义,默认当pod使用率达到80%的时候就进行扩展,扩展最大值是10,最小2个,它会实时去监控pod的使用率,超过80会创建新的pod,一般达到3个时使用率会降到80以下,然后进行pod回收到期望值。 Statefullset是为了解决有状态服务的问题(对应DeploymentsReplicaSets 是为无状态服务而设计),其应用场景包括:

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

l  稳定的网络标志,即pod重新调度后其PodNameHostName不变,基于Headless service (即没有Cluster IP Service)来实现

l  有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0N-1 在下一个Pod运行之前所有之前的Pod必须都是RunningReady状态),基于init containers来实现(启动顺序,比如nginx apache  mysql ,启动顺序 3  2  1

l  有序收缩,有序删除(即从N-10

【补充释义: docker主要面对的是无状态服务,无状态服务的含义是没有对应的存储去实时的保留如apachelvs 脱离出来后再放回去依旧可以正常工作, 有状态服务 mysql  mangoDB需要实时的及逆行数据更新存储,脱离再回归无法正常工作, 因此statefulset就是为了解决有状态服务的该问题而诞生的】Daemonset

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

使用DamonSet的一些典型用法:

l  运行集群存储daemon,例如再每个Node上运行glusterdceph

l  在每个Node上运行日志收集daemon,例如fluentdlogstash

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

【补充释义: DaemonSet确保全部(或者一些),一些的含义是我们可以在Node上打一些污点,这些污点可以不被调度,所以在DaemonSet创建的时候,这些打了污点的Node上就不会创建这些pod,但是正常情况下所有的Node上都会运行一个pod副本且只有一个  

 

Next Post

Previous Post

Leave a Reply

© 2021 ~阿弥陀佛~

ICP备案号: 京ICP备19038630号

版权所有@ 王力翔

耗时 0.216 秒 | 查询 41 次 | 内存 22.35 MB