关于kubernetes:kubernetes核心实战五-StatefulSets

30次阅读

共计 3098 个字符,预计需要花费 8 分钟才能阅读完成。

7、StatefulSets

StatefulSet 是用来治理有状态利用的工作负载 API 对象。

StatefulSet 用来治理 Deployment 和扩大一组 Pod,并且能为这些 Pod 提供序号和唯一性保障。

和 Deployment 雷同的是,StatefulSet 治理了基于雷同容器定义的一组 Pod。但和 Deployment 不同的是,StatefulSet 为它们的每个 Pod 保护了一个固定的 ID。这些 Pod 是基于雷同的申明来创立的,然而不能互相替换:无论怎么调度,每个 Pod 都有一个永恒不变的 ID。

StatefulSet 和其余控制器应用雷同的工作模式。你在 StatefulSet 对象 中定义你冀望的状态,而后 StatefulSet 的 控制器 就会通过各种更新来达到那种你想要的状态。

应用 StatefulSets

StatefulSets 对于须要满足以下一个或多个需要的应用程序很有价值:

稳固的、惟一的网络标识符。稳固的、长久的存储。有序的、优雅的部署和缩放。有序的、主动的滚动更新。在下面,稳固意味着 Pod 调度或重调度的整个过程是有持久性的。如果应用程序不须要任何稳固的标识符或有序的部署、删除或伸缩,则应该应用由一组无状态的正本控制器提供的工作负载来部署应用程序,比方 Deployment 或者 ReplicaSet 可能更实用于您的无状态利用部署须要。

限度

给定 Pod 的存储必须由 PersistentVolume 驱动 基于所申请的 storage class 来提供,或者由管理员事后提供。删除或者膨胀 StatefulSet 并不会删除它关联的存储卷。这样做是为了保障数据安全,它通常比主动革除 StatefulSet 所有相干的资源更有价值。StatefulSet 以后须要无头服务 来负责 Pod 的网络标识。您须要负责创立此服务。当删除 StatefulSets 时,StatefulSet 不提供任何终止 Pod 的保障。为了实现 StatefulSet 中的 Pod 能够有序和优雅的终止,能够在删除之前将 StatefulSet 缩放为 0。在默认 Pod 管理策略 (OrderedReady) 时应用 滚动更新,可能进入须要 人工干预 能力修复的损坏状态。

示例:
[root@k8s-master-node1 ~/yaml/test]# vim statefulsets.yaml
[root@k8s-master-node1 ~/yaml/test]# cat statefulsets.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-pvc-0
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-pvc-1
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-pvc-2
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
      volumes:
        - name: www
          persistentVolumeClaim:
            claimName: nginx-pvc-0
      volumes:
        - name: www
          persistentVolumeClaim:
            claimName: nginx-pvc-1
      volumes:
        - name: www
          persistentVolumeClaim:
            claimName: nginx-pvc-2

[root@k8s-master-node1 ~/yaml/test]#
创立 statefulsets
[root@k8s-master-node1 ~/yaml/test]# kubectl  apply -f statefulsets.yaml 
service/nginx created
statefulset.apps/web created
[root@k8s-master-node1 ~/yaml/test]#
查看 pod
[root@k8s-master-node1 ~/yaml/test]# kubectl  get pod
NAME                                     READY   STATUS    RESTARTS   AGE
ingress-demo-app-694bf5d965-8rh7f        1/1     Running   0          67m
ingress-demo-app-694bf5d965-swkpb        1/1     Running   0          67m
nfs-client-provisioner-dc5789f74-5bznq   1/1     Running   0          52m
web-0                                    1/1     Running   0          93s
web-1                                    1/1     Running   0          85s
web-2                                    1/1     Running   0          66s
[root@k8s-master-node1 ~/yaml/test]#
查看 statefulsets
[root@k8s-master-node1 ~/yaml/test]# kubectl  get statefulsets.apps -o wide
NAME   READY   AGE    CONTAINERS   IMAGES
web    3/3     113s   nginx        nginx
[root@k8s-master-node1 ~/yaml/test]#

留神:前提是解决 kubernetes 动态分配 pv,参考文档:https://cloud.tencent.com/dev…

https://blog.csdn.net/qq_3392…

https://my.oschina.net/u/3981543

https://www.zhihu.com/people/…

https://segmentfault.com/u/hp…

https://juejin.cn/user/331578…

https://space.bilibili.com/35…

https://cloud.tencent.com/dev…

知乎、CSDN、开源中国、思否、掘金、哔哩哔哩、腾讯云

本文应用 文章同步助手 同步

正文完
 0