云原生

云平台

上一篇文章,介绍了用Kubernetes构建基于容器调度的云平台,在这个平台上我们可以添加管理集群的机器节点,安装想要的软件,部署我们的应用程序。

因为它的抽象与通用性,已经成为云的通用基础设施,通用的云平台。

在这个通用的云平台上搭建的应用就可以说是云原生应用,使用它的集群,部署和容器管理的基本能力,就可以站在云端。

云原生

在这个云端,云原生应用有一个开源软件社区CNCF:
CNCF,全称Cloud Native Computing Foundation(云原生计算基金会),初衷是围绕“云原生”服务云计算,致力于维护和集成开源技术。

所以,这篇文章主要来整理和认识一下,和云原生有关的技术。这些软件工具,可以用来搭建完整的企业基于云的IT实现。

CNCF云原生开源软件大图:

上图中,主要分为以下几块:

Cloud

公有云,以及kubernetes授权的云服务提供商

Provisioning

Automation & Configration
  • ansible 比较简洁,用 ssh 来自动化部署,使用 python 编写
  • cfEngine 用 C 编写,因此性能会更好,但是学习曲线也更曲折
  • chef ruby 编写,而且配置文件格式也是 ruby DSL
  • saltstack 采用 zeroMQ 作为消息队列,实现 master-salve 模式,兼具性能和灵活性,但同时整个系统也更加复杂
  • puppet
Container Registries
  • Harbor 是开源的企业级容器镜像管理平台
Secure & Compliance
  • notary 和 tuf(the update framework) 是 CNCF 旗下的两个项目,tuf 是开源的安全和验证标准,notary 是它的一个实现,notary 可以用来验证镜像的安全性,也可以用来安全地发布软件包
Key Management
  • spiffe 和 spire 是一对的,spiffe 定义了服务的认证标准和认证信息的标准,spire 是它的一个实现

Runtime 运行时

Cloud Native Storage(云原生存储)
  • Ceph:分布式存储系统,同时支持块存储、文件存储和对象存储,发展时间很久,稳定性也得到了验证
  • GlusterFS:RedHat 旗下的产品,部署简单,扩展性强,
  • Hadoop HDFS:Apache 基金会下的开源文件系统项目,在大数据领域广泛使用,基于 GFS 理念的开源版本。主节点保存元数据,并负责数据分布、复制、备份决策,工作节点存储数据,每个数据会有多个副本,保存在不同的工作节点
  • LeoFS:高可用、分布式的对象存储系统,海量数据支持比较好,提供 HTTP、S3、NFS 等接口访问
  • minio:开源的对象存储软件,提供和 AWS S3 兼容的接口,简单易用
Container Runtime(容器运行时)
  • containerd:docker 公司从原来的 docker 引擎中剥离出来的容器核心功能,具有镜像管理和容器隔离两大功能,底层使用 runc
  • rkt:CoreOS 公司提出的容器引擎技术,一直作为 docker 的直接竞争对手存在,对于促进容器标准化贡献很大
Cloud Native Network
  • cni(Container Network Interface):kubernetes 和 CoreOS 提出的容器网络接口标准,旨在为容器平台提供统一的网络访问模式,目前很多网络方案都已经集成进来
  • calico:基于 BGP 的纯三层网络方案,性能很高,并且提供强大的网络防火墙功能,以满足用户对安全性的需求
  • canal:基于 flannel 和 calico 提供 kubernetes pod 之间网络防火墙的项目
  • contiv:思科推出的网络方案,支持 vxlan 和 vlan 方案,提供了多租户和主机访问控制策略功能
  • cilium:利用 Linux 原生技术提供的网络方案,支持 L7 和 L3、L4 层的访问策略
  • flannel:CoreOS 主要的容器网络项目,主要用于 kubernetes 平台提供 pod 之间的连通性,提供多种连网方案,部署和管理简单

Orchestration & Management(编排和管理)

Scheduling & Orchestration
  • kubernetes
  • docker swarm
  • mesos:apache 旗下的任务调度平台,后来应用于容器调度
Coordination & Service Discovery
  • Zookeeper:Hadoop 的一个子项目,本来是作为 Hadoop 集群管理的数据存储,目前也被应用到容器领域,开发语言是 Java。一个缺点是使用和维护比较复杂
  • Consul:HashiCorp 开发的分布式服务发现和配置管理工具,docker swarm 集群之前默认使用的就是这个
  • Etcd:CoreOS 旗下的键值存储工具,是 kubernetes 默认的选择,因
    此使用范围很广
RemoteCall
  • Grpc
  • Thrift
  • Dubbo
Service Proxy

作为服务网格的数据面板,部署为 sidecar,调解和控制微服务之间所有的网络通信

  • Envoy
  • Nginx
Api Gateway
  • Kong:Mashape 开源的项目,基于 openrestry(Nginx + Lua) 的微服务网关,以插件为中心组织功能
  • Nginx:Nginx Plus 产品为企业提供负载均衡、代理、微服务网关的各种功能
  • Spring Cloud Gateway Netflix 微服务网关
Service Mesh
  • linkerd:开源的网络代理服务,使用 scala 语言编写,最早提出了 service mesh 的概念
  • Istio:Google、IBM 和 Lyft 联合发布的微服务管理、配置和监控框架,使用 envoy 或者 linkerd 作为数据面板,控制层面负责配置和管理,深度集成到 kubernetes 平台

Application

Database & Data Warehouse
  • Sql 关系型: MySQL、DB2、oracle DB、postgreSQL、MariaDB 等
  • Nosql
    KV : redis、couchbase 等
    文档: MongoDB、rethinkDB、ravenDB 等
    列式: Cassandra、Hbase、vertica(列式关系数据库)、scylla等
  • newSQL : F1/spanner,cockroachDB 和 TiDB等
  • TSDB : druid,openTSDB等
Streaming & Messaging
Streaming
  • Flink
  • Spark
Messaging
  • kafka
  • rabbitMQ
  • rocketMQ
Source Code Management
  • github
  • gitlab
  • bitbucket
Application Definition & Image Build
  • Helm:Helm是Kubernetes的包管理工具。它就像APT/Yum/ Homebrew *
  • OPEN API:标准化的 API 接口,OpenAPI (aka Swagger v2.0)
  • Telepresence可以让你在本地调试服务,本地开发和和对远程Kubernetes 集群的调试
  • habitat:应用自动化管理平台,可以定义应用,并且提供 Supervisor 来保证应用的正确运行
  • Packer:通过一个 yaml 文件,生成各种虚拟化平台的镜像
Continuous Integration & Delivery
CI
  • jenkins 算是这个领域的翘楚,非常经典的一款软件,功能强大稳定,拥有很丰富的插件,算是开源界使用比较广泛的工具
  • travis CI 为开源的 github 项目免费,对私有项目收费,因此很多 github 上项目能看到它的身影
  • circleCI、 codeship、shippable、semaphore 都是 PaaS 产品,提供在线的 CI、CD 服务,一般提供免费和企业收费两种版本
  • drone:原生支持 docker 的 CI 开源产品,使用 go 编写,整个工作流都是基于 docker 的,最终也会自动化构建 docker 镜像,push 到 registry 上
  • gitlab runner:gitlab 提供的 CI 工具,gitlab CI 和 gitlab runner 一起工作,前者做控制,后者实际执行任务
CD
  • spinnaker:开源的 CD 软件,可以在多个云平台上进行部署,也可以集成CI工具来构建 *

Platform(平台)

PaaS/Container Service
  • heroku 是老牌的公有云类型的 PaaS 平台,界面友好,成熟稳定,所有操作提供命令行实现自动化,提供完整的监控和日志方案。
  • cloud foundry 是 Pivotal 开源,支持多种语言、框架、云平台,旨在让开发者能够忽略架构问题,快速部署和扩展应用;
  • openshift 是 redhat 开源的,功能和 cloud foundry 差不多
Kubernetes 授权的 installer,host,distribution
  • datawire 基于 kubernetes,侧重于微服务的管理;
  • containerShip 也是 kubernetes 的管理平台,可以在多个云平台自动化部署和统一管理;
  • Giant Swarm 提供混合云和多租户的 kubernetes 管理;
  • kubermatic 能够给用户提供一键 kubernetes 集群安装和多集群管理服务;
  • Gravitational 提供多 region 的 kubernetes 集群管理
  • atomist 和 cloud66 侧重于 devOps 流程;
  • flynn 是基于 docker 容器技术的开源 PaaS 软件,相比 cloud foundry 算是轻量级的实现;
  • hyper.sh 比较有趣,它们以容器接口来提供虚拟机服务。
  • Apcera: 一个企业级的容器管理平台,包括了运行容器所需编排、网络和安全功能。Apcera的一个特点是支持传统的应用,同时兼容传统应用和云原生应用,支持把前者迁移到云上
  • apprenda:PaaS 云平台软件公司,基于 kubernetes 打造的应用管理平台,目前的商业版本 ACP(Apprenda Cloud Platform)提供了 kerberos 身份认证、应用审计等额外功能
  • convox:基于 AWS 的应用部署、管理、监控的平台服务,提供了命令行实现任务的自动化
  • DC/OS:mesos 的企业级产品,是一套开源项目,基于 mesos 分布式系统和 marathon,提供了编排、应用商店、GUI 界面等功能
  • Diamanti 也是一家解决方案公司,基于 kubernetes 调度平台,同时支持 openshift PaaS 平台
  • docker:没有看错,这里的 docker 指的是 docker 公司,而不是容器技术。作为一家商业化的公司,docker 也提供了商业化的产品和解决方案,开源的部分称为 docker CE(community edition),商业化产品为 docker EE(Enterprise Edition)
  • mitantis cloud platform:原来有名的 openstack 公司,目前也逐渐接纳 kubernetes,一起构建云平台
  • moby project:docker 公司把开源组件命名成 moby,意在把多个开源技术组件按照需求组合成满足用户需求的产品,docker CE 就是其中的产出
  • platform9:同时支持 openstack 和 kubernetes 为核心的 Paas 服务
  • portainer.io:docker 的界面化管理工具
  • rancher:容器管理平台,之前同时支持 swarm、mesos 和 kubernetes,目前把重心逐渐迁移到 kubernetes 上
  • tectonic:coreOS 推出的 kubernetes 集群服务,集成了 quay 镜像服务、coreOS 系统、和 promethues 监控等
  • ubuntu:ubuntu 系统也内嵌了 LXD 容器技术,提供更多的容器技术

Observability & Analysis

Monitoring
  • zabbix 是老牌的监控工具,功能强大,最近界面也改进了不少;
  • Nagios 和 graphite 是另外两个经典的监控工具。
  • sensu 是一款较新的监控工具,Riemann 也能够进行分布式系统的集中式监控处理。
  • Prometheus:SoundCloud 是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的,云原生监控工具 *
  • grafana:监控管理界面,能够从多个数据源导入数据,提供优美的界面和丰富的面板配置
  • coscale:专门为容器和微服务优化的监控平台
  • sentry:错误收集工具,能够集中式地查看应用的 crash report 和 traceback 信息
  • server density:专注于服务监控的 SaaS 服务平台
  • statsD:etsy 开源的数据统计信息,可以把数据继续发到后端的监控平台,比如 graphite
  • sysdig:容器和 kubernetes 监控工具,同时提供了付费的监控服务
Logging
  • fluented 是一个开源的基于数据流(stream)的日志收集框架;
  • graylog 是另外一个开源的选择,它们的思想都是把日志从系统各处收集起来进行统一分析、过滤和管理;
  • elastic 提供 ELK(Elasticsearch、Logstash、Kibana) 技术栈负责日志收集,也提供在线的企业级 Saas 服务。
Tracing
  • opentracing是一个开放的 tracing 接口标准和文档,提供了各种语言客户端的实现,支持的 tracing 工具包括 Jaeger、appdash 和 Zipkin(twitter 开源);
  • Cloud Sleuth 是 spring cloud 全家桶中一员,主要负责 tracing 功能。
Chaos Engineering
  • Chaos Monkey:通过干掉pods来测试系统健壮性和可靠性。功能包括:网络故障模拟、服务重定向、资源限制等。

Serverless/Event-based

云厂商产品
  • AWS Lambda
  • 微软的 Azure functions
  • Google的 Cloud functions
serverless 开发框架
  • openFaas、fission 和 kubeless 都是基于 docker 和 kubernetes 开源的 serverless 开发框架,如果要想打造自己的 serverless 平台可以参考。
  • serverless 是一个集成工具,它能帮助开发者在 serverless 应该部署到 AWS Lambda、Azure Functions、GCP Cloud Functions、kubeless 等平台,也就是说它封装了这些平台差异,提供了一致的接口,方便迁移和管理多 serverless 平台应用

总结

本文介绍了,围绕着kubernetes的 CNCF云原生组织,认识了其生态上的技术,这些标准,技术和软件也是构建微服务落地的常用解决方案,其中有业界广泛使用的开源技术,并且和厂商,平台无关。

另外,从云原生给出的应用发展路线图,可以看到,正在逐渐向ServiceMesh服务网格,FAAS无服务技术演进。

参考:
https://landscape.cncf.io/
https://cizixs.com/2017/12/30/cncf-cloud-native-landscape