簡(jiǎn)介
在kubernetes平臺(tái)上,我們很少會(huì)直接創(chuàng)建一個(gè)Pod苗桂,在大多數(shù)情況下會(huì)通過(guò)RC玉控、Deployment疲吸、Job等控制器完成對(duì)一組Pod副本的創(chuàng)建座每、調(diào)度及全生命周期的自動(dòng)控制任務(wù)
控制器種類(lèi)
- ReplicationController
RC前鹅,用來(lái)確保容器應(yīng)用的副本數(shù)始終保持在用戶(hù)定義的副本數(shù)摘悴,即如果有容器異常退出,會(huì)自動(dòng)創(chuàng)建新的 Pod 來(lái)替代舰绘;而如果異常多出來(lái)的容器也會(huì)自動(dòng)回收 - ReplicaSet
在新版本的 Kubernetes 中建議使用 ReplicaSet 來(lái)取代 ReplicationController蹂喻,ReplicaSet 跟 ReplicationController 沒(méi)有本質(zhì)的不同,只是名字不一樣捂寿,并且 ReplicaSet 支持集合式的 selector - Deployment
Deployment 為 Pod 和 ReplicaSet 提供了一個(gè)聲明式定義方法口四,用來(lái)替代以前的 ReplicationController 來(lái)方便的管理應(yīng)用 - DaemonSet
DaemonSet 確保全部(或者一些)Node上運(yùn)行一個(gè) Pod 的副本。當(dāng)有 Node 加入集群時(shí)秦陋,也會(huì)為它們新增一個(gè) Pod蔓彩,當(dāng)有 Node 從集群移除時(shí),這些 Pod 也會(huì)被回收驳概。刪除 DaemonSet 將會(huì)刪除它創(chuàng)建的所有 Pod - StatefulSet
StatefulSet 作為 Controller 為 Pod 提供唯一的標(biāo)識(shí)赤嚼,它可以保證部署和 scale 的順序。StatefulSet 是為了解決有狀態(tài)服務(wù)的問(wèn)題 - Job
Job 負(fù)責(zé)批處理任務(wù)顺又,即僅執(zhí)行一次的任務(wù)更卒,它保證批處理任務(wù)的一個(gè)或多個(gè) Pod 成功結(jié)束 - CronJob
Cron Job 管理基于時(shí)間的 Job,即:在給定時(shí)間點(diǎn)只運(yùn)行一次
稚照,周期性地在給定時(shí)間點(diǎn)運(yùn)行 - Horizontal Pod Autoscaling
顧名思義蹂空,使 Pod 水平自動(dòng)縮放,提高集群的整體資源利用率
Deployment
deployment的主要功能之一就是自動(dòng)部署一個(gè)容器應(yīng)用的多份副本果录,以及持續(xù)監(jiān)控副本的數(shù)量上枕,在集群內(nèi)始終維持用戶(hù)指定的副本數(shù)量
Deployment 創(chuàng)建
- 例子
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:stable ports: - containerPort: 80
- 部署并記錄操作
kubectl apply -f nginx-deployment.yaml --record
Pod的升級(jí)和回滾
- 升級(jí)
- 直接指定image
kubectl set image deployment/nginx-deployment nginx=nginx:latest --record
- 或動(dòng)態(tài)更改
kubectl edit deployment/nginx-deployment
- 更新策略-
spec.strategy.type
- recreate(重建)
先殺掉所有正在運(yùn)行的Pod,然后創(chuàng)建新的Pod - rollingupdate(滾動(dòng)更新)-默認(rèn)
以滾動(dòng)的方式來(lái)逐個(gè)更新Pod
- recreate(重建)
-
spec.strategy.rollingupdate.maxUnavailable
和spec.strategy.rollingupdate.maxSurge
maxUnavailable
表示最多不可用弱恒,maxSurge
表示pod總數(shù)量-pod所需數(shù)量辨萍,從kubernetes1.6版本開(kāi)始maxUnavailable
和maxSurge
默認(rèn)值從1改為所需要副本的25%
- 直接指定image
- 回滾
- 查看指定deployment的部署歷史記錄
kubectl rollout history deployment/nginx-deployment
- 查看指定deployment的部署歷史記錄的指定記錄
kubectl rollout history deployment/nginx-deployment --revision=2
- 回滾到上一版本
kubectl rollout undo deployment/nginx-deployment
- 回滾到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=1
- 查看指定deployment的部署歷史記錄
暫停和恢復(fù)Deployment的部署操作
對(duì)于一次復(fù)雜的Delpoyment配置更改,為了避免頻繁觸發(fā)更新操作斤彼,可以先暫停deployment的更新操作
- 暫停
kubectl rollout pause deployment/nginx-deployment
- 恢復(fù)
kubectl rollout resume deployment/nginx-deployment
Pod的擴(kuò)縮容
- 指定pod副本數(shù)量
kubectl scale deployment/nginx-deployment --replicas=10