Kyma官网介绍,Kyma是结合了Kubernetes强大的容器编排能力和多个世界级开源组件的云原生应用运行环境和工具相结合,它们使开发人员能够开发、运行和操作安全且可扩展的云原生应用程序。Kubernetes提供了一个运行基于容器的分布式系统的框架。我们可以将容器视为一个非常轻量级的虚拟机,其中包含一小部分应用程序逻辑,为一些更大的应用程序提供服务,也称为微服务。Kubernetes提供了许多用于管理容器生命周期的组件,允许开发人员选择应用程序依赖项,例如消息总线、监控、日志记录等。Kyma建立在Kubernetes之上,解决了与微服务架构、事件消费、身份验证、日志记录、跟踪、监控和警报相关的需求。此外,服务目录允许使用OpenServiceBroker轻松使用来自超大规模提供商的云服务,以及使用应用程序连接器连接到Kyma的服务。应用程序连接器允许开发人员轻松连接任何应用程序并以安全的方式公开其API和事件。本文以Node.js应用开发部署为例,介绍云原生平台Kyma的使用方法。1.Kyma环境提供登录SAPBTP控制台,点击启用Kyma按钮,使平台支持Kyma运行环境:创建Kyma实例:后台正在建立新的Kubernetes集群,Kyma运行时及其所有组件都将在其中运行。要打开Kyma运行时控制台UI,请单击子账户概览页面的Kyma环境部分下的仪表板链接。仪表板或Kyma控制台UI是开发人员在Kyma运行时管理和部署应用程序或服务的图形界面。使用仪表板,开发人员不仅可以部署或删除部署,还可以大规模管理它们、通过自定义API规则公开它们等等。当然,Kyma是作为Kubernetes集群运行的,所以我们也可以使用kubectl这个工具,通过命令行来管理资源和配置。kubectl工具依赖于一个名为kubeconfig的配置文件来配置对集群的访问。在Kyma控制台下载这个kybeconfig配置文件:然后设置环境变量。Linux:exportKUBECONFIG=Windows:$ENV:KUBECONFIG=2.使用ExpressGenerator创建Node.js应用程序使用ExpressGenerator创建Node.js应用程序框架,并添加一些片段作为基础应用程序到后端结尾。使用命令行:npxexpress-generator--view=jadekyma-multitenant-node创建的应用层级如下:Node.js应用路由(Routing)是指确定应用如何响应客户端对特定端点的请求.端点是一个URI(或路径)和一个特定的HTTP请求方法(GET、POST等)。每个路由可以有一个或多个处理函数,当路由被匹配时执行。路由定义采用如下结构:app.METHOD(PATH,HANDLER)添加如下路由实现,我们得到最简单的HelloWorld级Node.js应用:router.get("/",function(req,res,next){try{varline1="Hello"+req.authInfo.getLogonName();varline2="你的租户子域是"+req.authInfo.getSubdomain();varline3="你的租户区域id是"+req.authInfo.getZoneId();varresponseMsg=line1+";"+line2+";"+line3;res.send(responseMsg);}catch(e){console.log("AuthInfoobjectundefined.");varresponseMsg="HelloWorld!";res.send(responseMsg);}});3.将Node.js应用部署到Kyma云原生平台在SAPBTP控制台,找到要部署的租户的子域:在Kymadashboard中,在下载的kubeconfig.yml文件中找到完整的Kyma集群域,或者在Kyma仪表板的URL。为了在KymaRuntime(或任何基于Kubernetes的平台)上运行代码,我们需要为步骤2中开发的Node.js应用程序提供OCI镜像(也称为Docker镜像)。原则上可以自由选择镜像构建工具,本文使用CloudNativeBuildpacks(CNB)。命令行工具包支持提供构建包和本机源,并从中创建OCI映像。首先安装命令行工具包:brewinstallbuildpacks/tap/pack当我们谈论存储库名称时,我们指的是DockerHub中帐户和存储库名称的通常组合:/.例如tiaxu/multitenant-kyma-backend。由于一个免费的Dockerhub账户只能创建一个私有仓库,因此存放在Dockerhub中的Docker镜像会有不同的tag名称,这样可以将它们存放在一个仓库下。因此,寻址图像将包括标记名称:/:。一个例子是tiaxu/multitenant-kyma-backend:v1。使用以下命令行构建镜像文件:packbuildmultitenant-kyma-backend--builderpaketobuildpacks/builder:fulldockertagmultitenant-kyma-backend/multitenant-kyma-backend:v1镜像将下面构建发布文件到DockerHub:首先登录Docker:dockerlogin-u-p然后发布镜像:dockerpush/multitenant-kyma-backend:v1由于OCI镜像存储在DockerHub中,因此我们需要向Kyma集群提供访问信息,以便可以从这些存储库中拉取镜像,根据Docker帐户替换占位符值:`kubectl-nmultitenancy-ns创建秘密docker-registryregistry-secret--docker-server=https://index.docker.io/v1/--docker-username=--docker-password=--docker-email=`对应yaml文件如下:imagePullSecrets:-name:registry-secret#替换成你自己的registrysecret创建一个Kymadeployment描述文件,也是yaml格式的文件:---apiVersion:gateway.kyma-project.io/v1alpha1kind:APIRulemetadata:creationTimestamp:nulllabels:app:kyma-multitenant-node-multitenancyrelease:multitenancyname:kyma-multitenant-node-multitenancyspec:网关:kyma-gateway.kyma-system.svc.cluster.local规则:-accessStrategies:-处理程序:允许方法:-GET-POST-PUT-PATCH-DELETE-HEAD路径:/.*service:host:-node.#替换为你的账户名的值:kyma-multitenant-node-multitenancyport:8080status:{}---apiVersion:apps/v1kind:部署元数据:creationTimestamp:空标签:app:kyma-multitenant-node-multitenancyrelease:multitenancyname:kyma-multitenant-node-multitenancyspec:replicas:1selector:matchLabels:app:kyma-multitenant-node-multitenancyrelease:multitenancystrategy:{}模板:元数据:creationTimestamp:空标签:app:kyma-multitenant-node-multitenancyrelease:multitenancyspec:automountServiceAccountToken:trueimagePullSecrets:-name:registry-secret#替换为你自己的注册表秘密容器:-env:-name:PORTvalue:"8080"-name:TMPDIRvalue:/tmpimage:/multitenant-kyma-backend:v1#替换为你的DockerHub账户名livenessProbe:exec:command:-nc--z-localhost-"8080"failureThreshold:1initialDelaySeconds:60periodSeconds:30successThreshold:1timeoutSeconds:60name:kyma-multitenant-node-多租户端口:-containerPort:8080readinessProbe:exec:命令:-nc--z-localhost-“8080”failureThreshold:1initialDelaySeconds:60periodSeconds:30successThreshold:1timeoutSeconds:60资源:限制:临时存储:256M内存:256M请求:cpu:100m临时存储:256M内存:256MsecurityContext:allowPrivilegeEscalation:false功能:drop:-所有特权:falsereadOnlyRootFilesystem:falsevolumeMounts:-mountPath:/tmp名称:tmpsecurityContext:runAsNonRoot:真卷:-emptyDir:{}名称:tmpstatus:{}---apiVersion:v1kind:Servicemetadata:creationTimestamp:空标签:app:kyma-multitenant-node-multitenancyrelease:多租户名称:kyma-multitenant-node-multitenancyspec:ports:-port:8080protocol:TCPtargetPort:8080选择器:app:kyma-multitenant-node-multitenancyrelease:multitenancystatus:loadBalancer:{}---apiVersion:networking.k8s.io/v1kind:网络workPolicymetadata:creationTimestamp:nulllabels:release:multitenancyname:multitenancyspec:ingress:-from:-namespaceSelector:matchLabels:name:istio-systempodSelector:matchLabels:app:istio-ingressgatewaypodSelector:matchLabels:release:multitenancyTypes使用:InpolicyTypes部署以下命令行:kubectl-nmultitenancy-nsapply-fk8s-deployment-backend.yaml部署成功后,回到Kyma控制台,找到自动生成的可以访问Node.js应用的url:js介绍.js应用的开发和部署到Kyma云原生平台的步骤。