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,
----- 其餘的請參考