
在 Kubernetes 中,Deployment 是一种控制器,用于声明和管理 Pod 和 ReplicaSet。Deployment 提供了声明式的更新机制,使得应用程序的部署、扩展和回滚变得更加容易。以下是关于 Deployment 部署管理的详细介绍。
Kubernetes 控制平面会自动使集群状态达到期望状态。
支持回滚到之前的版本,以应对更新失败的情况。
可以通过调整副本数量来扩展或缩减应用程序,确保在流量高峰期间有足够的资源处理请求。
以下是一个基本的 Deployment 配置示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: myapp
spec:
replicas: 3 # 指定期望的 Pod 副本数量
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: mycontainer
image: nginx:latest
ports:
- containerPort: 80
使用 kubectl apply 命令创建 Deployment:
kubectl apply -f my-deployment.yaml
查看当前命名空间下的所有 Deployment:
kubectl get deployments
获取特定 Deployment 的详细信息:
kubectl describe deployment my-deployment
查看 Deployment 相关的 ReplicaSet 和 Pod:
kubectl get rs -l app=myapp
kubectl get pods -l app=myapp
更新 Deployment 配置,例如更新容器镜像:
spec:
containers:
- name: mycontainer
image: nginx:1.19.6
然后应用更新:
kubectl apply -f my-deployment.yaml
Kubernetes 将执行滚动更新,逐步替换旧的 Pod。
查看 Deployment 的修订历史:
kubectl rollout history deployment my-deployment
回滚到之前的修订版本:
kubectl rollout undo deployment my-deployment --to-revision=2
扩展或缩减 Pod 副本数量:
kubectl scale deployment my-deployment --replicas=5
可以通过配置滚动更新策略,控制每次更新时的最大不可用 Pod 数量和最大可用 Pod 数量:
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
maxSurge:指定更新时最多可超过期望 Pod 数量的 Pod 数量(可以是绝对数值或百分比)。
可以使用 Deployment 与其他 Kubernetes 资源(如 Service、Ingress)配合,实施持续部署和 Canary 发布。
例如,使用两个 Deployment 分别管理稳定版本和 Canary 版本,通过调整 Service 的选择器实现流量的分流:
apiVersion: apps/v1
kind: Deployment
metadata:
name: stable-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: stable
template:
metadata:
labels:
app: myapp
version: stable
spec:
containers:
- name: mycontainer
image: nginx:stable
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: canary-deployment
spec:
replicas: 1
selector:
matchLabels:
app: myapp
version: canary
template:
metadata:
labels:
app: myapp
version: canary
spec:
containers:
- name: mycontainer
image: nginx:canary
---
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 80
type: LoadBalancer
通过调整 canary-deployment
的副本数量和 Service 的选择器标签,可以逐步将流量切换到新的版本。
查看 Deployment 更新状态和进度:
kubectl rollout status deployment my-deployment
查看 Pod 日志:
kubectl logs -l app=myapp
通过配置探针(如 livenessProbe 和 readinessProbe)监控容器的健康状态:
spec:
containers:
- name: mycontainer
image: nginx:latest
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
Deployment 是 Kubernetes 中用于管理和控制应用程序部署的重要资源。通过 Deployment,可以实现应用程序的声明式管理、自动化更新、扩展和回滚。结合滚动更新策略、Canary 发布和探针配置等高级功能,可以高效地管理复杂的应用程序部署,确保服务的高可用性和稳定性。