1. RS與RC與Deployment關(guān)聯(lián)
- RC(Replication Controller)主要作用就是用來確保容器應(yīng)用的副本數(shù)始終保持在用戶定義的副本數(shù)。即如果有容器異常退出,會自動創(chuàng)建新的pod來替代;而如果異常多出來的容器也會自動回收。
- K8S官方建議使用RS(ReplicaSet)替代RC(Replication Controller)進行部署,RS跟RC沒有本質(zhì)的不同,只是名字不一樣,并且RS支持集合式的selector.
2. 實例:
- 使用deployment來創(chuàng)建pod
vim nginx-rs.yaml
apiVersion: apps/v1 #指定要使用的 Kubernetes API 版本,這里使用的是 apps/v1
kind: ReplicaSet #指定要創(chuàng)建的對象類型,這里是 ReplicaSet
metadata: #元數(shù)據(jù)信息,包括對象的名稱、標簽等信息
name: my-nginx #對象的名稱,這里是 my-nginx
spec: #指定 ReplicaSet 對象的配置信息
replicas: 3 #指定需要運行的副本數(shù),這里是 3
selector: #指定選擇器,用于選擇需要管理的 Pod
matchLabels: #匹配標簽,這里是 app: nginx-www,表示選擇具有 app=nginx-www 標簽的Pod
app: nginx-www
template: #指定 Pod 的模板,用于創(chuàng)建和管理 Pod
metadata: #Pod 元數(shù)據(jù)信息,包括標簽等信息
labels: #Pod 標簽,這里是 app: nginx-www
app: nginx-www
spec: #Pod 配置信息
containers: #容器列表,這里只有一個 Nginx 容器
- name: my-nginx #容器名稱,這里是 my-nginx
image: nginx:latest #容器鏡像名稱,這里是 nginx:latest,表示使用最新版本的 Nginx 鏡像
imagePullPolicy: IfNotPresent #本地不存在鏡像時才嘗試拉取新鏡像
ports: #容器對外暴露的端口號,這里是 80,表示將容器的 80 端口映射到集群中的一個隨機端口上。
- containerPort: 80
2.1. 創(chuàng)建RS
kubectl apply -f nginx-rs.yaml
----過幾分鐘查看一下pod狀態(tài):
kubectl get pod
NAME READY STATUS RESTARTS AGE
my-nginx-5pbm6 1/1 Running 0 5m47s
my-nginx-9q8hh 1/1 Running 0 5m47s
my-nginx-cp6st 1/1 Running 0 5m47s
--查看RS my-nginx的狀態(tài):
[root@master1 ~]# kubectl get rs my-nginx
NAME DESIRED CURRENT READY AGE
my-nginx 3 3 3 8m19s
3. RS與Deployment的關(guān)聯(lián)
3.1. Deployment
-
Deployment為pod和RS提供了一個聲明式定義(declarative)方法,用來替代以前的RC來方便的管理應(yīng)用。典型的應(yīng)用場景包括:
1. 定義Deployment來創(chuàng)建pod和RS
2. 滾動升級和回滾應(yīng)用
3. 擴容和縮容
4. 暫停和繼續(xù)Deployment文章來源:http://www.zghlxwxcb.cn/news/detail-490284.html -
使用Deployment部署一個簡單的Nginx應(yīng)用:文章來源地址http://www.zghlxwxcb.cn/news/detail-490284.html
vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
template:
metadata:
labels:
app: nginx-deployment
spec:
containers:
- name: my-nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
- 創(chuàng)建deployment:
kubectl apply -f nginx-deployment.yaml --record
--record 參數(shù)可以記錄命令,我們可以很方便的查看每次 revision的變化。
- 查看狀態(tài):
[root@master1 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 3m52s
[root@master1 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-86c547cdd4 3 3 3 3m59s
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-86c547cdd4-b5d9t 1/1 Running 0 4m4s
nginx-deployment-86c547cdd4-d4sxp 1/1 Running 0 4m4s
nginx-deployment-86c547cdd4-n8t9g 1/1 Running 0 4m4s
3.2. 擴容
[root@master1 ~]# kubectl scale deployment nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled
[root@master1 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 5/5 5 5 6m14s
[root@master1 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-86c547cdd4 5 5 5 6m23s
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-86c547cdd4-b5d9t 1/1 Running 0 6m26s
nginx-deployment-86c547cdd4-d4sxp 1/1 Running 0 6m26s
nginx-deployment-86c547cdd4-flzxw 1/1 Running 0 20s
nginx-deployment-86c547cdd4-n8t9g 1/1 Running 0 6m26s
nginx-deployment-86c547cdd4-t5hzg 1/1 Running 0 20s
3.2.1. 如果集群支持HPA的話,還可以為Deployment設(shè)置自動擴展
kubectl autoscale deployment nginx-deployment --min=5 --max=10 --cpu-percent=80
3.3. 縮容
[root@master1 ~]# kubectl scale deployment nginx-deployment --replicas=2
deployment.apps/nginx-deployment scaled
[root@master1 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 7m32s
[root@master1 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-86c547cdd4 2 2 2 7m37s
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-86c547cdd4-b5d9t 1/1 Running 0 7m40s
nginx-deployment-86c547cdd4-d4sxp 1/1 Running 0 7m40s
3.4. 更新鏡像
kubectl set image deployment/nginx-deployment my-nginx=nginx:1.9.1
--查看是否更新成功
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-6867c57f58-hdhqc 1/1 Running 0 9m29s
nginx-deployment-6867c57f58-z2smx 1/1 Running 0 8m8s
[root@master1 ~]# kubectl exec nginx-deployment-6867c57f58-hdhqc -- nginx -v
nginx version: nginx/1.9.1
3.5. 回滾
回滾到上一個版本
[root@master1 ~]# kubectl rollout undo deployment/nginx-deployment
deployment.apps/nginx-deployment rolled back
查看回滾狀態(tài)
[root@master1 ~]# kubectl rollout status deployment nginx-deployment
deployment "nginx-deployment" successfully rolled out
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-86c547cdd4-52llc 1/1 Running 0 15s
nginx-deployment-86c547cdd4-jv25d 1/1 Running 0 9s
[root@master1 ~]# kubectl exec nginx-deployment-86c547cdd4-52llc -- nginx -v
nginx version: nginx/1.25.1
3.6. 回退
查看回滾歷史版本
[root@master1 ~]# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
2 kubectl apply --filename=nginx-deployment.yaml --record=true
3 kubectl apply --filename=nginx-deployment.yaml --record=true
回退到版本2
[root@master1 ~]# kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment.apps/nginx-deployment rolled back
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-6867c57f58-g8bw2 1/1 Running 0 19s
nginx-deployment-6867c57f58-hbwng 1/1 Running 0 16s
[root@master1 ~]# kubectl exec nginx-deployment-6867c57f58-g8bw2 -- nginx -v
nginx version: nginx/1.9.1
到了這里,關(guān)于k8s 的 Deployment控制器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!