k8sStatefulSet控制器
一、StatefulSet概述
应用程序存在有状态和无状态两种类别,因为无状态类应用的pod资源可按需增加、减少或重构,而不会对由其提供的服务产生除了并发相应能力之外的其他严重影响。pod资源的常用控制器中,deployment、replicaset和daemonset等常用于管理无状态应用。但实际情况是,应用本身就是分布式的集群,各应用实例彼此之间存在着关联关系,甚至是次序、角色方面的相关性,其中的每个实例都有其自身的独特性而无法轻易由其他实例所取代。
1、stateful应用和stateless应用
应用程序与用户、设备、其他应用程序或外部组件进行通信时,根据其是否需要记录前一次或多次通信中的相关信息以作为下一次通信的分类标准,可以将那些需要记录信息的应用程序称为有状态(stateful)应用,而无须记录的则称为无状态(stateless)应用。
状态是进程的时间属性。无状态意味着一个进程不必跟踪过去的交互操作,本质上可以说它是一个纯粹的功能性行为。相应地,有状态则意味着进程存储了以前交互过程的记录,并且可以基于它对新的请求进行响应。至于状态信息被保存在内存中。
存储是表述持久保存数据的方法,现今通常是指机械硬盘或ssd设备。若进程仅需操作内存中的数据,则表示其无须进行磁盘I/O操作;如果产生了I/O操作,则通常意味着数据的只读访问或读写访问行为。
2、statefulset的特性
statefulset简称sts,是pod资源控制器的一种实现,用于部署和扩展有状态应用的pod资源,确保他们的运行顺序及每个pod资源的唯一性。其与ReplicaSet控制器不同的是,虽然所有pod对象都基于同一个spec配置所创建,但statefulset需要为每个pod维持一个唯一且固定的标识符,必要时还要为其创建专用的存储卷。StatefulSet主要适用于那些依赖于下列类型资源的应用程序:
稳定且唯一的网络标识符
稳定且持久的存储
有序、优雅地部署和扩展
有序、优雅地删除和终止
有序而自动地滚动更新。
一般来说,一个典型、完整可用的StatefulSet通常由三个组件构成:Headless Service、StatefulSet和volumeClaimTemplate。其中,Headless Service用于为pod资源标识符生成可解析的DNS资源记录,StatefulSet用于管控pod资源,volumeClaimTemplate则基于静态或动态的PV供给方式为pod资源提供专有且固定的存储。
二、StatefulSet基础应用
1、创建statefulset对象
一个完整得分statefulset控制器需要由一个headless service、一个statefulset和一个volumeClaimTemplate组成。其中,Headless Service用于为pod资源标识符生成可解析的DNS资源记录,statefulset用于管控pod资源,volumeClaimTemplate则基于静态或动态的pv供给方式为pod资源提供专有且固定的存储:
apiVersion: v1
kind: Service
metadata:
name: demo-svc
labels:
app: myapp-svc
spec:
ports:
- port:
name: web
clusterIP: None
selector:
app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myapp
spec:
serviceName: myapp-svc
replicas:
selector:
matchLabels:
app: myapp-pod
template:
metadata:
labels:
app: myapp-pod
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v5
ports:
- containerPort:
name: web
volumeMounts:
- name: myappdata
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: myappdata
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "managed-nfs-storage"
resources:
requests:
storage: 2Gi
2、pod资源标识符及存储卷
由StatefulSet控制器创建的pod资源拥有固定、唯一的标识符和专用存储卷,即便重新调度或终止后重建,其名称也依然保持不变,且此前的存储卷及其数据不会丢失。
pod资源的固定标识符:
[root@master stateful]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
myapp- / Running 22h app=myapp-pod,controller-revision-hash=myapp-6c6b4f98d5,statefulset.kubernetes.io/pod-name=myapp-
myapp- / Running 22h app=myapp-pod,controller-revision-hash=myapp-6c6b4f98d5,statefulset.kubernetes.io/pod-name=myapp-
pod资源的主机名同其资源名称相同,这些名称标识会由StatefulSet资源相关的Headless Service资源创建为dns资源记录,其域名格式为$(service_name).$(namespace).svc.cluster.local。
Headless Service资源借助于SRV记录来引用真正提供服务的后端pod资源的主机名称,进行指向包含pod IP地址的记录条目。此外,由statefulset控制器管控的pod资源终止后会有控制器自动进行重建,虽然其IP地址存在变化的可能性,但它的名称标识在重建后会保持不变。因此,当客户端尝试向statefulset资源的pod成员发出访问请求时,应该针对Headless Service资源的CNAME记录进行,它指向的SRV记录包含了当前处于就绪状态的pod资源,考虑到名称标识固定不变,也可以让客户端直接向SRV资源记录发出请求。
k8sStatefulSet控制器的更多相关文章
- k8s-StatefulSet控制器-十四
一.StatefulSet概述 RC.Deployment.DaemonSet都是面向无状态的服务,它们所管理的Pod的IP.名字,启停顺序等都是随机的,而StatefulSet管理所有有状态的服务, ...
- k8s StatefulSet控制器-独立存储
k8s-StatefulSet控制器-独立存储 1. StatefulSet控制器-独立存储 独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ABP文档 - Mvc 控制器
文档目录 本节内容: 简介 AbpController基类 本地化 其它 过滤 异常处理和结果包装 审计日志 验证 授权 工作单元 反伪造 模型绑定器 简介 ABP通过nuget包Abp.Web.Mv ...
- 关于VS2015 ASP.NET MVC添加控制器的时候报错
调试环境:VS2015 数据库Mysql WIN10 在调试过程中出现类似下两图的同学们,注意啦. 其实也是在学习的过程中遇到这个问题的,找了很多资料都没有正面的解决添加控制器的时候报错的问题,还是 ...
- ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由
原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...
- ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑
原文: Testing Controller Logic 作者: Steve Smith 翻译: 姚阿勇(Dr.Yao) 校对: 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专 ...
- ASP.NET Core 中文文档 第四章 MVC(4.4)依赖注入和控制器
原文: Dependency Injection and Controllers 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core MVC 控制器应通过 ...
- AngularJS 第四天----控制器
控制器的作用 今天和大家学习AngularJS中控制器方面的知识,本文会给出一些例子来说明如何使用AngularJS的控制器.在开始我们的例子之前,首先说说AngularJS控制器的作用.简单的来说A ...
随机推荐
- linux系统下安装python3及其配置
Linux下安装Python3.6和第三方库 linux一般自带python2,不要动它,使用python3运行python脚本就好,部分linux系统命令依赖目前的python2环境, 比如yum! ...
- Node KOA框架入门
KOA: v1 generator v2 过渡版 generator&async v3 async/await koa koa不带路由 因此得cnpm i koa-router -D 路由:1 ...
- airflow迁移
airflow迁移:airflow.cfg文件可以copydbinit时改数据参数 #airflow震乾源码copy:/data/venv/lib/python3.6/site-packages/ai ...
- 微信图片上传 wx.Imagechoose
拍照或从手机相册中选图接口 wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩 ...
- Postfix to Prefix Conversion & Prefix to Postfix Conversion
Postfix to Prefix Conversion Postfix: An expression is called the postfix expression if the operator ...
- SQLServer学习之表的操作
SQLServer学习之表的操作 关系数据库通常包含多个表.数据库实际上是表的集合,数据库的数据或者信息都是存储在表中的.表是对数据进行存储和操作的一种逻辑结构,每一个表都代表一个对用户意义的对象. ...
- # [Poj 3107] Godfather 链式前向星+树的重心
[Poj 3107] Godfather 链式前向星+树的重心 题意 http://poj.org/problem?id=3107 给定一棵树,找到所有重心,升序输出,n<=50000. 链式前 ...
- 用链式字典树解决POJ2945
首先,我们的思路是用链式的字典树结构,解决poj2945这道题 题意是,统计所有的字符串出现的次数,并依次输出各个次数的数量 例如: input 9 6AAAAAAACACACGTTTTGACACAC ...
- Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器-批量插入-07
目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Aj ...
- T100——r类 凭证报表 打印
报表开发流程:1.建立入口程序 如r类的作业:cxmr500步骤: azzi900中建立程序代号 azzi910中建立作业代号 设计器--规格--签出 设计器--程序--签出 adzp168(r.a) ...