云原生及k8s架构,相关生态介绍

1.云计算简介

云计算是分布式计算的一种,指通过网络(云)将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。

1.1简介

云计算早期,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。

现阶段的云服务不单单是一种分布式计算,而是分布式计算,效用计算,负载均衡,并行计算,网络存储,热点备份和虚拟化等计算机技术混合演进并跃升的结果。

1.2云计算特点

云计算的可贵之处在高灵活性,可扩展性和高性比等,与传统的网络应用模式相比有以下优势和特点:

  • 虚拟化技术,其中包括应用虚拟和资源虚拟。

  • 动态可扩展

  • 按需部署,云计算平台能根据用户的需求快速配备计算能力及资源。

  • 灵活性高

  • 可靠性高

  • 性价比高

  • 可扩展性

1.3云服务服务类型

通常云服务的服务类型分为三类,基础设施即服务(IaaS)、平台即服务(PaaS)、软件及服务(SaaS)。这三种云计算服务有时称为云计算堆栈,因为他们构建堆栈,他们位于彼此之上。

  1. 基础设施即服务 IaaS

    1. 它向云计算供应商的个人或组织提供虚拟化计算资源,如:虚拟机,存储,网络和操作系统。
  2. 平台即服务 PaaS

    1. 它为开发人员提供通过全球互联网构建应用程序和服务的平台。PaaS为开发、测试和管理软件应用程序提供按需开发环境。
  3. 软件即服务 SaaS

    1. 它通过互联网提供按需软件付费应用程序,云计算提供商托管和管理应用程序,并允许其用户连接到应用程序并通过互联网访问应用程序。

1.4云服务中的关键技术

1.体系结构

实现云计算需要创造一定的环境与条件,尤其是体系结构必须具备以下关键特征:

  • 第一,系统必须智能化,具有自治能力,减少人工作业的前提下实现自动化处理平台智地响应要求,因此云系统应内嵌有自动化技术
  • 第二,面对变化或需求信号云系统要有敏捷的反应能力,所以对云计算的架构有一定的敏捷要求。与此同时,随着服务级别和增长速度的快速变化,云计算同样面临巨大挑战,而内嵌的集群化技术与虚拟化技术能够应付此类变化。

云计算平台的体系结构由以下组成:

  1. 用户界面。主要用于用户传递信息,是双方互动的界面。

  2. 服务目录。提供用户选择的列表。

  3. 管理系统。主要对应用价值较高的资源进行管理。

  4. 部署工具。根据用户请求对资源进行有效地部署与匹配。

  5. 监控。主要对云系统上的资源进行管理与控制并指定措施。

  6. 服务器集群。服务器集群包括虚拟服务器和物理服务器,隶属管理系统。

2.资源监控

云系统上的资源数据十分庞大,同时资源信息更新速度快,想要精准、可靠的动态信息需要有效途径确保信息的快捷性。而云系统能够为动态信息进行有效部署,同时兼备资源监控功能,有利于对资源的负载、使用情况进行管理。其次,资源监控作为资源管理的“血液”,对整体系统性能起关键作用,一旦系统资源监管不到位,信息缺乏可靠性那么其他子系统引用了错误的信息,必然对系统资源的分配造成不利影响。因此贯彻落实资源监控工作刻不容缓。资源监控过程中,只要在各个云服务器上部署Agent代理程序便可进行配置与监管活动,比如通过一个监视服务器连接各个云资源服务器,然后以周期为单位将资源的使用情况发送至数据库,由监视服务器综合数据库有效信息对所有资源进行分析,评估资源的可用性,最大限度提高资源信息的有效性。

3.自动化部署

科学进步的发展倾向于半自动化操作,实现了出厂即用或简易安装使用。基本上计算资源的可用状态也发生转变,逐渐向自动化部署。对云资源进行自动化部署指的是基于脚本调节的基础上实现不同厂商对于设备工具的自动配置,用以减少人机交互比例、提高应变效率,避免超负荷人工操作等现象的发生,最终推进智能部署进程。自动化部署主要指的是通过自动安装与部署来实现计算资源由原始状态变成可用状态。其于与计算中表现为能够划分、部署与安装虚拟资源池中的资源为能够给用户提供各类应用于服务的过程,包括了存储、网络、软件以及硬件等。系统资源的部署步骤较多,自动化部署主要是利用脚本调用来自动配置、部署与配置各个厂商设备管理工具,保证在实际调用环节能够采取静默的方式来实现,避免了繁杂的人际交互,让部署过程不再依赖人工操作。除此之外,数据模型与工作流引擎是自动化部署管理工具的重要部分,不容小觑。一般情况下,对于数据模型的管理就是将具体的软硬件定义在数据模型当中即可;而工作流引擎指的是触发、调用工作流,以提高智能化部署为目的,善于将不同的脚本流程在较为集中与重复使用率高的工作流数据库当中应用,有利于减轻服务器工作量。

2.云原生

2.1什么是云原生?

百度百科定义:云原生是基于分布部署统一运营的分布式云,以容器、微服务、DevOps等技术为基础建立的一套云技术产品体系。

=》云原生是一套云技术产品体系

=》云原生是一套产品

**cncf定义:**Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.

说人话:云原生技术使组织能够在现代动态环境(如公共、私有和混合云)中构建和运行可扩展的应用程序。容器、服务网格、微服务、不变的基础设施和声明式API这个方法的例子。

img

总结:云原生是一种新型技术体系,是云计算未来的发展方向。

云原生的特点(即云原生的这些产品的特点):

云原生应用也就是面向“云”而设计的应用,在使用云原生技术后,开发者无需考虑底层的技术实现,可以充分发挥云平台的弹性和分布式优势,实现快速部署、按需伸缩、不停机交付等。

2.2云原生生态

到目前为止在CNCF(云原生计算基金会)毕业项目16个孵化项目22个沙盒项目59个

毕业项目概览

img

孵化项目概览

img

**沙盒项目就概览了(太多),可以通过该链接进行概览:**https://landscape.cncf.io/

2.3云原生生态的划分

云原生本质是在于弹性地利用云平台的资源。

云原生计算基金会(CNCF, Cloud Native Computing Foundation)将云原生生态圈划分为上下五层及共用两层。

  • 定义与开发层

  • 编排与治理层

  • 运行时层

  • 供应保障层

  • 云设施层

  • 观察与分析层

  • 平台层

上下五层
  • 定义与开发层(包括数据库与数据分析流式处理软件配置管理应用定义、持续集成/持续交付等几个方面)

    • 数据库与数据分析
      • 关系型数据库:Oracle、SQL Server、MySQL、MariaDB、PostgreSQL、DB2等,以ACID事务模型为支撑,关系型数据库是核心数据存储选型的首选。
      • NoSQL:包括MongoDB、Couchbase、Redis、Cassandra、HBase、Neo4j等。分面向文档、面向列簇、面向key-value、面向图等。NoSQL数库在数据的分布式处理方面表现更加优秀,如redis作为缓存,Neo4j作为关系分析的数据库,MongoDB作为储存Schema易变型数据的数据库。
      • NewSQL:TiDB是其中的优秀代表,TiDB采用key-value存储引擎。
      • 大数据处理:包括Hadoop、Spark、Druid(大数据实时处理分布式系统)等
    • 流式处理:
      • 消息中间件:RabbitMQ、Kafka、RocketMQ等
      • 流式实时计算框架:storm、Flink,对于实时PV、UV等需求是个不错的选择。
    • 软件配置:软件配置管理SCM,包括SVN和Git。一般企业使用GitLab来搭建自己的软件配置管理系统。个人开发者、开源项目可以使GitHub或码云来管理源代码。
    • 应用定义:如java的Maven等。
    • 持续集成及持续交付:常见的持续集成及持续交付工具包括Jenkins、Bamboo、CircleCI、Travis等。
  • 编排与治理层(包括调度与编排、分布式协调与服务发现、服务管理等。)

    • 调度与编排:调度是将分布式系统中的空闲资源合理分配给需要的进程并采用容器进行封装的过程。编排是对系统中的容器进行健康检查、自动扩缩容、自动重启、滚动发布等的过程。
      Kubernetes、Mesos、Swarm等属于此范畴。
      • K8s:出色的容器编排系统,面向云原生paas平台。
      • Mesos:
    • 分布式协调与服务发现:分布式系统一般通过一个高可靠的注册中心对分布式服务进行协调与发现
    • 服务管理:包括远程通信、反向代理、服务治理等方面。其中远程通信要依托高性能和跨语言的通信框架,包括gRPC、Thrift、Avro等,集序列化和通信功能于一体。反向代理包括硬件的F5和软件的HAProxy、Nginx等。服务治理包括负责网关的Zuul,负责客户端负载均衡的Ribbon,负责熔断的Hystrix;Scala语言开发的Finagle,国内的Dubbo等;Service Mesh是新兴的服务治理概念,是指服务网格,Istio框架是这方面的代表,Kubernetes掌控编排,Istio掌控服务治理是未来的方向。
  • 运行时层(包括云原生存储、容器和云原生网络,分布对于传统应用的文件系统、进程和网络环境)

    • 云原生存储:指合适云服务的分布式文件存储系统,包括HDFS、Ceph、ClusterFS等。广泛应用于存放日志、图片、文档等。
    • 容器:docker是使用最广泛的容器。
    • 云原生网络:主要解决为每个容器(或Pod)分配独立IP地址。软件定义网络SDN是最佳方案。CNI是容器网络接口标准,主要实现有Flannel、Calico、OVS、weave等。
  • 供应保障层(主要包括宿主机管理工具、基础设施自动化工具、容器仓库、镜像安全和密钥管理)

    • 宿主机管理工具
      • 监控自动化工具:可以对服务器CPU、内存、磁盘IO、网络IO进行探测监控,包括Nagios、Zabbix。
      • 流程自动化工具:对服务器进行维护,实现应用上线部署等日常操作的自动化和标准化,包括Ansible、Puppet、Chef、SaltStack等。
    • 基础设施自动化工具:包括Docker的包管理工具Infrakit,及简化Kubernetes部署的Helm工具。通过Helm Charts帮助安装和更新复杂的Kubernetes应用,支持版本管理和控制。
    • 容器仓库:Harbor可以帮助用户迅速搭建一个企业级的Docker Registry服务。
    • 镜像安全和密钥管理:Clair、Twistlock等工具可以检查容器中应用的漏洞。
  • 云设施层(主要包括AWS、Azure、阿里云、腾讯云等公有云和OpenStack、VMware等私有云)

共用层
  • 观察与分析层(包括对系统指标的监控,对链路调用的追踪,对分布式日志的收集)

    • 监控:对物理服务器指标采集和报警工具包括Nagios、Zabbix。对容器指标采集工具有CAdvisor等。存储海量采集信息的时序数据库Prometheus、InfluxDB等。Grafana用于监控分析的图形工具来展示数据。
    • 对链路调用的追踪:OpenTracing是调用链的标准协议,遵循该协议的开源解决方案有ZipKin、JAEGER,及国产开源项目SkyWalking等。另外未遵循该协议的开源方案有PinPoint、Open-Falcon、CAT等。
    • 日志收集:用于采集标准输出并将日志输入其它流的工具有Fluentd、Flume、FileBeat、Logstash等。然后这些工具将日志通过各种缓冲管道进行处理,写入日志中心。日志中心的存储介质可以是Elasticsearch、HBase等。Elastic公司提供的搜索引擎Elasticsearch、日志收集工具Logstash和图形界面Kibana所组成的一站式开源解决方案(ELK),也有Splunk这样的一体化商业日志解决方案。
  • 平台层:平台是指基于云的整合平台。包括围绕Mesos打造的DC/OS;以及可以整合Mesos和Kubernetes的Rancher平台。

2.4云原生路线图

img

3.kubernetes

3.1k8s是什么

Kubernetes,也称为 K8s,是一个开源系统,用于自动化部署、扩展和管理容器化应用程序。

3.2资源管理器的发展经历

首先云服务的发展是:

IaaS 基础设施即服务 阿里云

PaaS 平台即服务 新浪云

SaaS 软件即服务 Office365,不需要安装,只需要通过浏览器访问就能进行文档的创建修改等。

新浪有个叫新浪sae,号称免运维的云平台,以前可以免费申请这个平台来运行代码项目的功能,包括JAVA,PHP等都可以。

以前的流程大致就是:

img

后来出现了一些运维工具,运维工具能自动化的进行环境的创建。

虽然有了这些自动化工具,但是离真正的自动化还远远不够。

后来有一家公司开发了一个产品-Docker,该公司主要就是做PaaS平台。随着发展Docker成为了下一代,也就是现在PaaS平台的标准。

但是直接使用Docker容器化的时候会遇到很多问题,例如:在存在许多tomcat容器的时候,每个容器Ip地址映射关系等,会变得十分复杂。

那么容器的集群化有没有很好的解决方案呢?

有需求就有产品,这个产品就是—资源管理器

资源管理器发展历程:

1.MESOS,一开始并不是为了容器化而诞生,而是作为一种资源管理平台而出现。以前被推特选择。后来改为了k8s。但是MESOS官方表示可以用MESOS来管理k8s,但并未有大型企业选择。因为采用k8s进行管理已经十分方便了。若增加MESOS又会出现一个可能出现的故障节点。

2.docker SWARM,docker母公司诞生的,用于处理docker管理的解决方案。轻量级的。但是功能太少,例如实现滚动更新,回滚等操作很难,需要手工实现。

3.kubernetes,

MESOS APACHE开源协议 分布式资源管理框架 2019-5 推特=》 k8s

Docker Swarm 2019-7 阿里云宣布Docker Swarm 从选择资源管理框架中剔除

Kubernetes Goole 10年容器化作为基础架构 brog 内部管理容器/资源的框架(未开源)

随着容器化技术的发展,谷歌 使用go语言 对brog系统进行翻写,并开源给的cncf

3.3k8s的特点

  • 轻量级(消耗的资源小) 底层go语言,语言级别支持进程管理等

  • 开源

  • 弹性伸缩 伸:可平滑的增加节点 缩:主节点通过一条命令就可以将一些节点剥离

  • 负载均衡 内部实现了模块之间的负载均衡

3.4brog架构

brgo架构

img

  • BorgMaster : 处理请求的分发,整个集群的大脑。实现高可用可对BorgMaster进行备份

  • BorgLet :真正工作的节点,对应的容器要运行是通过borglet提供的

  • scheduler :调度器,负责进入BrogMaster的请求进行分发,将数据写进Paxos(键值对数据库)

  • 访问方式:

    • borgcfg 文件读取
    • commoand-line tools 命令行
    • web browsers 浏览器

3.5k8s架构

img

首先是一个C/S结构,Master和 node

scheduler:调度器,这里会将任务交给api server 再由api server 负责将请求写入到 etcd。调度器并不会直接和etcd直接进行交互。

replication controller :维护副本的数目,例如:想让容器运行几个副本,就是由rc来控制的。

api server :一切服务访问的入口,aip server会非常繁忙,这时在调度器,rc等会生成一定的缓存,来减少对api server的

etcd :类似于brog中的paxos ,etcd 采用go语言编写的kv数据库,用于协助集群的正常运转(保存整个分布式集群的需要持久化的配置文件,一旦集群死亡可利用etcd中的数据进行恢复)。并且etcd可信赖(天生支持集群化,不用其他组件参与进来,增加故障节点的可能)的kv数据库。etcdv2将数据写进内存中,etcdv3,将数据写进磁盘。

kublet:与CRI(container,runtime,interface)进行交互,维持pod的生命周期,kubelet与docker进行交互操作docker来创建对应的容器。

kube proxy: 实现负载均衡的功能,实现pod与pod之间的访问和负载均衡需要借助kube proxy ,默认是操作防火墙实现pod的映射,也支持IPVS。

container: 即容器。例如:docker容器

总结:

master服务中的组件:

  • api server:所有服务访问的统一入口

  • scheduler:负责接收任务,选择合适的节点分配任务。

  • replication controller:维护副本期望的数量

  • etcd:kv数据库,存储k8s中重要的且是持久化的重要信息

node:

  • kublet :直接和容器引擎交互,实现容器的生命周期管理
  • kub proxy:负责写入规则到防火墙、IPVS实现服务映射访问

3.6其他插件

CoreDNS:可以未集群中的svc创建一个域名ip的对应关系解析。

Dashboard:给k8s集群提供一个b/s结构的访问体系

ingress controller:k8s官方只能实现4层代理,ic可以实现7层代理。根据组件名进行负载均衡。

fedetation:提供一个可以跨集群中心的多k8s统一管理功能

promethus:提供一个k8s集群的监控功能。

ELK:提供k8s集群的日志统一分析介入平台。

更多推荐