3.9 StatefulSet有状态应用部署:MySQL、Redis等数据库容器化实战
引言
StatefulSet是Kubernetes中用于管理有状态应用的控制器。与Deployment不同,StatefulSet为每个Pod提供稳定的网络标识和持久化存储。本文将详细介绍StatefulSet的使用方法,并通过MySQL、Redis等数据库的实战案例展示如何部署有状态应用。
一、StatefulSet概述
1.1 StatefulSet的特点
- 稳定的网络标识
- 有序的部署和扩展
- 有序的删除和终止
- 有序的滚动更新
- 持久化存储
1.2 StatefulSet vs Deployment
| 特性 | Deployment | StatefulSet |
|---|---|---|
| 网络标识 | 随机 | 稳定 |
| 存储 | 共享 | 独立 |
| 启动顺序 | 并行 | 有序 |
| 适用场景 | 无状态 | 有状态 |
二、StatefulSet定义
2.1 基本StatefulSet
apiVersion:apps/v1kind:StatefulSetmetadata:name:webspec:serviceName:"web"replicas:3selector:matchLabels:app:webtemplate:metadata:labels:app:webspec:containers:-name:nginximage:nginx:latestvolumeMounts:-name:wwwmountPath:/usr/share/nginx/htmlvolumeClaimTemplates:-metadata:name:wwwspec:accessModes:["ReadWriteOnce"]resources:requests:storage:1Gi2.2 网络标识
StatefulSet创建的Pod有稳定的网络标识:
- web-0
- web-1
- web-2
三、MySQL部署
3.1 MySQL StatefulSet
apiVersion:v1kind:Servicemetadata:name:mysqllabels:app:mysqlspec: