Controller之statefulset

@很多朋友反馈,博文排版不易读,从这篇文章开始慢慢学习一下markdown语法吧,啊哈哈。

1、前面说过了deployment,它是一种无状态的控制器类型,接下来聊聊有状态的控制器类型statefulset,在聊之前,先了解下无状态和有状态的概念。

(1)无状态特点:
      *一个deployment起的多pod是一模一样的,没有本地的持久化存储,共享相同的网络存储持久化数据。
      *多个pod启动时没有先后顺序。
      *不用考虑pod在那个node上运行。
      *可随意的伸缩。
(2)有状态特点:
      *无状态的特点,有状态的都需要考虑。
      *每个pod都是独立的,特定的启动顺序和唯一性
      *唯一的网络标识符和持久存储
      *启动有序,例如mysql主从,先启动主在启动从。

2、有状态控制器的特点

-无头service, 意思是yaml文件里的clusterIP:none 这个值为空
-kind类型不同
-每个pod都有唯一的域名标识和有序的主机名

3、示例通过statefulset部署一个有状态的应用。

$vim statefulset.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
    clusterIP: None
  selector:
    app: nginx

---

apiVersion: apps/v1beta1
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
这里看到创建以后,svc的cluster-ip是none,配置文件里定义的pod是3个,现在只能看见一个。

这里看见完整运行后,三个pod都正常running了,说明pod启动时有先后顺序的,有0-1-2这样的标识

statefulset和deployment的区别:statefulset的pod都有唯一的域名标识,域名生成规则如下:
      主机名.services名称.名称空间.svc.cluster.local 
示例:nginx-statefulset-0 这个pod的域名如下:
      nginx-statefulset-0.nginx.default.svc.cluster.local

kubenetes官网:https://kubernetes.io/zh/docs/concepts/workloads/controllers/statefulset/
kubenetes社区:https://www.kubernetes.org.cn/statefulset

原文地址:https://www.cnblogs.com/you-xiaoqing/p/14378461.html