在了解Kubernetes应用状态部署前,我们先看看Kubernetes的高级架构,方便更好的理解Kubernetes的状态。

Kubernetes 的高级架构

包括应用程序部署模型,服务发现和负载均衡,内部/外部路由分离、persistentvolume 的使用,部署节点守护程序,部署有状态分布式系统,作业后台运行,部署数据库,配置管理,凭证管理,滚动更新,自动缩放和包管理。
A、Kubernetes的基本设计策略之一就是,无需更改应用程序代码,就能部署在虚拟机上运行的现有应用程序。另外,任何运行在虚拟机上的应用程序都可以通过容器化组件在 Kubernetes 上实现部署。这是通过容器分组、容器编排、覆盖网络、基于第 4 层虚拟IP、服务发现、支持守护程序运行、部署有状态应用程序组件、以及扩展容器编排系统这些核心功能实现的。
B、Kubernetes 可以提供一组可动态扩展的主机,可以应用容器运行 workload,并使用一组称为 master 的管理主机来提供管理整个容器基础架构的 API。这些 workload 包括长期运行服务,批处理作业和容器主机的守护程序。为了提供容器到容器的路由,所有容器主机都用覆盖网络连接在一起。部署在 Kubernetes 上的应用程序在集群网络中是动态可见的,并可通过传统负载均衡器向外部网络暴露。集群管理器的状态存储在一个高度分布的 key/value 存储(etcd)中,该存储在 master上运行。

Kubernetes应用状态部署
在K8s运行的服务,分为无状态服务和有状态服务,下面分别看看K8s是如何运行这两类不同的服务的

01“无状态”服务

无状态服务,即 Web 服务器、代理和应用程序代码这样的应用程序,它们可以处理数据但不进行存储。编排过程中,开发者比较喜欢使用它们,因为它们易于部署且易于扩展。如果流量上升,则只需添加更多的负载平衡。更重要的是,它们是“不变动的”;上游容器镜像和基础架构中正在运行的容器其实几乎没有区别。这意味着它们可以随时被替代,而且容器实例切换过程中几乎不需要耗费“切换成本”。
无状态服务,K8s使用Replicaset来保证一个服务的实例数量,如果说某个Pod实例由于某个原因被crash了,RC会立即用一个Pod的模板新启一个Pod来替代它,由于是无状态的服务,新启的Pod与原来健康状态下的Pod是一模一样。当Pod被重建后它的IP地址可能发生变化,为了对外提供一个稳定的访问接口,K8s引入了Service的概念,一个Service后面可以挂多个Pod,实现服务的高可用。
在Kubernetes中,Deployment和Replicasets都是运用无状态服务的有效手段。

02"有状态"服务

有状态的服务,即路由器、CDN(内容传送网络)、streaming 服务器和认证服务器。从部署开始,这些容器就开始与上游镜像不同了,时间越长它们的差异越大。这种差异就被称为“state(状态)”。事实上,每个运行的应用程序都至少有一个小状态(差异),但对于“无状态”应用程序来说,状态(差异)很小,而且可以进行快速替换。
普通有状态服务,和无状态服务相比,它多了状态保存的需求,K8s提供了以Volmume和Peristent Volmume为基础的存储系统,可以实现服务的状态保存。
而在容器化应用程序最困难的任务之一,就是设计有状态分布式组件的部署体系结构。由于无状态组件可能没有预定义的启动顺序、集群要求、点对点 TCP 连接、唯一的网络标识符、正常的启动和终止要求等,因此可以很容易地进行容器化。诸如数据库,大数据分析系统,分布式 key/value 存储和 message brokers 可能有复杂的分布式体系结构,都可能用到上述功能。
Kubernetes 引入了 StatefulSets 资源来支持这种复杂的需求,用来管理POD部署和扩容,并为这些pod提供顺序和唯一性的保证。

03 StatefulSet部署—有状态应用

用于解决各个pod实例独立生命周期管理,提供各个实例的启动顺序和唯一性。
使用StatefulSet的前提是:
1、Kubernetes集群的版本≥1.5;
2、安装好DNS集群插件,版本≥15。

StatefulSet为什么适合有状态的程序,看看它的特性:

A、稳定,唯一的网络标识符。可以发现集群内部的其他成员。
B、稳定的持久化存储。通过Kubernetes的PV/PVC或者外部存储(预先提供)来实现。
C、启动或关闭时有序。有序的,优雅的部署和扩展。有序,优雅的删除和终止。有序的自动滚动更新。实现部署和扩容保证。

04运用StatefulSet会带来什么好处呢?
部署和扩容的保证
对于带有N个副本集的StatefulSet,当pod被部署,它们将按0到N-1的顺序被创建。
当一Pod被删除时,它们将按照N-1到0的顺序被终止。
在进行Pod扩容前,所有依赖的Pod应该都已在运行和准备好。
在Pod被终止前,所有的依赖它的Pod都必须完全停止。

如果你的系统是微服务构成的生态系统,就会比较繁琐的交付新服务,如果更近一步,服务是有状态的,那么kubernetes的自动化和健壮性特性会对你有很大的帮助,StatefulSet的目的就是给众多的有状态负载提供正确的控制器支持。

技术进阶:Kubernetes高级架构与应用状态部署的更多相关文章

  1. 技术抄录_Java高级架构师教程

    1.B2C商城项目实战     2.高性能架构专题     3.架构筑基与开源框架解析专题     4.团队协作开发专题     5.微服务架构专题     6.设计模式     附上[架构资料]   ...

  2. Android高级架构进阶之数据传输与序列化

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述数据传输与序列化: [Serializable原理] ...

  3. PHP高级架构技术年度大盘点

    2015年1月的最后一个周末,上海的冬季虽不如北方的雪窖冰天,但腊月的寒风也足以让人猫 在家中不愿出门.可是,在华美达酒店的一个会议室中,却人声鼎沸.春意融融,第三期商派技术沙龙正在火热进行,本期沙龙 ...

  4. Kubernetes系列02—Kubernetes设计架构和设计理念

    本文收录在容器技术学习系列文章总目录 1.Kubernetes设计架构 Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分 ...

  5. 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  6. 浅谈Kubernetes生产架构

    注意本文,只是笔者针对Kubernetes生产环境运行的一些关于架构设计和实现方案的总结,内容很粗糙,同时也会不断完善. 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下 ...

  7. 转://Oracle 高可用技术与云基础架构

    众所周知Oracle云基础架构已经在越来越多的行业里应用.大家了解云基础架构是如何演进的嘛?可能有人会说Oracle高可用技术是组成云架构的基础,那它们的关系是怎么样的?大家又了解Oracle高可用技 ...

  8. 了解Kubernetes主体架构(二十八)

    前言 Kubernetes的教程一直在编写,目前已经初步完成了以下内容: 1)基础理论 2)使用Minikube部署本地Kubernetes集群 3)使用Kubeadm创建集群 接下来还会逐步完善本教 ...

  9. Kubernetes生产架构浅谈

    注意 本文,只是笔者针对Kubernetes生产环境运行的一些关于架构设计介绍. 介绍 基于 Kubernetes 系统构建的统一开发运维管控平台.在 Kubernetes 基础上,围绕 微服务系统的 ...

随机推荐

  1. tidb导入大量数据报错:statement count 5001 exceeds the transaction limitation, autocommit = false

    这是Tidb数据库事务提交数量达到上限的一种报错:因为tidb是分布式的数据库,tikv使用了底层的强一致性协议.这是分布式数据库必然遇到的一个问题,我们可以调整这个值:在tidb的配置文件里面“st ...

  2. October 18th 2017 Week 42nd Wednesday

    Only someone who is well-prepared has the opportunity to improvise. 只有准备充分的人才能够尽兴表演. From the first ...

  3. 【python27】猜随机数的小游戏

    游戏规则: 猜一个随机数,如果猜对了就给出相应的猜成功提示语(自定义文字),如果猜大或者是猜小了,给出对应的提示,但总的猜次数为三次,每猜错一次重新猜时,给用户提示所剩余的猜次数 实现如下: # -* ...

  4. 织梦提交表单(提交留言)前的js校验

    第一种情况:页面有引入jq的 在form标签上加上id <form action="/plus/diy.php" enctype="multipart/form-d ...

  5. Kafka设计解析(二十)Apache Flink Kafka consumer

    转载自 huxihx,原文链接 Apache Flink Kafka consumer Flink提供了Kafka connector用于消费/生产Apache Kafka topic的数据.Flin ...

  6. 2019年春季学期《C语言程序设计II》助教注意事项

    本学期<C语言程序设计II>课程安排 理论课时24(1-12周),实验课时8(13周),课程设计课时16(14-15周) 理论课教学内容 附:教学进度表 本学期实验课和课程设计参考教材 & ...

  7. echarts 中文API

    http://echarts.baidu.com/echarts2/doc/doc.html#Toolbox

  8. lwip Packet buffers (PBUF) API 操作 集合

    struct pbuf *  pbuf_alloc (pbuf_layer layer, u16_t length, pbuf_type type)   struct pbuf *  pbuf_all ...

  9. Hadoop大数据平台构建

    基础:linux常用命令.Java编程基础大数据:科学数据.金融数据.物联网数据.交通数据.社交网络数据.零售数据等等. Hadoop: 一个开源的分布式存储.分布式计算平台.(基于Apache) H ...

  10. Bagging(R语言实现)—包外错误率,多样性测度

    1.      Bagging Bagging即套袋法,其算法过程如下: 从原始样本集中抽取训练集.每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次 ...