云平台
上一篇文章,介绍了用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