作者:Kentaro Wakayama
翻译:Bach(才云)
校对:星空下的文仔(才云)、bot(才云)
在过来的十年中,云计算有了微小的增长。依据 Gartner 预测,2020 年寰球公共云服务市场将增长 17%,总额将达到 2664 亿美元,远高于 2019 年的 2278 亿美元。云计算使世界上一些大型公司重塑并主导其所在行业。这些公司的产品基于云服务,并利用云原生技术来比竞争对手做到更快,更具适应性。许多企业采纳了云原生技术,并将概念引入其外部部署应用程序。
理解和抉择正确的云原生技术对于进步开发速度、缩小开发和保护工具及基础架构至关重要。这篇文章形容了值得理解的云原生技术,并举荐了能够应用的云原生工具。
K8sMeetup
什么是云原生?
云原生对于速度和敏捷性,这是对于云的劣势,更快地解决业务挑战并升高 IT 老本。CNCF 提供了一个官网的定义:
云原生技术有利于各组织在私有云、公有云和混合云等新型动静环境中,构建和运行可弹性扩大的利用。云原生的代表技术包含容器、服务网格、微服务、不可变基础设施和申明式 API。
这些技术可能构建容错性好、易于治理和便于察看的松耦合零碎。联合牢靠的自动化伎俩,云原生技术使工程师可能轻松地对系统作出频繁和可预测的重大变更。
简而言之,云原生的指标是依照业务需要,速度地向用户或客户交付软件产品。
云原生技术具备以下长处:
- 速度:疾速开发并部署云原生应用程序,缩短产品上市工夫。许多云应用云原生组件,以轻松托管应用程序。
- 可扩展性和可用性:解决 100 个客户的云原生应用程序能够无缝扩大到服务数百万个客户。资源能够做到始终适应需要,与传统的动态扩大资源相比,这样无疑节俭了资金。此外,诸如主动故障转移和蓝绿部署的技术也已被植入云原生工具中。
- 品质:开发云原生应用程序时要牢记不可变性(immutability)和去耦性,这能够进步应用程序健壮性并易于保护,从而晋升软件品质。因为云原生技术是开源的,并由 CNCF 反对,因而公司能够防止供应商锁定,并从社区的保护和开发工作中受害。
K8sMeetup
如何实现云原生
要迁徙到云原生零碎,咱们须要一种相似以下的结构化办法:
- 纵向:抉择一项不是要害的服务,而后将其启动,迁徙到云原生技术上。
- 横向:专一于单个云原生性能,例如继续集成(CI)或继续交付(CD),并将其部署在所有现有服务中。
抉择非关键工作零碎能够升高危险,同时最大水平进步胜利迁徙的几率。
K8sMeetup
云原生工具
以下是云原生工具的列表,利用全套工具的公司通常领有更快的速度、更少的阻力以及更低的开发和保护老本。
微服务(Microservice)
微服务将产品性能划分为能够独自部署的单元。例如,在传统的部署中,通常只有一个网站服务来治理 API 和客户交互。应用微服务,咱们能够将该网站合成为多种服务,例如结帐服务和用户服务,而后别离开发、部署和扩大这些服务。
此外,微服务通常是无状态的,利用十二因素利用(twelve-factor application)可充分利用云原生工具提供的灵活性。
- 举荐技术:Node.js
- 代替技术:Kotlin,Golang
继续集成、继续部署(CI/CD)
CI/CD 是基础架构组件,它反对自动测试执行(以及可选的部署),以响应版本控制事件(例如拉取申请和合并)。CI/CD 使公司可能施行质量检验,例如单元测试、动态剖析或安全性剖析。CI/CD 是云原生生态系统中的根底工具,能够进步工程效率并缩小谬误。
- 举荐技术:Gitlab CI/CD
- 代替技术:Github Actions
容器
容器是云原生生态系统的外围,可通过简化开发人员操作来实现速度和品质的晋升。通过将容器与诸如 Docker 之类的工具一起应用,团队能够指定其零碎依赖性,同时提供对立且通用的执行层。该层使基础架构团队可能操作单个基础架构,例如容器编排工具(如 Kubernetes)。团队能够将容器镜像存储在容器注册表中,大多数状况下,该注册表还会提供破绽剖析和细粒度的访问控制。
- 举荐技术:Docker
- 代替技术:Podman、LXD
容器编排
容器编排工具用于启动和治理大量容器并打消特定语言或特定团队的部署策略。它们容许用户指定容器镜像、镜像组以及一些配置。编排人员采纳这些标准并将其转换为正在运行的工作负载。容器编排工具使基础架构团队可能保护单个基础架构组件,该组件能够执行任何合乎 OCI 标准的容器。
- 举荐技术:Kubernetes
- 代替技术:Google Cloud Run
基础架构即代码(Infrastructure as Code)
基础架构即代码是一种将云配置置于版本控制之下的策略。公司通常通过治理面板进行配置来手动治理云资源,但手动配置的跟踪更改十分艰难。基础架构即代码通过将云资源定义为代码并将其置于版本控制之下来解决此问题。在代码中对基础架构配置进行更改,并通过公司的部署过程来进行更改,其中能够包含同行评审(peer review)、CI/CD。版本控制提供了一个审核日志,该日志显示谁更改了资源、更改了哪些资源以及何时进行了更改。
- 举荐技术:Terraform
- 代替技术:Pulumi
Secret
Secret 治理对于云原生解决方案至关重要,但规模较小时经常被疏忽。Secret 能够是任何私密的货色,例如明码、私钥和 API 凭证。Secret 应该加密并存储在配置中。成熟的解决方案通过长期数据库凭证或轮换凭证的公布,从而使 Secret 治理更加平安。寻找适合的 Secret 治理解决方案对于云原生利用至关重要,因为容器化服务能够程度扩大,并在许多不同的机器上进行调度。疏忽 Secret 治理的组织会进步凭证透露的危险。
- 举荐技术:Vault
- 代替技术:Sealed Secrets
证书
通过 TLS 进行平安通信是必不可少的最佳实际,这在基于容器的解决方案中尤其重要,因为许多不同的服务可能在同一台物理计算机上运行,如果不进行加密,攻击者能够取得主机网络的拜访权限,读取服务之间的所有流量。另外,为云原生部署手动更新证书并不可行,这也是须要自动化解决方案的一个起因。
- 举荐技术:cert-manager
- 代替技术:Google 托管证书
API 网关
API 网关是反向代理,具备超过传统反向代理(例如 Apache 和 NGINX)的性能。API 网关反对:
- 诸如 gRPC、HTTP/2 和 Websockets 协定。
- 动静配置。
- 互相 TLS。
- 路由。
- 弹性原语(Resiliency primitive),例如速率限度和断路。
- 指标可见性。
- 举荐技术:Kong
- 代替技术:Ambassador
日志
日志是可察看性的根底。日志是团队十分相熟并常常拜访的中央,它是可察看性的要害。日志对于理解零碎中正在产生的事件至关重要。云原生工具强调指标的工夫序列,因为它们比存储日志更具老本效益。
- 举荐技术:EFK
- 代替技术:Loki
监控
监控零碎会将重要事件按工夫序列存储。监控数据是聚合的,这意味着它不会存储所有事件,这使得云原生零碎须要思考老本效益。另外,了解云原生零碎的状态须要明确以下问题:
- 正在进行多少次操作?
- 操作的后果(胜利、失败或状态代码)是什么?
- Operation 须要多长时间?
- 重要资源(例如队列深度或线程池)的计数是多少?
咱们能够为监控指标调配不同的维度,以深刻理解单个计算机、操作系统、版本等性能。
- 举荐技术:Prometheus、Grafana
- 代替技术:Datadog
告警
告警使日志和指标具备可操作性,可将零碎问题告诉给管理员,并能与工夫序列指标进行配对。例如,当 HTTP 500 状态代码减少或申请持续时间减少时,告警性能能够告诉团队。告警对于云原生零碎至关重要,假使没有告警,咱们将不会收到无关事件的告诉,那公司就无奈晓得呈现了问题。
- 举荐技术:Prometheus Alertmanager
- 代替技术:Grafana Alerts
追踪
云原生技术缩小了启动和扩大服务的开销,这样团队通常会公布比云前更多的服务。追踪使团队可能监控服务之间的通信 ,并能简略地可视化整个终端用户的通信以及通信的每个阶段。 当呈现性能问题时,团队能够查看产生了哪些服务谬误以及事务的每个阶段破费了多长时间。跟踪是下一级的察看和调试工具,可通过容许团队更快地调试问题来显着缩小停机工夫。
- 举荐技术:Jaeger
- 代替技术:Zipkin
服务网格
服务网格像是云网络的治理利器,它们能够提供动静路由、负载平衡、服务发现、网络策略和弹性原语,例如断路器、重试和期限(deadline)。服务网格是云原生体系结构在负载平衡方面的拓展。
- 举荐技术:Istio
- 代替技术:Consul
原文链接:https://codersociety.com/blog…