云原生架构技术分享
Posted 南京德睿能源研究院
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生架构技术分享相关的知识,希望对你有一定的参考价值。
什么是云原生?
早在2015年Pivotal公司的Matt Stine写了一本叫做迁移到云原生应用架构的小册子,其中探讨了云原生应用架构的几个主要特征:
• 符合12因素应用
• 面向微服务架构
• 自服务敏捷架构
• 基于API的协作
• 抗脆弱性
到了2015年Google主导成立了云原生计算基金会(CNCF),起初CNCF对云原生(Cloud Native)的定义包含以下三个方面:
• 应用容器化
• 面向微服务架构
• 应用支持容器的编排调度
云原生(Cloud Native)的定义
到了2018年,随着近几年来云原生生态的不断壮大,所有主流云计算供应商都加入了CNCF基金会,且从Cloud Native Landscape中可以看出云原生有意蚕食原先非云原生应用的部分。CNCF基金会中的会员以及容纳的项目越来越多,该定义已经限制了云原生生态的发展,CNCF为云原生进行了重新定位。以下是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.
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
图:云原生定义
为什么是Kubernetes
Cloud Native的基石
容器最初是通过开发者工具而流行,通过cgroup和namespaces,使得进程之间相互隔离,即进程虚拟化,可以使用它来做隔离的开发测试环境和持续集成环境,这些都是因为容器轻量级,易于配置和使用带来的优势。
Kubernetes是容器编排系统的事实标准,让容器应用进入大规模工业生产。
在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos和Kubernetes的大战已经基本宣告结束,Kubernetes成为了无可争议的赢家。
微服务——Cloud Native的应用架构。
微服务带给我们很多开发和部署上的灵活性和技术多样性,但是也增加了服务调用的开销、分布式系统管理、调试与服务治理方面的难题。将微服务与容器结合,极大的方便了我们开发运维人员,通过容器编码工具,我们可以轻松实现服务动态伸缩、服务故障转移、服务灰度发布等等原本很难实现的功能,这就是云原生架构带来的好处。
图:当前架构现状
Harbor是由VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。
作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
-
不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会 更简单,更省成本 。 -
通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作 效率更高 。 -
特别适合储存 Kubernetes Pod 日志; 诸如 Pod 标签之类的元数据会被自动删除和编入索引。 -
受 Grafana 原生支持。
Loki 由以下3个部分组成:
• loki是主服务器,负责存储日志和处理查询。
• promtail是代理,负责收集日志并将其发送给 loki 。
• Grafana用于 UI 展示。
Prometheus server是一个时序数据库,与一般时序数据库不同的是,Prometheus是专门存储应用指标的,只能通过主动拉取的方式采集指标。拉取的终端可以是专门定制的exporters,如node exporter、mysql exporter、redis exporter等,也可以是pushgateway。
Prometheus提供了一套查询语言用来查询指标——PromQL。通过PromQL我们可以很好的查询历史指标,也可以通过设置一些规则对异常指标进行告警。
服务治理
调用链分析
在一个分布式系统中,追踪一个事务或者调用流一般如上图所示。虽然这种图对于看清各组件的组合关系是很有用的,但是,它不能很好显示组件的调用时间,是串行调用还是并行调用。
服务网格
DevOps
图:CI/CD的一种实现思路
CI/CD的一种实现具体流程:
1. 用户本地完成开发;
2. 代码提交到GitLab上;
3. Gitlab收到代码提交请求后通过webhook触发Jenkins;
4. Jenkins被触发后,首先从代码仓库拉取源码,进行构建、静态分析和单元测试,然后创建镜像推送到镜像仓库Harbor,最后调用Kubernetes API更新应用;
5. Kubernetes从Harbor拉取最新镜像,更新应用。
往期推荐
以上是关于云原生架构技术分享的主要内容,如果未能解决你的问题,请参考以下文章
Quarkus技术系列「云原生架构基建」打造基于Quarkus的云原生微服务框架实践