1.ReplicationController和ReplicaSet介紹
RC(ReplicationController)主要的作用就是用來確保容器應用的副本數始終保持在用戶定義的副本數。即如果有容器異常退出,會自動創建新的Pod來替代;而如果異常多出來的容器也會自動回收Kubernetes
官方建議使用RS(Replicaset)替代RC(ReplicationController)進行部署,RS跟RC沒有本質的不同,只是名字不一樣,並且RS支持集合式的 selector
⒉ReplicaSet資源文件示例
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: frontend
spec:
replicas: 3 #有3個副本
selector: #標簽選擇器
matchLabels:
tier: frontend
template: #模板
metadata:
1abels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
env:
- name: GET_HOSTS_FROM
value:dns
ports:
- containerPort: 80
⒊Deployment介紹
Deployment通過RS去創建和管理對應的pod及不同的RS交替去完成滾動更新。
Deployment為Pod 和Replicaset 提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController 來方便的管理應用。典型的應用場景包括:
·定義Deployment來創建Pod和ReplicaSet
·滾動升級和回滾應用
·擴容和縮容
·暫停和繼續Deployment
⒋Deployment示例
1.資源清單
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
2.創建
kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml --record ## --record參數可以記錄命令,我們可以很方便的查看每次 revision 的變化 更新的時候可以記錄狀態,每一步是使用什么命令進行更新的
3.擴容
kubectl scale deployment nginx-deployment --replicas 10
4.如果集群支持horizontal pod autoscaling的話,還可以為Deployment設置自動擴展
kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80
5.更新容器中的鏡像
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
6.回滾
kubectl rollout undo deployment/nginx-deployment
7.使用edit命令編輯Deployment
kubectl edit deployment/nginx-deployment
8.查看rollout的狀態
kubectl rollout status deployment/nginx-deployment
9.查看歷史RS
kubectl get rs
⒌Deployment 更新策略【如果我們需要更新時將會創建出兩個RS,其中舊的RS一次減少25%的pod而新的RS一次創建25%的pod 】
Deployment 可以保證在升級時只有一定數量的Pod是down的。默認的,它會確保至少有比期望的Pod數量少一個是up狀態(最多一個不可用)
Deployment同時也可以確保只創建出超過期望數量的一定數量的Pod。默認的,它會確保最多比期望的Pod數量多一個的Pod是up的(最多1個surge)
未來的Kuberentes 版本中,將從1-1變成25%-25%$kubect1 describe deployments
⒍Rollover【多個rollout並行】
回退Deployment
只要Deployment的rollout被觸發,就會創建一個revision。也就是說當且僅當Deployment的Pod template(如`.spec.template`)被更改,例如更新template中的label和容器鏡像時,就會創建出一個新的revision。其他的更新,比如擴容Deployment不會創建revision-因此我們可以很方便的手動或者自動擴容。這意味着當您回退到歷史revision時,只有Deployment中的Pod template部分才會回退
#設置鏡像 kubectl set image deployment/nginx-deployment nginx=nginx:1.91 #查看當前更新狀態 kubectl rollout status deployments nginx-deployment kubectl get pods #查看可回滾的歷史版本 kubectl rollout history deployment/nginx-deployment kubectl rollout undo deployment/nginx-deployment ##可以使用--revision參數指定回退到某個歷史版本 kubectl rollout undo deployment/nginx-deployment --to-revision=2 ##暫停 deployment的更新 kubectl rollout pause deployment/nginx-deployment
您可以用kubectl rollout status 命令查看Deployment是否完成。如果 rollout成功完成,kubect1rollout status 將返回一個0值的Exit Code
kubect1 rollout status deploy/nginx echo $?
您可以通過設置.spec.revisonHistoryLimit 項來指定 deployment 最多保留多少revision歷史記錄。默認的會保留所有的revision;如果將該項設置為0,Deployment 就不允許回退了