K8S 滚动升级与持久化实战案例
假设我们有一个名为webapp
的Deployment,它运行着一个Web应用程序,并且当前正在使用版本v1的镜像。现在,我们希望将应用程序升级到v2版本,而不中断服务。以下是一个简化的滚动升级步骤:
首先,我们编辑webapp
的Deployment配置文件,将镜像版本从v1更新到v2。
yaml
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: webapp | |
spec: | |
replicas: 3 | |
selector: | |
matchLabels: | |
app: webapp | |
template: | |
metadata: | |
labels: | |
app: webapp | |
spec: | |
containers: | |
- name: webapp-container | |
image: webapp:v2 # 更新镜像版本为v2 | |
ports: | |
- containerPort: 8080 |
保存并应用更改到Kubernetes集群。
bash
kubectl apply -f webapp-deployment.yaml |
使用kubectl
命令监控Deployment的状态和滚动升级进度。
bash
kubectl get deployment webapp | |
kubectl rollout status deployment webapp |
使用以下命令观察Pod的替换过程:
bash
kubectl get pods -l app=webapp -w |
这个命令将以实时方式显示与webapp
标签匹配的Pod的状态。您可以看到旧的Pod被终止,而新的Pod被创建并启动。
一旦滚动升级完成,验证应用程序的新功能是否正常工作。
现在,假设我们的webapp
需要持久化存储来保存用户上传的文件。我们可以使用Kubernetes的PersistentVolume
(PV)和PersistentVolumeClaim
(PVC)来实现。
首先,我们创建一个PV,指定存储的大小和访问模式。
yaml
apiVersion: v1 | |
kind: PersistentVolume | |
metadata: | |
name: webapp-pv | |
spec: | |
capacity: | |
storage: 5Gi | |
volumeMode: Filesystem | |
accessModes: | |
- ReadWriteOnce | |
persistentVolumeReclaimPolicy: Retain | |
storageClassName: standard | |
nfs: | |
path: /path/to/nfs/share | |
server: nfs-server-ip |
接下来,我们创建一个PVC,以便webapp
Deployment可以请求这个PV。
yaml
apiVersion: v1 | |
kind: PersistentVolumeClaim | |
metadata: | |
name: webapp-pvc | |
spec: | |
storageClassName: standard | |
accessModes: | |
- ReadWriteOnce | |
resources: | |
requests: | |
storage: 3Gi |
现在,我们在webapp
的Deployment配置文件中添加一个新的卷和卷挂载,以使用PVC。
yaml
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: webapp | |
spec: | |
replicas: 3 | |
selector: | |
matchLabels: | |
app: webapp | |
template: | |
metadata: | |
labels: | |
app: webapp | |
spec: | |
containers: | |
- name: webapp-container | |
image: webapp:v2 | |
ports: | |
- containerPort: 8080 | |
volumeMounts: | |
- name: webapp-storage | |
mountPath: /uploads | |
volumes: | |
- name: webapp-storage | |
persistentVolumeClaim: | |
claimName: webapp-pvc |
保存并应用更改到Kubernetes集群。
bash
kubectl apply -f webapp-deployment-with-pvc.yaml |
一旦Deployment更新完成,验证应用程序是否能够正常访问和使用持久化存储。
这些步骤提供了一个简化的K8S滚动升级和持久化的实战案例。在实际生产环境中,您可能需要考虑更多的细节和最佳实践,例如使用金丝雀发布策略、蓝绿部署、回滚策略、数据备份和恢复等。