k8s之deployment解釋以及定義
Deployment使用詳解
Deployment概述
Deployment是Kubernetes中一種聲明式控制器,用于管理和維護一組Pod副本。它主要用于管理無狀態應用的生命周期,通過聲明Deployment,可以自動化地控制應用的副本數量、進行無停機更新、擴展、縮容等。
Deployment的主要功能
1、定義期望狀態:指定希望部署的應用配置和數量。
2、管理副本:確保應用副本數量與配置的期望值一致。
3、無停機更新:支持滾動更新,逐步更新Pod,更新過程中不會中斷服務。
4、版本回滾:可以回滾到之前的某個版本,以應對更新失敗的情況。
擴展性:支持自動擴容和縮容,通過HPA(Horizontal Pod Autoscaler)等資源進行彈性管理。
Deployment與其他Kubernetes組件的關系
1、Pod:Kubernetes中最基本的部署單元,表示一個或多個容器的集合。Pod共享存儲、網絡和上下文。
2、ReplicaSet:確保指定數量的Pod實例在任何時候都在運行。它通過監控Pod的狀態來管理Pod的創建和刪除。如果某個Pod異常終止,ReplicaSet會創建一個新的Pod來替代它。
3、Deployment:更高級別的抽象,管理ReplicaSet的創建和更新。Deployment允許用戶聲明希望運行的應用狀態,包括Pod的模板、副本數量和更新策略。
4、Service: Deployment創建的Pod可以通過標簽與Service進行關聯。當創建一個Service時,可以指定一個或多個標簽選擇器來匹配Pod。這些匹配的Pod就會被Service所管理,并通過Service提供的虛擬IP地址和端口號進行訪問。Service為Deployment創建的Pod提供了一個穩定的網絡訪問入口。這樣,外部客戶端或集群內的其他Pod就可以通過訪問Service來間接訪問到Pod提供的服務。Service還提供了負載均衡功能,可以將請求分發到多個Pod上,以實現高可用性和可擴展性。這對于提高應用的性能和可靠性具有重要意義。
Deployment的基礎管理
創建Deployment
命令行直接創建:kubectl create deployment <deployment-name> --image=<container-image>。例如,kubectl create deploy mynginx --image=nginx:1.25。
基于YAML文件創建:編寫YAML文件后,使用kubectl apply -f <filename>.yaml命令創建。例如,kubectl apply -f my-deployment.yaml。
查看Deployment
查看Deployment信息:kubectl get deploy -n <namespace>。例如,kubectl get deploy nginx。
查看某個Deployment的詳細信息:kubectl get deploy <deployment-name> -o wide或kubectl describe deploy <deployment-name>。
刪除Deployment
命令行刪除:kubectl delete deploy <deploy-name>。例如,kubectl delete deploy mynginx。
基于資源清單刪除:kubectl delete -f <filename>.yaml。
Deployment的更新策略
Kubernetes提供了靈活的Deployment更新策略,方便實現無停機更新、藍綠部署等應用更新需求。strategy字段定義了Deployment的更新策略。Kubernetes支持RollingUpdate和Recreate兩種更新策略:
RollingUpdate:Deployment的默認更新策略。更新時會逐步創建新的Pod副本,替換舊的Pod,確保應用保持在線狀態。
可以在spec字段下配置RollingUpdate的詳細參數,如maxUnavailable(更新過程中允許的最大不可用Pod數量)和maxSurge(更新過程中允許的最大新建Pod數量)。
Recreate:刪除所有現有Pod并重新創建它們,以實現更新。這種策略在更新過程中會導致服務中斷。
完整的例子

然后,可以使用kubectl get deployments命令查看Deployment的狀態。
Deployment是Kubernetes中用于管理和維護Pod副本的重要組件。通過合理配置YAML文件和使用kubectl命令,可以輕松實現應用的部署、更新和擴展。

浙公網安備 33010602011771號