StatefulSet】的更多相关文章

前面我写的一系列博客,如果你能够耐心看到这一篇,那你应该对一个概念就不是太陌生了:Deployment. 为什么提这个概念呢,这就要说到Deployment的一个不足了.Deployment不足以覆盖所有的应用编排问题,因为在它看来,一个应用的所有Pod,是完全一样的,所以它们之间就没有顺序,也无所谓运行在哪台宿主机上.需要时,Deployment就通过Pod模板创建新的Pod,不需要时,就"杀掉"任意一个Pod. 但是在实际场景中,并不是所有应用都满足这样的要求.比如:主从关系,主备…
StatefulSet(有状态): StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署,拓展,删除和滚动更新. 在Kubernetes系统中,Pod的管理对象RC.Deployment.DaemonSet和Job都是面向无状态的服务.但现实中有很多服务是有状态的, 特别是一些复杂的中间件集群, 例如MySQL集群.MongoDB集群.Kafka集群.Zookeeper集群等,这些应用集群有以下一些共同点. 每个节点都有固定的身份ID,通过这个ID,集群中…
Deployment 实际上并不足以覆盖所有的应用编排问题. 造成这个问题的根本原因,在于 Deployment 对应用做了一个简单化假设. 它认为,一个应用的所有 Pod,是完全一样的.所以,它们互相之间没有顺序,也无所谓运行在哪 台宿主机上.需要的时候,Deployment 就可以通过 Pod 模板创建新的 Pod:不需要的时候, Deployment 就可以“杀掉”任意一个 Pod. 但是,在实际的场景中,并不是所有的应用都可以满足这样的要求. 尤其是分布式应用,它的多个实例之间,往往有依…
什么是StatefulSet StatefulSet 是Kubernetes中的一种控制器,他解决的什么问题呢?我们知道Deployment是对应用做了一个简化设置,Deployment认为一个应用的所有的pod都是一样的,他们之间没有顺序,也无所谓在那台宿主机上.需要扩容的时候就可以通过pod模板加入一个,需要缩容的时候就可以任意杀掉一个.但是实际的场景中,并不是所有的应用都能做到没有顺序等这种状态,尤其是分布式应用,他们各个实例之间往往会有对应的关系,例如:主从.主备.还有数据存储类应用,它…
StatefulSet: 1.稳点且唯一的网络标识符 2.稳点且持久的存储 3.有序.平滑的部署和扩展 4.有序.平滑的删除和终止 5.有序的滚动更新 三个组件组成:headless(无头服务)    service.StatefuSet.voluneClaimTemplate(存储卷申请模板) ##需要建好pv存储 apiVersion: v1kind: Servicemetadata: name: myapp-svcspec: ports: - port: 80 name: web clus…
有状态的控制器有以下几个特点 稳定,独特的网络标识符. 稳定,持久的存储. 有序,优雅的部署和扩展. 有序的自动滚动更新. 使用限制 StatefulSet是1.9之前的beta资源,在1.5之前的任何Kubernetes版本中都没有. 给定Pod的存储必须由PV根据请求进行配置storage class,或者由管理员预先配置. 删除和/或缩放StatefulSet将不会删除与StatefulSet关联的卷.这样做是为了确保数据安全,这通常比自动清除所有相关的StatefulSet资源更有价值.…
k8s 内部的kafka要映射到外网,直接把 kafka 通过 expose 把pod 映射成服务,使用nodeport 连接,出现超时问题, 解决思路: 1.  查看zk中,kafka的注册信息,PLAINTEXT://kafka-0.kafka-hs.sy-platform-demo.svc.cluster.local.:9093", 而应用代码中,必须使用这个域名+端口进行连接,由于k8s使用30000-32000,端口对外映射,所以9093端口必须修改 2.  kafka.yaml文件修…
1.部署多个副本的OA(Tomcat)集群,其中一个Tomcat的需要加一个定时器,其他代码跟其他的Tomcat的代码一样.需要重启后也还是保持这个状态.代码如下: apiVersion: v1 kind: Service metadata: name: wordpress0217 labels: app: wordpress0217 spec: ports: - port: 80 clusterIP: None selector: app: wordpress0217 tier: fronte…
1.  svc(vip)                       --              deployment 2.headless(none)                --              statefulSet   --- pod(每个pod都有唯一标识,是有先后顺序的) #headless service,即无头服务,与service的区别就是它没有Cluster IP,解析它的名称时将返回该Headless Service对应的全部Pod的Endpoint列表…
所有节点安装nfs yum install nfs-utils rpcbind -y mkdir -p /ifs/kubernetes echo "/ifs/kubernetes 192.168.x.0/24(rw,sync,no_root_squash)" >> /etc/exports 仅在nfs服务器上 systemctl start rpcbind nfs 节点测试没问题即可 可以参考下以前写的: http://blog.csdn.net/iiiiher/artic…
之前一直docker-compose跑zk集群,现在把它挪到k8s集群里. docker-compose跑zk集群 zk集群in k8s部署 参考: https://github.com/kubernetes/contrib/blob/master/statefulsets/zookeeper/zookeeper.yaml https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/ 我修改了下默认的yaml 1.zk.…
1.statefulset.yaml apiVersion: apps/v1kind: StatefulSetmetadata:   name: webspec:    serviceName: "nginx"    replicas: 2    selector:     matchLabels:        app: nginx    template:        metadata:             labels:                  app: ngin…
StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考kubeadm安装kubernetes V1.11.1 集群 0. 介绍 使用Kubernetes来调度无状态的应用非常简单,那Kubernetes如何来管理调度有状态的应用呢?Kubernetes中提供了一个StatefulSet控制器来管理有状态的应用,本文就介绍StatefulSet的应用,解决以下几个问题: 如何创建StatefulSet State…
“Deployment用于部署无状态服务,StatefulSet用来部署有状态服务”. 具体的,什么场景需要使用StatefulSet呢?官方给出的建议是,如果你部署的应用满足以下一个或多个部署需求,则建议使用StatefulSet. 稳定的.唯一的网络标识. 稳定的.持久的存储. 有序的.优雅的部署和伸缩. 有序的.优雅的删除和停止. 有序的.自动的滚动更新. 稳定的主要是针对Pod发生re-schedule后仍然要保持之前的网络标识和持久化存储.这里所说的网络标识包括hostname.集群内…
目录 一.statefulset简介 二.为什么要有headless?? 三.为什么要 有volumeClainTemplate?? 四.statefulSet使用演示 (1)查看statefulset的定义 (2)清单定义StatefulSet (3)删除前期的操作 (4)修改pv的大小为2Gi (5)创建statefulset 五.滚动更新.扩展伸缩.版本升级.修改更新策略 1.滚动更新 2.扩展伸缩 3.更新策略和版本升级 一.statefulset简介     从前面的学习我们知道使用D…
在最新发布的 Kubernetes 1.5 我们将过去的 PetSet 功能升级到了 Beta 版本,并重新命名为StatefulSet.除了依照社区民意改了名字之外,这一 API 对象并没有太大变化,不过我们在向集合里部署 Pod 的过程中加入了"每索引最多一个"的语义.有了顺序部署.顺序终结.唯一网络名称以及持久稳定的存储,我们认为,对于大量的有状态容器化负载,我们已经具备了一定的支持能力.我们并不是宣称这一功能已经完全完成,但是我们相信他已经处于一个可用状态,并且我们会在推动其正…
在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个来保证可用性,但是由于是无状态的,Pod挂了的时候与之前的Volume的关系就已经断开了,新起来的Pod无法找到之前的Pod.但是对于用户而言,他们对底层的Pod挂了没有感知,但是当Pod挂了之后就无法再使用之前挂载的磁盘了. 解决方案 使用K8s v1.5版本推出的StatefulSet可以保留P…
K8s的版本是1.7.6 采用nfs的nas存储模式 NFS的问题 建立zk集群的时候总是发现myid绑定一个id,先describe pod确认每个绑定不同的pvc,然后就确认是pv创建的问题,pv创建不能直接挂在一个大的存储上面,因为大家最后的目录相同/var/lib/zookeeper/data目录,所以无论哪个pvc挂上去都是同样的目录,解决办法,建立不同的存储挂载目录,然后分别挂载pv 建立pv的时候,指明storageClassName,比如 apiVersion: v1 kind:…
   从前面的学习我们知道使用Deployment创建的pod是无状态的,当挂载了Volume之后,如果该pod挂了,Replication Controller会再启动一个pod来保证可用性,但是由于pod是无状态的,pod挂了就会和之前的Volume的关系断开,新创建的Pod无法找到之前的Pod.但是对于用户而言,他们对底层的Pod挂了是没有感知的,但是当Pod挂了之后就无法再使用之前挂载的存储卷.     为了解决这一问题,就引入了StatefulSet用于保留Pod的状态信息.     …
PetSet首次在K8S1.4版本中,在1.5更名为StatefulSet.除了改了名字之外,这一API对象并没有太大变化. 注意:以下内容的验证环境为CentOS7.K8S版本1.5.2,并部署SkyDNS. http://blog.csdn.net/liyingke112/article/details/76685794 概念 在云原生应用的体系里,有下面两组近义词:第一组是无状态(stateless).牲畜(cattle).无名(nameless).可丢弃(disposable):第二组是…
在K8s中创建StatefulSet 遇到的问题: 使用Deployment创建的Pod是无状态的,当挂在Volume之后,如果该Pod挂了,Replication Controller会再run一个来保证可用性,但是由于是无状态的,Pod挂了的时候与之前的Volume的关系就已经断开了,新起来的Pod无法找到之前的Pod.但是对于用户而言,他们对底层的Pod挂了没有感知,但是当Pod挂了之后就无法再使用之前挂载的磁盘了. 解决方案 使用K8s v1.5版本推出的StatefulSet可以保留P…
系列目录 概述 RC.Deployment.DaemonSet都是面向无状态的服务,它们所管理的Pod的IP.名字,启停顺序等都是随机的,而StatefulSet是什么?顾名思义,有状态的集合,管理所有有状态的服务,比如MySQL.MongoDB集群等. StatefulSet本质上是Deployment的一种变体,在v1.9版本中已成为GA版本,它为了解决有状态服务的问题,它所管理的Pod拥有固定的Pod名称,启停顺序,在StatefulSet中,Pod名字称为网络标识(hostname),还…
一开始Kubernetes只是被设计用来运行无状态应用,直到在1.5版本中才添加了StatefulSet控制器用于支持有状态应用,但它直到1.9版本才正式可用.本文将介绍有状态和无状态应用,一个通过K8S StatefulSet来编排有状态应用的示例,以及当前有状态应用容器化现状及将来的发展趋势. 1. 有状态应用和无状态应用 无状态应用(Stateless Application)是指应用不会在会话中保存下次会话所需要的客户端数据.每一个会话都像首次执行一样,不会依赖之前的数据进行响应.有状态…
目录 StatefulSet 部署 zookeeper 集群 创建pv StatefulSet 测试 StatefulSet 部署 zookeeper 集群 参考 k8s官网zookeeper集群的部署,数据挂着方式改成通过本地方式创建的pv: https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/ 本次共享存储使用的是 NFS: 创建pv [root@node01 zk-cluster]# cat zk-pv.y…
目录 StatefulSet 简单测试 使用 StatefulSet 创建基础的PV StatefulSet 清单 StatefulSet 有状态应用副本集 无状态的, 更关注的是群体 有状态的, 更关注的是个体 有状态应用集的特点: 稳定且需要唯一的网络标识符; 稳定且持久的存储; 要求有序, 平滑的部署和扩展; 要求有序, 平滑的删除和终止; 有序的滚动更新; 需要有三个组件组成: headless service StatefulSet 控制器 volumeClaimTemplate 存储…
简单说来,StatefulSet其实就是一种升级版的Deployment,大体工作原理如下 1.为每个Pod名字按顺序编号,按顺序启动 # kubectl get po -o wide -l app=nginx NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE web-0 1/1 Running 0 21s 10.244.0.44 vm-0-8-ubuntu <none> web-1 1/1 Running 0 14s 10.244.0…
一.首先说headless Service和普通Service的区别 headless不分配clusterIP headless service可以通过解析service的DNS,返回所有Pod的地址和DNS(statefulSet部署的Pod才有DNS) 普通的service,只能通过解析service的DNS返回service的ClusterIP 二.statefulSet和Deployment控制器的区别 statefulSet下的Pod有DNS地址,通过解析Pod的DNS可以返回Pod的…
StatefulSet介绍 一.StatefulSet概述 StatefulSet是用来管理stateful(有状态)应用的StatefulSet管理Pod时,确保Pod有一个按序增长的ID与Deployment最大的不同是StatefulSet始终将一系列不变的名字分配给Pod.这些Pod从一个模板创建,但是并不能相互替换 二.StatefulSet使用场景 对于有如下要求的应用程序,StatefulSet非常适用需要稳定.唯一的网络标识(dnsname)每个Pod始终对应各自的存储路径(Pe…
复制有状态的Pod replicaSet通过一个pod模版创建多个pod副本.这些副本除了它们的名字和IP地址不同外,没有别的差异.如果pod模版里描述了一个关联到特定持久卷声明的数据卷,那么ReplicaSet的所有副本都将共享这个持久卷声明,也就是绑定到同一个持久卷声明. 因为是在pod模版里关联持久卷声明的,又会依据pod模版创建多个副本,则不能对每个副本都指定独立的持久卷声明.所以也不能通过一个ReplicaSet来运行一个每个实例都需要独立存储的分布式数据存储服务,至少通过单个Repl…
StatefulSet介绍 前面使用Deployment创建的Pod是无状态的,当挂载了volume之后,如果该Pod挂了,Replication Controller会再启动一个Pod来保证可用性,但是由于Pod是无状态的,pod挂了就会和之前的Volume的关系断开,新创建的Pod无法找到之前的Pod.但是对于用户来说,他们对底层的Pod挂了是没有感知的,但是当Pod挂了之后就无法再使用之前挂载的存储卷.为了解决这一问题,就引入了StatefulSet用于保留Pod的状态信息. Statef…