StatefulSet
- 1、有状态和无状态的区别
-
- [1.1 无状态](#1.1 无状态)
- [1.2 有状态](#1.2 有状态)
- 2、部署有状态应用
-
- [2.1 部署要求](#2.1 部署要求)
- [2.2 实战部署](#2.2 实战部署)
1、有状态和无状态的区别
1.1 无状态
- 认为pod都是一样的
- 随意进行伸缩和扩展
- 没有顺序要求
- 不用考虑在哪一个node运行
1.2 有状态
- 无状态的因素都需要考虑到
- 让每个pod独立,保持Pod启动顺序和唯一性。如唯一的网络标识符或者持久存储。有序状态,如mysql主从。
2、部署有状态应用
2.1 部署要求
- 首先需要创建一个无头service,即clusterIP: None
- deployment和statefulSet的区别是:有身份的(唯一标识)
- 每一个pod有唯一的主机名。
- 每一个pod有唯一域名。域名规则:主机名称.service名称.名称空间.svc.cluster.local
2.2 实战部署
bash
[root@master controlleryaml]# vim sts.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None ##首先创建的无头service
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet ##创建带有statefulSet的有状态控制器
metadata:
name: nginx-statefulset
namespace: default
spec:
serviceName: nginx
replicas: 3 # 3个会顺序启动
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
[root@master controlleryaml]# kubectl apply -f sts.yaml
[root@master controlleryaml]# kubectl get pods #查看pod 的唯一标识
NAME READY STATUS RESTARTS AGE
nginx-statefulset-0 1/1 Running 0 70s
nginx-statefulset-1 1/1 Running 0 67s
nginx-statefulset-2 1/1 Running 0 51s
[root@master controlleryaml]# kubectl get svc # 查看service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 61d
nginx ClusterIP None <none> 80/TCP 92s # None的无头service