K8s:Statefulset

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规则做访问限制(或者阿里云安装组)
posted @ 2024-07-22 17:28  姬高波  阅读(27)  评论(0)    收藏  举报