在了解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. pychram使用技巧

    1.代码添加断点 点击对应行代码,按ctrl+F8,即可添加断点 2.查看内置函数的源码 点击对应函数后按crtl+B

  2. 后台线程下的WinFrom窗体控件操作 Invoke

    Invoke(new MethodInvoker(delegate { ControllerLogout(controller_id, is_successful, description, cont ...

  3. SQLite简单使用记录

    SQLite,一种轻量级的数据库 想要使用的话首先下载安装包. https://www.sqlite.org/download.html 下载sqlite-netFx20-setup-bundle-x ...

  4. laravel上传图片报错

    在laravel的上传图片代码文件中路径如下: vendor\stevenyangecho\laravel-u-editor\src\Uploader\Upload.php第131行有一句代码错误$r ...

  5. 【2017下集美大学软工1412班_助教博客】团队作业3——需求改进&系统设计团队成绩公示

    作业要求 团队作业3--需求改进&系统设计 团队评分结果 Total QH BZ GJ MS SXX WBS SJ JG SJK JH NR CS PHILOSOPHER 需求改进&系 ...

  6. 一个U盘黑掉你:TEENSY实战(test)

    挖掘过程一: 自从上一次投稿,已经好久好久没写文章了.今天就着吃饭的时间,写篇文章,记录下自己学习xss这么久的心得.在我看来.Xss就是javascript注入,你可以在js语法规定的范畴内做任何事 ...

  7. Nowcoder 提高组练习赛-R7

    Nowcoder 提高组练习赛-R7 https://www.nowcoder.com/acm/contest/179#question 中间空了两场,因为实在是太难了... 第五场的第二题好像还比较 ...

  8. 【测试123】ISTQB AL

    近一年时间加强了金融领域基础知识,希望能顺利获得FRM认证. 接下来因为工作需要,在测试工程师的角色上有所深入发展. 仔细想了下,一是管理上的角色转换,如何协调各个不同测试级别,以及如何成为一个称职满 ...

  9. Jenkins与Github集成

    Jenkins目前是手动进行项目构建的,如何才能做到Github并持续集成呢? 配置前要求: 1.Jenkins已经安装Github插件 2.Jenkins服务器已经拥有一个公网IP地址 第一步:配置 ...

  10. sphinx搜索 笔记

    架构图: 安装sphinx,见文章http://my.oschina.net/ptk/blog/495435 sphinx关键的配置文件.在里面写查询的sql. 两个关键命令:indexer生成查询索 ...