一.Pod與controllers的關系
- controllers:在集群上管理和運行容器的對象
- 通過label-selector相關聯
- Pod通過控制器實現應用的運維,如伸縮,升級等
二.Deployment
- 部署無狀態應用
- 管理Pod和ReplicaSet
- 具有上線部署、副本設定、滾動升級、回滾等功能
-
提供聲明式更新,例如只更新一個新的Image
應用場景:Web服務,微服務
創建Deployment:
# kubectl apply -f nginx-deployment.yaml
查看Deployment信息:
#kubectl get deployments
上圖中涉及到數量解釋如下:
READY:0/3 當前准備好的副本數量0,期望副本數3 (即Deployment里面定義的replicas)
UP-TO-DATE: 最新版本副本數量,在滾動升級中,有多少副本已經升級成功
AVAILABLE:當前集群可用的副本數量,及存活的Pod數量
最終結果如下:
查看副本數量:
# kubectl get rs
查看Deployment控制pod水平拓展過程
# kubectl describe deployment nginx-deployment
三.StatefulSet
- 部署有狀態應用
- 每個節點都有固定身份ID
- 集群的規模比較固定
-
如果磁盤損壞,集群內的某個節點無法運行
應用場景:mysql集群,MongoDB集群,Zookeeper集群
四.DaemonSet
- 在每一個Node上運行一個Pod
-
新加入的Node也同樣會自動運行一個Pod
應用場景:zabbix agent,saltstack agent
創建DaemonSet:
# kubectl apply -f agent.yaml
查看daemonset信息
# kubectl get daemonset
五.Job
- 普通任務(Job)
一次性執行
官方案例:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
應用場景:離線數據處理
部署perl
# kubectl apply -f https://k8s.io/examples/controllers/job.yaml
查看job
#kubectl get jobs
查看日志:
# kubectl logs pi-lzsh6
-
定時任務(CronJob)
像Linux的Crontab一樣
官方案例:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
應用場景:通知,備份
部署CronJob:
# kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml
查看pod
# kubectl get pods
查看日志:
六.控制器小結
- Deployment:無狀態部署
- StatefulSet:有狀態部署
- DaemonSet:守護進程部署
- Job & CronJob:批處理