容器编排技术 -- Kubernetes StatefulSets

  • 1 使用StatefulSets
  • 2 限制
  • 3 组件
  • 4 部署和扩展
    • 4.1 Pod管理

      • 4.1.1 OrderedReady Pod Management
      • 4.1.2 Parallel Pod Management
  • 5 Update Strategies
    • 5.1 删除
    • 5.2 滚动更新
      • 5.2.1 Partitions

StatefulSets(有状态系统服务设计)在Kubernetes 1.7中还是beta特性,同时StatefulSets是1.4 版本中PetSets的替代品。PetSets的用户参考1.5 升级指南 。

使用StatefulSets

在具有以下特点时使用StatefulSets:

  • 稳定性,唯一的网络标识符。
  • 稳定性,持久化存储。
  • 有序的部署和扩展。
  • 有序的删除和终止。
  • 有序的自动滚动更新。

Pod调度运行时,如果应用不需要任何稳定的标示、有序的部署、删除和扩展,则应该使用一组无状态副本的控制器来部署应用,例如 Deployment 或 ReplicaSet更适合无状态服务需求。

限制

  • StatefulSet还是beta特性,在Kubernetes 1.5版本之前任何版本都不可以使用。
  • 与所有alpha / beta 特性的资源一样,可以通过apiserver配置-runtime-config来禁用StatefulSet。
  • Pod的存储,必须基于请求storage class的PersistentVolume Provisioner或由管理员预先配置来提供。
  • 基于数据安全性设计,删除或缩放StatefulSet将不会删除与StatefulSet关联的Volume。
  • StatefulSets需要Headless Service负责Pods的网络的一致性(必须创建此服务)。

组件

示例:

  • name为nginx的Headless Service用于控制网络域。
  • StatefulSet(name为web)有一个Spec,在一个Pod中启动具有3个副本的nginx容器。
  • volumeClaimTemplates使用PersistentVolumes供应商的PersistentVolume来提供稳定的存储。
apiVersion: v1
kind: Service
metadata:name: nginxlabels:app: nginx
spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginx
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:name: web
spec:serviceName: "nginx"replicas: 3template:metadata:labels:app: nginxspec:terminationGracePeriodSeconds: 10containers:- name: nginximage: gcr.io/google_containers/nginx-slim:0.8ports:- containerPort: 80name: webvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: wwwspec:accessModes: [ "ReadWriteOnce" ]storageClassName: my-storage-classresources:requests:storage: 1Gi

部署和扩展

  • 对于具有N个副本的StatefulSet,当部署Pod时,将会顺序从{0..N-1}开始创建。
  • Pods被删除时,会从{N-1..0}的相反顺序终止。
  • 在将缩放操作应用于Pod之前,它的所有前辈必须运行和就绪。
  • 对Pod执行扩展操作时,前面的Pod必须都处于Running和Ready状态。
  • 在Pod终止之前,所有successors都须完全关闭。

不要将StatefulSet的pod.Spec.TerminationGracePeriodSeconds值设置为0,这样设置不安全,建议不要这么使用。更多说明,请参考force deleting StatefulSet Pods.

在上面示例中,会按顺序部署三个pod(name: web-0、web-1、web-2)。web-0在Running and Ready状态后开始部署web-1,web-1在Running and Ready状态后部署web-2,期间如果web-0运行失败,web-2是不会被运行,直到web-0重新运行,web-1、web-2才会按顺序进行运行。

如果用户通过StatefulSet来扩展修改部署pod副本数,比如修改replicas=1,那么web-2首先被终止。在web-2完全关闭和删除之前,web-1是不会被终止。如果在web-2被终止和完全关闭后,但web-1还没有被终止之前,此时web-0运行出错了,那么直到web-0再次变为Running and Ready状态之后,web-1才会被终止。

Pod管理

在Kubernetes 1.7及更高版本中,StatefulSet放宽了排序规则,同时通过.spec.podManagementPolicy字段保留其uniqueness和identity guarantees

OrderedReady Pod Management

OrderedReady Pod Management 是StatefulSets的默认行为。它实现了上述 “部署/扩展” 行为。

Parallel Pod Management

Parallel Pod Management告诉StatefulSet控制器同时启动或终止所有Pod。

Update Strategies

在Kubernetes 1.7及更高版本中,StatefulSet的.spec.updateStrategy字段允许配置和禁用StatefulSet中Pods的containers、labels、resource request/limits和annotations的滚动更新。

删除

当spec.updateStrategy未指定时的默认策略,OnDelete更新策略实现了传统(1.6和以前)的行为。当StatefulSet .spec.updateStrategy.type设置为OnDelete,StatefulSet控制器将不会自动更新StatefulSet中的Pod,用户必须手动删除Pods以使控制器创建新的Pod。

滚动更新

RollingUpdate更新策略实现了自动化,使StatefulSet中的Pod滚动更新。当StatefulSet .spec.updateStrategy.type设置为RollingUpdate,StatefulSet控制器将删除并重新创建StatefulSet中的每个Pod。它将以与Pod终止相同的顺序进行(从最大的序数到最小的顺序)来更新每个Pod。

Partitions

通过指定 .spec.updateStrategy.rollingUpdate.partition来分割RollingUpdate更新策略。如果指定了partition,则当更新StatefulSet时,将更新具有大于或等于partition的序数的所有Pods .spec.template,小于partition的序数的所有Pod将不会被更新。如果一个StatefulSet的.spec.updateStrategy.rollingUpdate.partition大于它.spec.replicas,它的更新.spec.template将不会被传Pods。在通常数情况下,不需要使用partition,但如果需要进行更新,推出金丝雀或执行分阶段推出,可以使用partition。

了解更多 StatefulSet: Kubernetes 中对有状态应用的运行和伸缩

容器编排技术 -- Kubernetes StatefulSets相关推荐

  1. 容器编排技术 -- Kubernetes StatefulSet基本使用

    容器编排技术 -- Kubernetes StatefulSet基本使用 1 Objectives 2 Before you begin 2.1 顺序创建 Pod 3 Pods in a Statef ...

  2. 容器编排技术 -- Kubernetes kubectl get 命令详解

    容器编排技术 -- Kubernetes kubectl get 命令详解 1 kubectl get 2 语法 3 示例 4 Flags kubectl get 获取列出一个或多个资源的信息. 可以 ...

  3. 容器编排技术 -- Kubernetes kubectl annotate 命令详解

    容器编排技术 -- Kubernetes kubectl annotate 命令详解 1 kubectl annotate 2 有效资源类型包括: 3 语法 4 示例 5 Flags kubectl ...

  4. 容器编排技术 -- Kubernetes kubectl 概述

    容器编排技术 -- Kubernetes kubectl 概述 1 语法 2 Operations 3 Resource types 4 输出选项 Output options 4.1 格式化输出 F ...

  5. 容器编排技术 -- Kubernetes 示例:使用 Stateful Sets 部署 Cassandra

    容器编排技术 -- Kubernetes 示例:使用 Stateful Sets 部署 Cassandra 1 Objectives 2 Before you begin 2.1 Minikube 附 ...

  6. 容器编排技术 -- Kubernetes Replica Sets

    容器编排技术 -- Kubernetes Replica Sets 1 如何使用ReplicaSet 2 何时使用ReplicaSet 3 示例 4 ReplicaSet as an Horizont ...

  7. 容器编排技术 -- kubernetes 通过环境变量向容器暴露 Pod 信息

    容器编排技术 -- kubernetes 通过环境变量向容器暴露 Pod 信息 1 Before you begin 2 Downward API 3 使用 Pod 字段作为环境变量的值 4 使用容器 ...

  8. 容器编排技术 -- Kubernetes Nodes

    容器编排技术 -- Kubernetes Nodes 1 Node是什么? 2 Node Status 2.1 Addresses 2.2 Phase 2.3 Condition 2.4 Capaci ...

  9. 容器编排技术 -- Kubernetes kubectl rollout resume 命令详解

    容器编排技术 -- Kubernetes kubectl rollout resume 命令详解 1 kubectl rollout resume 2 语法 3 示例 4 Flags kubectl ...

最新文章

  1. iMeta:西农韦革宏团队焦硕等-土壤真菌驱动细菌群落的构建(全文翻译/PPT/视频解读)...
  2. 深度学习核心技术精讲100篇(十九)--GBDT(梯度提升树) 和 Resnet (残差网络)的原理
  3. 那些年,杜蕾斯紧跟热点的骚包文案有哪些?
  4. java请求接口示例_用示例解释Java接口
  5. 经济下行,我们该如何避免焦虑?
  6. s3c6410_user_manual_rev1.1
  7. 大数据分析应具备哪些属性
  8. 【vue】---动态路由传值
  9. [算法竞赛入门]WERTYU
  10. 【燕秀工具箱】模具辅助下载安装使用手册
  11. 上证50基金有哪些_【宽基系列】上证50指数基金买哪个?
  12. Matlab中的c2d函数离散化
  13. 广州医保个账支付接口开发 微信医保支付
  14. 汇编 SHL指令和SHR指令
  15. calendar java 线程安全_SimpleDateFormat,Calendar 线程非安全的问题
  16. Python+阿里云人脸信息脱敏 实现大量照片批量给人脸打马赛克并保存至本地
  17. 统计与运筹优化(6)-决策分析
  18. 【人工智能行业大师访谈5】吴恩达采访林元庆
  19. 【灰色系统】—— 灰色系统的基本概念
  20. Eighth season eleventh episode,Rachel became very horny??????

热门文章

  1. URL重写步骤 【有用】
  2. 字体大小 js 控制
  3. Samba 和Shell Script 的应用
  4. 绕过图片防盗链的方法
  5. Joomla!程序中加载JS和CSS的方法
  6. tomcat调优方案
  7. LeetCode 561. Array Partition I
  8. LeetCode 344. Reverse String
  9. mysql权限相关操作
  10. 自动增长 mysql