StatefulSet

  1. 有状态应用副本集

无状态的, 更关注的是群体

有状态的, 更关注的是个体

有状态应用集的特点:

  1. 稳定且需要唯一的网络标识符;
  2. 稳定且持久的存储;
  3. 要求有序, 平滑的部署和扩展;
  4. 要求有序, 平滑的删除和终止;
  5. 有序的滚动更新;

需要有三个组件组成:

  1. headless service
  2. StatefulSet 控制器
  3. volumeClaimTemplate 存储卷申请模板

简单测试 使用 StatefulSet

创建基础的PV

  1. [root@master configmap]# cat ../volume/pv-demo.yaml
  2. apiVersion: v1
  3. kind: PersistentVolume
  4. metadata:
  5. name: pv001
  6. labels:
  7. name: pv001
  8. spec:
  9. nfs:
  10. path: /data/volumes/v1
  11. server: 10.0.20.20
  12. accessModes: ["ReadWriteMany", "ReadWriteOnce"]
  13. capacity:
  14. storage: 5Gi
  15. ---
  16. apiVersion: v1
  17. kind: PersistentVolume
  18. metadata:
  19. name: pv002
  20. labels:
  21. name: pv002
  22. spec:
  23. nfs:
  24. path: /data/volumes/v2
  25. server: 10.0.20.20
  26. accessModes: ["ReadWriteOnce"]
  27. capacity:
  28. storage: 5Gi
  29. ---
  30. apiVersion: v1
  31. kind: PersistentVolume
  32. metadata:
  33. name: pv003
  34. labels:
  35. name: pv003
  36. spec:
  37. nfs:
  38. path: /data/volumes/v3
  39. server: 10.0.20.20
  40. accessModes: ["ReadWriteMany", "ReadWriteOnce"]
  41. capacity:
  42. storage: 5Gi
  43. ---
  44. apiVersion: v1
  45. kind: PersistentVolume
  46. metadata:
  47. name: pv004
  48. labels:
  49. name: pv004
  50. spec:
  51. nfs:
  52. path: /data/volumes/v4
  53. server: 10.0.20.20
  54. accessModes: ["ReadWriteMany", "ReadWriteOnce"]
  55. capacity:
  56. storage: 10Gi
  57. ---
  58. apiVersion: v1
  59. kind: PersistentVolume
  60. metadata:
  61. name: pv005
  62. labels:
  63. name: pv005
  64. spec:
  65. nfs:
  66. path: /data/volumes/v5
  67. server: 10.0.20.20
  68. accessModes: ["ReadWriteMany", "ReadWriteOnce"]
  69. capacity:
  70. storage: 10Gi
  71. [root@master volume]# kubectl apply -f pv-demo.yaml
  72. persistentvolume/pv001 created
  73. persistentvolume/pv002 created
  74. persistentvolume/pv003 created
  75. persistentvolume/pv004 created
  76. persistentvolume/pv005 created
  77. [root@master volume]# kubectl get pv -o wide
  78. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
  79. pv001 5Gi RWO,RWX Retain Available 5s Filesystem
  80. pv002 5Gi RWO Retain Available 5s Filesystem
  81. pv003 5Gi RWO,RWX Retain Available 5s Filesystem
  82. pv004 10Gi RWO,RWX Retain Available 5s Filesystem
  83. pv005 10Gi RWO,RWX Retain Available 5s Filesystem

StatefulSet 清单

  1. [root@master manifests]# cat statefulset-demo.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: myapp-svc
  6. namespace: default
  7. labels:
  8. app: myapp # service 名称
  9. spec:
  10. ports:
  11. - port: 80
  12. name: web
  13. clusterIP: None # 配置headless service
  14. selector:
  15. app: myapp-pod # 匹配Pod 标签
  16. ---
  17. apiVersion: apps/v1
  18. kind: StatefulSet
  19. metadata:
  20. name: myapp
  21. spec:
  22. serviceName: myapp # 名称
  23. replicas: 3 # 三个副本
  24. selector:
  25. matchLabels:
  26. app: myapp-pod # 匹配Pod
  27. template:
  28. metadata:
  29. labels:
  30. app: myapp-pod
  31. spec:
  32. containers:
  33. - name: myapp
  34. image: ikubernetes/myapp:v1
  35. ports:
  36. - containerPort: 80
  37. name: web
  38. volumeMounts:
  39. - name: myappdata
  40. mountPath: /usr/shar/nginx/html
  41. volumeClaimTemplates:
  42. - metadata:
  43. name: myappdata # pvc名称
  44. spec:
  45. accessModes: ["ReadWriteOnce"] # 权限
  46. resources:
  47. requests:
  48. storage: 5Gi # pv 大小

创建

  1. [root@master manifests]# kubectl apply -f statefulset-demo.yaml
  2. service/myapp-svc unchanged
  3. statefulset.apps/myapp created
  4. [root@master manifests]# kubectl get sts
  5. NAME READY AGE
  6. myapp 3/3 5s
  7. [root@master manifests]# kubectl get pods
  8. NAME READY STATUS RESTARTS AGE
  9. myapp-0 1/1 Running 0 92s
  10. myapp-1 1/1 Running 0 91s
  11. myapp-2 1/1 Running 0 32s

StatefulSet 会自动创建pvc, 然后去绑定对应符合要求的PV

  1. [root@master manifests]# kubectl get pvc
  2. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  3. myappdata-myapp-0 Bound pv002 5Gi RWO 2m42s
  4. myappdata-myapp-1 Bound pv003 5Gi RWO,RWX 66s
  5. myappdata-myapp-2 Bound pv001 5Gi RWO,RWX 7s
  6. [root@master manifests]# kubectl get pv
  7. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
  8. pv001 5Gi RWO,RWX Retain Bound default/myappdata-myapp-2 20m
  9. pv002 5Gi RWO Retain Bound default/myappdata-myapp-0 20m
  10. pv003 5Gi RWO,RWX Retain Bound default/myappdata-myapp-1 20m
  11. pv004 10Gi RWO,RWX Retain Available 20m
  12. pv005 10Gi RWO,RWX Retain Available 20m

最后, 声明式创建的, 可以使用 kubectl patch 命令 或者 kubectl set image 等命令对StatefulSet进行修改.

09-kubernetes StatefulSet的更多相关文章

  1. kubernetes statefulset kafka 部署后, 外部访问超时问题解决

    k8s 内部的kafka要映射到外网,直接把 kafka 通过 expose 把pod 映射成服务,使用nodeport 连接,出现超时问题, 解决思路: 1.  查看zk中,kafka的注册信息,P ...

  2. (十一)Kubernetes StatefulSet控制器

    StatefulSet介绍 前面使用Deployment创建的Pod是无状态的,当挂载了volume之后,如果该Pod挂了,Replication Controller会再启动一个Pod来保证可用性, ...

  3. Kubernetes StatefulSet

    StatefulSet 简介 在Kubernetes中,Pod的管理对象RC.Deployment.DaemonSet和Job都是面向无状态的服务.但现实中有很多服务是有状态的,特别是一些复杂的中间件 ...

  4. Kubernetes 学习14 kubernetes statefulset

    一.概述 1.在应用程序中我们有两类,一种是有状态一种是无状态.此前一直演示的是deployment管理的应用,比如nginx或者我们自己定义的myapp它们都属于无状态应用. 2.而对于有状态应用, ...

  5. 09 . Kubernetes之pv、pvc及使用nfs网络存储应用

    PV,PVC概述 PV的全称是: PersistentVolume (持久化卷),是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如Ceph.G ...

  6. kubernetes StatefulSet控制器

    想学习更多相关知识请看博主的个人博客地址:https://blog.huli.com/ https://blog.huli.com/ 在Kubernetes系统中,Pod的管理对象RC.Deploym ...

  7. 在Kubernetes上运行有状态应用:从StatefulSet到Operator

    一开始Kubernetes只是被设计用来运行无状态应用,直到在1.5版本中才添加了StatefulSet控制器用于支持有状态应用,但它直到1.9版本才正式可用.本文将介绍有状态和无状态应用,一个通过K ...

  8. Kubernetes学习之路目录

    Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...

  9. 15分钟在笔记本上搭建 Kubernetes + Istio开发环境

    11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术.很多同学来问如何上手 Kubernetes和Istio 服务网格开发.本文将帮助你利用Docker CE桌面版,15分钟 ...

  10. Kubernetes 系列(八):搭建EFK日志收集系统

    Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案. Elasticsearch 是一个 ...

随机推荐

  1. (24)ASP.NET Core EF查询(查询的工作原理、跟踪与非跟踪查询)

    1.查询生命周期 在进入正题时候,我们先来了解EF Core查询的生命周期. 1.1LINQ查询会由Entity Framework Core处理并生成给数据库提供程序可处理的表示形式(说白了就是生成 ...

  2. [Neo4j]Conda虚拟环境中安装python-igraph

    neo4j算法需要用到python-igraph包,但试过很多方法,都失败了 pip install python-igraph 安装失败, 提示C core of igraph 没有安装. 在con ...

  3. Pandas 转换连接

    # 导入相关库 import numpy as np import pandas as pd 拼接 有两个 DataFrame,都存储了用户的一些信息,现在要拼接起来,组成一个 DataFrame. ...

  4. Asp.net Core 系列之--3.领域、仓储、服务简单实现

    ChuanGoing 2019-11-11  距离上篇近两个月时间,一方面时因为其他事情耽搁,另一方面也是之前准备不足,关于领域驱动有几个地方没有想通透,也就没有继续码字.目前网络包括园子里大多领域驱 ...

  5. javascript iframe跳转问题

    javascript iframe跳转问题如果在iframe里面有要点击跳转最外层的连接 要只能用<pre> <div onclick="parent.location.h ...

  6. Go组件学习——Web框架Gin

    以前学Java的时候,和Spring全家桶打好关系就行了,从Spring.Spring MVC到SpringBoot,一脉相承. 对于一个Web项目,使用Spring MVC,就可以基于MVC的思想开 ...

  7. Go语言Hello world(GOPATH和Go Module版)

    本文是「vangoleo的Go语言学习笔记」系列文章之一. 官网: http://www.vangoleo.com/go/go-hello-world-02/ 往期回顾: Go语言入门-你好,Go语言 ...

  8. js的split()和join()的用法

    split() 方法用于把一个字符串分割成字符串数组.split[splɪt]:vt. 分离:使分离:劈开:离开:分解 stringObject.split(separator,howmany) se ...

  9. MySQL数据库的10大经典错误案例

    学习任何一门技术的同时,其实就是自我修炼的过程.沉下心,尝试去拥抱数据的世界! 案例一 Too many connections (连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原: 解决 ...

  10. 领扣(LeetCode)删除排序数组中的重复项 个人题解

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...