Pod 的分類:
主式 Pod:
Pod 退出後不會被創建
控制器管理的
Pod:在控制器的生命週期裏,始終要維持 Pod 的副本數目
類型:
• Replication Controller和ReplicaSet
• Deployment
• DaemonSet
• StatefulSet
• Job
• CronJob
• HPA全稱Horizontal Pod Autoscaler
eplication Controller和ReplicaSet
ReplicaSet 是下一代的 Replication Controller,官方推薦使用ReplicaSet。
ReplicaSet 和 Replication Controller 的唯一區別是選擇器的支持,ReplicaSet 支持 新的基於集合的選擇器需求。
ReplicaSet 確保任何時間都有指定數量的 Pod 副本在運行。 雖然 ReplicaSets 可以獨立使用,但今天它主要被Deployments 用作協調 Pod 創建、 刪除和更新的機制。
Deployment
Deployment 爲 Pod 和 ReplicaSet 提供了一個申明式的定義方法。
典型的應用場景:
用來創建Pod和ReplicaSet
滾動更新和回滾
擴容和縮容
暫停與恢復
DaemonSet
DaemonSet 確保全部(或者某些)節點上運行一個 Pod 的副本。當有節點 加入集羣時, 也會爲他們新增一個 Pod 。當有節點從集羣移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創建的所有 Pod。
DaemonSet 的典型用法:
在每個節點上運行集羣存儲 DaemonSet,例如 glusterd、ceph。
'每個節點上運行日誌收集 DaemonSet,例如 fluentd、logstash。
在每個節點上運行監控 DaemonSet,例如 Prometheus Node Exporter、 zabbix agent等
一個簡單的用法是在所有的節點上都啓動一個 DaemonSet,將被作爲每種 類型的 daemon 使用。
一個稍微複雜的用法是單獨對每種 daemon 類型使用多個 DaemonSet,但 具有不同的標誌, 並且對不同硬件類型具有不同的內存、CPU 要求。
StatefulSet
StatefulSet 是用來管理有狀態應用的工作負載 API 對象。實例之間有不對等 關係,以及實例對外部數據有依賴關係的應用,稱爲“有狀態應用”
• StatefulSet 用來管理 Deployment 和擴展一組 Pod,並且能爲這些 Pod 提 供序號和唯一性保證。
• StatefulSets 對於需要滿足以下一個或多個需求的應用程序很有價值:
• 穩定的、唯一的網絡標識符。
• 穩定的、持久的存儲。
• 有序的、優雅的部署和縮放。
• 有序的、自動的滾動更新。
Job
執行批處理任務,僅執行一次任務,保證任務的一個或多個Pod成功結束。
CronJob
Cron Job 創建基於時間調度的 Jobs。
一個 CronJob 對象就像 crontab (cron table) 文件中的一行,它用 Cron 格式 進行編寫,並週期性地在給定的調度時間執行 Job。
HPA
根據資源利用率自動調整service中Pod數量,實現Pod水平自動縮放。
ReplicaSet控制器示例:
$ vim replicaset-example.yaml
piVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-example
spec:
replicas: 3
selector: match
Labels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
控制器示例:
$ vim job-example.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
• $ kubectl apply -f job-example.yaml
• $ kubectl get pod
NAME READY STATUS RESTARTS AGE
pi-6phk8 0/1 Completed 0 2m22s
• $ kubectl logs pi-6phk8
• $ kubectl delete job pi
DaemonSet控制器示例:
• $ vim cronjob-example.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from k8s cluster
restartPolicy: OnFailure
$ kubectl apply -f cronjob-example.yaml
kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob-example * * * * * False 0 38s 8m22s
kubectl get job -w
NAME COMPLETIONS DURATION AGE
cronjob-example-1581873180 1/1 1s 3m cronjob-example-1581873240 1/1 1s 2m
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
cronjob-example-1581873240-r644w 0/1 Completed 0 2m51s cronjob-example-1581873300-p89rc 0/1 Completed 0 111s
kubectl logs cronjob-example-1581873240-r644w
Sun Feb 16 17:14:06 UTC 2020 Hello from k8s cluster
kubectl delete cronjob cronjob-example
cronjob.batch "cronjob-example" deleted