以下是一个典型的StatefulSet的示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
replicas: 3
serviceName: "nginx"
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "my-storage-class"
resources:
requests:
storage: 1Gi
在这个示例中:
- replicas: 3 指定了希望运行的Pod副本数为3。
- serviceName: "nginx" 定义了用于Headless Service的名称,该服务负责为每个Pod创建DNS记录。
- selector 部分定义了用于选择Pod的标签。
- template 部分定义了要创建的Pod的模板,包括容器的镜像、标签等信息。
- volumeClaimTemplates 部分定义了每个Pod使用的动态存储卷声明(Persistent Volume Claim),以及相关的存储资源和访问模式。
StatefulSet相对于其他控制器的主要特点包括:
1. 稳定标识: StatefulSet创建的Pod具有稳定的网络标识和存储标识。每个Pod都有一个唯一的标识,通常使用序数(例如,pod-0、pod-1)。
2. 有序部署: StatefulSet按照Pod的序数顺序部署。当新的Pod需要创建时,它会等待前一个Pod成功运行并稳定后再启动。
3. 有状态存储: StatefulSet支持使用持久卷(Persistent Volume)和持久卷声明(Persistent Volume Claim)来实现有状态的存储。每个Pod都可以有自己独立的存储,且存储可以保留和迁移。
4. Headless Service: StatefulSet通常配合一个Headless Service使用,该服务用于为每个Pod创建DNS记录。这样,每个Pod都可以通过其DNS名称进行访问,例如web-0.nginx。
5. 删除保护: StatefulSet提供了删除保护,确保删除Pod时会依次删除,以避免并发删除可能导致的数据丢失。
StatefulSet适用于部署需要稳定标识、有状态存储和有序部署的应用程序,例如数据库、消息队列等。
转载请注明出处:http://www.zyzy.cn/article/detail/9723/Kubernetes