1: Deployment
- 定义Deployment来建立Pod和ReplicaSet
- 滚动升级和回滚应用
- 扩容和缩容
- 暂停和继续Deployment
2:DaemonSet
DaemonSet保证在每一个Node上都运行一个容器副本,经常使用来部署一些集群的日志、监控或者其余系统管理应用。典型的应用包括:
- 日志收集,好比fluentd,logstash等
- 系统监控,好比Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等
- 系统程序,好比kube-proxy, kube-dns, glusterd, ceph等
3.StatefulSet
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)
从上面的应用场景能够发现,StatefulSet由如下几个部分组成:
- 用于定义网络标志(DNS domain)的Headless Service
- 用于建立PersistentVolumes的volumeClaimTemplates
- 定义具体应用的StatefulSet
StatefulSet中每一个Pod的DNS格式为
statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local,其中
- serviceName为Headless Service的名字
- 0..N-1为Pod所在的序号,从0开始到N-1
- statefulSetName为StatefulSet的名字
- namespace为服务所在的namespace,Headless Servic和StatefulSet必须在相同的namespace
- .cluster.local为Cluster Domain,
----- 其余的请参考