?
?
目錄
?編輯
1 Controller 控制器
1.1 什么是 Controller
1.2 常見的 Controller 控制器
1.3 Controller 如何管理 Pod
2 Deployment
2.1 創(chuàng)建 deployment
2.2 查看 deployment
2.3 擴(kuò)縮 deployment
2.4 回滾 deployment
2.5 刪除 deployment
1 Controller 控制器
官網(wǎng): 控制器 | Kubernetes
1.1 什么是 Controller
Kubernetes 通常不會直接創(chuàng)建 Pod, 而是通過 Controller 來管理 Pod 的。
Controller 中定義了 Pod 的部署特性,比如有幾個(gè)副本、在什么樣的 Node 上運(yùn)行等。通俗的說可以認(rèn)為 Controller 就是用來管理 Pod 一個(gè)對象。其核心作用可以通過一句話總結(jié): 通過監(jiān)控集群的公共狀態(tài),并致力于將當(dāng)前狀態(tài)轉(zhuǎn)變?yōu)槠谕臓顟B(tài)。
通俗定義: controller 可以管理 pod 讓 pod 更具有運(yùn)維能力
1.2 常見的 Controller 控制器
-
Deployment
是最常用的 Controller。Deployment 可以管理 Pod 的多個(gè)副本,并確保 Pod 按照期望的狀態(tài)運(yùn)行。-
ReplicaSet 實(shí)現(xiàn)了 Pod 的多副本管理。使用 Deployment 時(shí)會自動創(chuàng)建 ReplicaSet,也就是說 Deployment 是通過 ReplicaSet 來管理 Pod 的多個(gè)副本的,我們通常不需要直接使用 ReplicaSet。
-
-
Daemonset
用于每個(gè)Node 最多只運(yùn)行一個(gè) Pod 副本的場景。正如其名稱所揭示的,DaemonSet 通常用于運(yùn)行 daemon。 -
Statefuleset
能夠保證 Pod 的每個(gè)副本在整個(gè)生命周期中名稱是不變的,而其他Controller 不提供這個(gè)功能。當(dāng)某個(gè) Pod 發(fā)生故障需要刪除并重新啟動時(shí),Pod 的名稱會發(fā)生變化,同時(shí) StatefuleSet 會保證副本按照固定的順序啟動、更新或者刪除。 -
Job
用于運(yùn)行結(jié)束就刪除的應(yīng)用,而其他 Controller 中的 Pod 通常是長期持續(xù)運(yùn)行。
1.3 Controller 如何管理 Pod
注意: Controller 通過 label 關(guān)聯(lián)起來 Pods
2 Deployment
官方地址: Deployments | Kubernetes
一個(gè) Deployment 為 Pod 和 ReplicaSet提供聲明式的更新能力。
你負(fù)責(zé)描述 Deployment 中的 目標(biāo)狀態(tài),而 Deployment 控制器(Controller)以受控速率更改實(shí)際狀態(tài), 使其變?yōu)槠谕麪顟B(tài)。你可以定義 Deployment 以創(chuàng)建新的 ReplicaSet,或刪除現(xiàn)有 Deployment, 并通過新的 Deployment 收養(yǎng)其資源。
2.1 創(chuàng)建 deployment
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:1.19
? ? ? ? ports:
? ? ? ? ? - containerPort: 80
2.2 查看 deployment
# 部署應(yīng)用
$ kubectl apply -f app.yaml
# 查看 deployment
$ kubectl get deployment
# 查看 pod
$ kubectl get pod -o wide
# 查看 pod 詳情
$ kubectl describe pod pod-name
# 查看 deployment 詳細(xì)
$ kubectl describe deployment 名稱
# 查看 log
$ kubectl logs pod-name
# 進(jìn)入 Pod 容器終端, -c container-name 可以指定進(jìn)入哪個(gè)容器。
$ kubectl exec -it pod-name -- bash
# 輸出到文件
$ kubectl get deployment nginx-deployment -o yaml >> test.yaml
-
NAME
列出了名字空間中 Deployment 的名稱。 -
READY
顯示應(yīng)用程序的可用的“副本”數(shù)。顯示的模式是“就緒個(gè)數(shù)/期望個(gè)數(shù)”。 -
UP-TO-DATE
顯示為了達(dá)到期望狀態(tài)已經(jīng)更新的副本數(shù)。 -
AVAILABLE
顯示應(yīng)用可供用戶使用的副本數(shù)。 -
AGE
顯示應(yīng)用程序運(yùn)行的時(shí)間。
請注意期望副本數(shù)是根據(jù)
.spec.replicas
字段設(shè)置 3。
2.3 擴(kuò)縮 deployment
# 查詢副本
$ kubectl get rs|replicaset
# 伸縮擴(kuò)展副本
$ kubectl scale deployment nginx --replicas=5
2.4 回滾 deployment
說明:文章來源:http://www.zghlxwxcb.cn/news/detail-644573.html
僅當(dāng) Deployment Pod 模板(即
.spec.template
)發(fā)生改變時(shí),例如模板的標(biāo)簽或容器鏡像被更新, 才會觸發(fā) Deployment 上線。其他更新(如對 Deployment 執(zhí)行擴(kuò)縮容的操作)不會觸發(fā)上線動作。文章來源地址http://www.zghlxwxcb.cn/news/detail-644573.html
# 查看上線狀態(tài)
$ kubectl rollout status [deployment nginx-deployment | deployment/nginx]
# 查看歷史
$ kubectl rollout history deployment nginx-deployment
# 查看某次歷史的詳細(xì)信息
$ kubectl rollout history deployment/nginx-deployment --revision=2
# 回到上個(gè)版本
$ kubectl rollout undo deployment nginx-deployment
# 回到指定版本
$ kubectl rollout undo deployment nginx-deployment --to-revision=2
# 重新部署
$ kubectl rollout restart deployment nginx-deployment
# 暫停運(yùn)行,暫停后,對 deployment 的修改不會立刻生效,恢復(fù)后才應(yīng)用設(shè)置
$ kubectl rollout pause deployment ngixn-deployment
# 恢復(fù)
$ kubectl rollout resume deployment nginx-deployment
2.5 刪除 deployment
# 刪除 Deployment
$ kubectl delete deployment nginx-deployment
$ kubect delete -f nginx-deployment.yml
# 刪除默認(rèn)命名空間下全部資源
$ kubectl delete all --all
# 刪除指定命名空間的資源
$ kubectl delete all --all -n 命名空間的名稱
到了這里,關(guān)于【云原生】kubernetes控制器deployment的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!