Statefulset
重点:
Statefulset:
1、每一个pod都有自己的角色(可以选举、zookeeper选举等等)、为每一个pod提供唯一的(固定的)网络标识符。
2、每一个pod都有其自己的数据(etcd MySQL主从)
3、每一个pod分配独立的存储(PV和PVC)
Statefulset特点
1、分配网络标识符、方便pod查找
2、稳定的、持久的存储
3、有序的扩容(从前向后) 1 2 3
4、有序的缩容(从后向前) 3 2 1
headless services
无头服务
访问pod时候直接轮询返回pod的ip(如果MySQL使用的话、用来读、环节主库压力)
特点:绕过services 直接访问pod
好处:性能更强、不通过service
解决什么问题
存储问题
伸缩问题(给每一个pod分批固定存储)
验证
1、创建pod(副本数添加和减少)
2、类外单独在这个namespace创建一个pod、去访问Statefulset的无头服务、就会直接访问pod的ip
1、yaml文件
---
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myserver-myapp
namespace: myserver
spec:
replicas: 3 ###副本数量(顺序增加减少)
serviceName: "myserver-myapp-service"
selector:
matchLabels:
app: myserver-myapp-frontend
template:
metadata:
labels:
app: myserver-myapp-frontend
spec:
containers:
- name: myserver-myapp-frontend
image: nginx:1.20.2-alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: myserver-myapp-service
namespace: myserver
spec:
clusterIP: None
ports:
- name: http
port: 80
selector:
app: myserver-myapp-frontend
2、单独创建
单独创建一个同一名称空间下的服务
kubectl run net-test-1 --image=centos:7.9.2009 sleep 10000 -n myserver
kubectl exec -it bash net-test-1 -n myserver
访问
ping myserver-myapp-service
使用同一名称空间下的服务服务、会发现默认轮询规则、可以在service里面添加规则、化成一致性hash算法
疑问
问题???
像这种Headless无头服务 是不是适合集群内部的服务 不对外提供服务 同一名称空间下的服务之间的访问
答案:
1、像集群内部自己使用我们是使用的域名加端口来访问、
2、数据库还是要暴露出来呢、然后使用iptables规则做访问限制(或者阿里云安装组)