1、无状态和有状态
(1)无状态
- 认为Pod都是一样的
- 没有顺序要求
- 不用考虑在哪个node上运行
- 随意进行伸缩和扩展
(2)有状态
- 上面因素都要考虑到
- 让每个Pod都独立的,保持Pod启动顺序和唯一性
- 唯一的网络标识符,持久存储
- 有序,比如mysql主从
2、使用StatefulSet(有状态)方式部署应用
- 无头service :<ClusterIP: none>
//无头service
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
//有状态应用
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx-statefulset
namespace: default
spec:
serviceName: nginx
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
//执行yaml文件部署有状态应用
kubectl apply -f sts.yaml
//查看创建成功的三个pod
kubectl get pods
//查看无头的service
kubectl get svc
3、deployment和statefulset区别
statefulset 有身份的(唯一标识的)
- 根据主机名 + 按照一定规则生成域名
- 每个pod有唯一主机名
- 唯一域名(格式:主机名称.service名称.命名空间.svc.cluster.local)
nginx-statefulset-0.nginx.default.svc.cluster.local