4、Pod的概念

    Pod 概念
        自主式 Pod:不是被控制器管理的Pod;
        管理器管理的 Pod:被控制器管理的Pod,维持期望的副本数,一旦退出会被控制器拉起;
       每个 Pod启动之后都会运行一个Pause的根容器,每个Pod里面至少有一个以上的容器,每个容器共用根容器的网络栈,共用根容器的存储卷,容器没有独立的ip地址,容器之间隔离,容器内的进程相互不隔离,进程之间的端口不能冲突,否则将导致进程无法启动。
 
ReplicationController & ReplicaSet & Deployment 
 
ReplicationController 用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod 来替代;而如果异常多出来的容器也会自动回收。在新版本的Kubernetes 中建议使用ReplicaSet 来取代ReplicationControlle
 
ReplicaSet 跟ReplicationController 没有本质的不同,只是名字不一样,并且ReplicaSet 支持集合式的selector
 
虽然ReplicaSet 可以独立使用,但一般还是建议使用Deployment 来自动管理ReplicaSet ,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet 不支持rolling-update 但Deployment 支持)
 
Deployment 为Pod 和ReplicaSet 提供了一个声明式定义(declarative) 方法,用来替代以前的ReplicationController 来方便的管理应用。典型的应用场景包括:
 
*定义Deployment 来创建Pod 和ReplicaSet
*滚动升级和回滚应用(创建新的RS实现升级和滚动)
*扩容和缩容
*暂停和继续Deployment
 
>HPA(HorizontalPodAutoScale)
 
Horizontal Pod Autoscaling 仅适用于Deployment 和ReplicaSet ,在V1 版本中仅支持根据Pod 的CPU 利用率扩所容,在v1alpha 版本中,支持根据内存和用户自定义的metric 扩缩容
 
*StatefullSet
 
StatefulSet是为了解决有状态服务的问题(对应Deployments 和ReplicaSets是为无状态服务而设计),其应用场景包括:
 
*稳定的持久化存储,即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,Cronjob
 
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod 成功结束Cron Job管理基于时间的Job,即:
*在给定时间点只运行一次
*周期性地在给定时间点运行
 
 
        服务发现
        Pod 协同
 
命令式编程:它侧重于如何实现程序,就像我们刚接触编程的时候那样,我们需要把程序的实现过程按照逻辑结果一步步写下来;
声明式编程:它侧重于定义想要什么,然后告诉计算机/引擎,让他帮你去实现;
posted @ 2020-07-14 07:15  hlc-123  阅读(368)  评论(0)    收藏  举报