前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kyma - 轻松扩展和构建Kubernetes

Kyma - 轻松扩展和构建Kubernetes

作者头像
CNCF
发布2019-12-04 16:00:35
7520
发布2019-12-04 16:00:35
举报
文章被收录于专栏:CNCFCNCFCNCF

作者:Lukasz Gornicki(SAP)

根据最近完成的CNCF调查,云原生技术在生产中的采用率正在快速增长。Kubernetes是这场技术革命的核心。云原生技术的增长自然地伴随着围绕它的生态系统的增长。当然,云原生技术的复杂性也有所增加。只要谷歌搜索一下“Kubernetes是困难的”,你将获得大量解释这个复杂性问题的文章。CNCF社区最好的一点是,这样的问题可以通过聪明的人构建新的工具来解决,以支持Kubernetes用户:例如,像Knative这样的项目及其Build资源扩展,可以降低各种场景的复杂性。尽管增加复杂性似乎是需要解决的最重要的问题,但它并不是你在过渡到云原生环境时所面临的唯一挑战。

https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/

https://github.com/knative/build

要解决的问题

选择正确的技术是困难的

现在你已经了解了Kubernetes,你的团队已经接受了培训,并且已经开始在其上构建应用程序,现在是时候面对一个新的挑战层了。云原生并不仅仅意味着为开发者部署一个可以在其上构建的平台。开发者还需要存储、备份、监视、日志记录和服务网格来对传输中的数据执行政策。必须正确配置和部署这些单独的系统,并对其进行日志记录、监视和备份。CNCF在这提供帮忙。我们提供了所有云原生技术的景观(l.cncf.io),但是列表非常庞大,可能会让人无法承受。

这就是Kyma会让你的生活更容易的地方。它的使命是提供一种灵活和简单的方法来扩展应用程序。

http://kyma-project.io/

该项目旨在为你提供编写端到端、生产级云原生应用程序所需的工具。Kyma是SAP捐赠给开源社区的;SAP是一家在编写生产级云原生应用程序方面具有丰富经验的公司。这就是为什么我们如此兴奋地宣布第一个主要版本,Kyma 1.0!

决定从单体到云原生的路径是困难的

尝试谷歌搜索一下monolith to cloud native或monolith to microservices,你会得到一个列表,上面列出了大量应对这一挑战的演讲和论文。将一个单体迁移到云上有很多不同的方法,我们的经验告诉我们在这个领域要有自己的见解。首先,让我们回答一个问题:为什么要从单体迁移到原生云。推动这一举措的目标通常是:

  • 提高可伸缩性。
  • 更快地实现新功能。
  • 更灵活的方法实现可扩展性。

你不必重写你的单体来实现这些目标。为什么要花那么多时间重写已有的功能呢?只需集中精力使你的单体支持事件驱动的体系结构。

Kyma如何解决你的挑战?

Kyma是什么?

Kyma运行在Kubernetes上,由许多不同的组件组成,其中三个组件是:

  • Application Connector:你可以使用应用程序连接器将任何应用程序与Kubernetes集群连接起来,并通过Kubernetes服务目录公开其API和事件。
  • Serverless:它使你能够轻松地为你的应用程序编写扩展。你的函数代码可以由API调用触发,也可以由来自外部系统的事件触发。你还可以安全地从函数中回调集成的系统。
  • Service Catalog:服务目录用于公开集成系统。这种集成还允许你使用来自Azure、AWS或谷歌云等提供的服务。Kyma允许轻松集成由Microsoft和谷歌维护的官方服务代理。

你可以观看这个视频,了解基于真实演示场景的Kyma关键特性的简短概述。

https://www.youtube.com/watch?v=wJzVWFGkiKk

我们为你选择了正确的技术

只有进行了适当的监视和配置之后,才能在Kyma这样的项目中提供可靠的可扩展性。我们决定不重新发明轮子。在CNCF景观有许多伟大的项目,其中大多数背后都有巨大的社区。我们决定挑选最好的,然后把它们粘在一起。你可以看到上面相同的架构图,但重点是我们一起创建Kyma的项目:

  • 监测和警报是基于Prometheus和Grafana
  • 日志是基于Loki的
  • Eventing使用Knative和NATS
  • 资产管理使用Minio作为存储
  • 服务网格基于Istio
  • 跟踪使用Jaeger完成
  • 身份验证使用dex

你不必集成这些工具:我们确保它们都能很好地协同工作,并且总是最新的(Kyma已经在使用Istio 1.1)。通过我们自定义的Installer和Helm chart,我们可以轻松安装和升级到Kyma的新版本。

不要重写你的单体

重写是困难的,需要花费大量的金钱,而且在大多数情况下是不需要的。最终,你需要的是能够更快地编写并将新特性投入到生产中。你可以使用应用程序连接器(Application Connector)将单体连接到Kyma。简而言之,这个组件确保:

  • 你可以安全地回调已注册的单体,而不需要处理授权,因为应用程序连接器处理这个问题。
  • 从你的单体发送的事件安全地到达Kyma事件总线(Kyma Event Bus)。

目前,你的单体可以使用三种不同类型的服务:REST(使用OpenAPI规范)和OData(使用实体数据模型Entity Data Model规范)用于同步通信,而对于异步通信,你可以基于AsyncAPI规范注册事件目录。之后,你的事件将通过带有Knative事件的NATS流通道在内部交付。

一旦连接了单体的服务,就可以在选定的命名空间中提供它们,这要感谢前面提到的服务目录集成。作为开发者,你可以到目录,看到你可以使用的所有服务的列表。通过注册的服务代理(如Azure的OSBA),你可以从你的单体获得服务,也可以从其他第三方提供商获得服务。这是一个你需要一切的地方。如果你想建立一个新的应用程序,Kyma中已经提供了你需要的所有内容。

最后来看一些代码

查看一下我必须编写的一些代码,将Azure服务集成到一个单体中。我想了解客户在产品评论部分的感受。对于每一个带有评论的事件,我都想使用机器学习来调用一个情感分析服务,而对于负面评论,我想将它存储在数据库中,以便以后进行评论。这是由于我们的无服务器组件而创建的函数的代码。请注意我的代码注释:

你可以观看这段简短的视频来了解情绪分析功能的完整演示。

https://www.youtube.com/watch?v=wJzVWFGkiKk

/* It is a function powered by NodeJS runtime so I have to import some necessary dependencies. I choosed Azure's CosmoDB that is a Mongo-like database, so I could use a MongoClient */
const axios = require("axios");
const MongoClient = require('mongodb').MongoClient;


module.exports = { main: async function (event, context) {
    /* My function was triggered because it was subscribed to customer review event. I have access to the payload of the event. */
    let negative = await isNegative(event.data.comment)
    
    if (negative) {
      console.log("Customer sentiment is negative:", event.data)
      await mongoInsert(event.data)
    } else {
      console.log("This positive comment was not saved:", event.data) 
    }
}}


/* Like in case of isNegative function, I focus of usage of the MongoClient API. The necessary information about the database location and an authorization needed to call it is injected into my function and I just need to pick a proper environment variable. */
async function mongoInsert(data) {


    try {
          client = await MongoClient.connect(process.env.connectionString, { useNewUrlParser: true });
          db = client.db('mycommerce');
          const collection = db.collection('comments');
          return await collection.insertOne(data);
    } finally {
      client.close();
    }
}
/* This function calls Azure's Text Analytics service to get information about the sentiment. Notice process.env.textAnalyticsEndpoint and process.env.textAnalyticsKey part. When I wrote this function I didn't have to go to Azure's console to get these details. I had these variables automatically injected into my function thanks to our integration with Service Catalog and our Service Binding Usage controller that pairs the binding with a function. */
async function isNegative(comment) {
    let response = await axios.post(`${process.env.textAnalyticsEndpoint}/sentiment`,
      { documents: [{ id: '1', text: comment }] }, {headers:{ 'Ocp-Apim-Subscription-Key': process.env.textAnalyticsKey }})
    return response.data.documents[0].score < 0.5
}

多亏了Kyma,我不必担心围绕功能的基础设施。正如我所提到的,我在Kyma拥有所需的所有工具,并且它们被集成在一起。我可以通过Loki快速访问我的日志,也可以快速访问预先配置好的Grafana仪表板,以查看我的Lambda的度量,这多亏了Prometheus和Istio。

这种方法在添加新功能时提供了很大的灵活性。它还让你有时间重新考虑重写旧函数的需要。

贡献并给予反馈

Kyma是一个开源项目,我们很乐意帮助它成长。这需要你的帮助。读了这篇文章后,你已经知道我们并不想重新发明轮子。在我们的工作模型中,我们坚持这种方法,支持社区贡献者。我们在特殊兴趣小组工作,并有公开记录的会议,你可以随时参加,我们有一个类似于你从Kubernetes本身所知道的设置。你也可以通过Twitter或Slack与我们分享你的反馈。

https://github.com/kyma-project/community/tree/master/sig-and-wg

https://twitter.com/kymaproject

http://slack.kyma-project.io/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
服务网格
服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档