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