从 Kyma 官网 得悉,Kyma 是一个云原生利用程序运行环境,它将 Kubernetes 提供的弱小容器编排性能与若干世界级的开源组件和工具相结合,使开发人员可能开发、运行和操作平安且可扩大的云原生应用程序。
Kubernetes 提供了一个框架,用于运行基于容器的分布式系统。 咱们能够将容器视为一个十分轻量级的虚拟机,其中蕴含一小块应用逻辑,这些逻辑服务于一些更大的应用程序,也就是微服务。 Kubernetes 提供了许多用于治理容器生命周期的组件,让开发人员能够抉择应用程序依赖项,例如消息传递总线、监控、日志记录等。
Kyma 构建于 Kubernetes 之上,解决了与微服务架构、事件生产、身份验证、日志记录、跟踪、监控和警报相干的需要。 此外,服务目录容许应用凋谢服务代理轻松应用超大规模提供商提供的云服务,以及应用应用程序连接器连贯到 Kyma 的服务。 应用程序连接器容许开发人员轻松连贯任何应用程序并以平安的形式公开其 API 和事件。
本文通过一个 Node.js 利用开发和部署的例子,来介绍 Kyma 这个云原生平台的应用形式。
1. Kyma 环境的 provision
登录 SAP BTP 控制台,点击 Enable Kyma
按钮,启用平台对 Kyma 运行环境的反对:
创立一个 Kyma 实例:
在后盾,正在建设一个新的 Kubernetes 集群,Kyma 运行时及其所有组件将在其中运行。
要关上 Kyma 运行时控制台 UI,单击子账户概览页面的 Kyma 环境局部下的链接到仪表板。
仪表板或 Kyma 控制台 UI 是开发者在 Kyma 运行时治理和部署应用程序或服务的图形界面。 应用仪表板,开发人员不仅能够部署或删除部署,还能够对它们进行扩大治理,通过自定义 API 规定公开它们等等。
当然,Kyma 运行时是一个 Kubernetes 集群,因而咱们也能够应用工具 kubectl 通过命令行治理资源和配置。
kubectl 工具依赖于一个名为 kubeconfig 的配置文件来配置对集群的拜访。
在 Kyma 控制台下载这个 kybeconfig
配置文件:
而后设置环境变量即可。
- Linux:
export KUBECONFIG=<KUBECONFIG_FILE_PATH>
- Windows:
$ENV:KUBECONFIG=<KUBECONFIG_FILE_PATH>
2. 应用 Express Generator 创立 Node.js 利用
应用 Express Generator 创立一个 Node.js 应用程序框架,并将一些片段作为根本应用程序增加到后端。
应用命令行:
npx express-generator --view=jade kyma-multitenant-node
创立好的利用层级构造如下:
Node.js 利用的路由(Routing
)是指确定应用程序如何响应客户端对特定端点的申请,该端点是 URI(或门路)和特定的 HTTP 申请办法(GET、POST 等)。
每个路由能够有一个或多个处理函数,当路由匹配时执行。
路由定义采纳以下构造:
app.METHOD(PATH, HANDLER)
减少下列的路由实现,咱们就失去了一个最简略的 Hello World 级别的 Node.js 利用:
router.get("/", function(req, res, next) {
try {
var line1 = "Hello " + req.authInfo.getLogonName();
var line2 = "your tenant sub-domain is " + req.authInfo.getSubdomain();
var line3 = "your tenant zone id is " + req.authInfo.getZoneId();
var responseMsg = line1 + "; " + line2 + "; " + line3;
res.send(responseMsg);
} catch (e) {
console.log("AuthInfo object undefined.");
var responseMsg = "Hello World!";
res.send(responseMsg);
}
});
3. 部署 Node.js 利用到 Kyma 云原生平台
在 SAP BTP 管制台上,找到要部署的 tenant 的 subdomain:
在 Kyma 仪表板中,在下载的 kubeconfig.yml 文件或 Kyma 仪表板的 URL 中找到残缺的 Kyma 集群域。
为了在 Kyma Runtime(或任何基于 Kubernetes 的平台)上运行代码,咱们须要为步骤2 开发的 Node.js 应用程序提供一个 OCI 映像(也称为 Docker 映像)。 原则上能够自由选择映像构建工具,本文应用 Cloud Native Buildpacks (CNB)。
命令行工具包反对提供 buildpack 和本地源代码并从中创立 OCI 映像。
首先装置命令行工具 pack
:
brew install buildpacks/tap/pack
当咱们谈到存储库名称时,咱们指的是 Docker Hub 中常见的帐户和存储库名称的组合:
<docker-hub-account>/<repo-name>
。
比方 tiaxu/multitenant-kyma-backend.
因为只能在 free 的 Docker hub 帐户中创立一个公有存储库,因而存储在 Docker hub 中的 Docker 映像将具备不同的标记名称,以便它们能够存储在一个存储库下。 因而,寻址图像将包含标签名称:<docker-hub-account>/<repo-name>:<tag-name>
。 一个例子是 tiaxu/multitenant-kyma-backend:v1
。
应用如下命令行构建镜像文件:
pack build multitenant-kyma-backend --builder paketobuildpacks/builder:full
docker tag multitenant-kyma-backend <docker-hub-account>/multitenant-kyma-backend:v1
上面将构建好的镜像文件公布到 Docker Hub:
首先登录 Docker:
docker login -u <docker-id> -p <password>
而后进行镜像公布:
docker push <docker-hub-account>/multitenant-kyma-backend:v1
因为 OCI 映像存储在 Docker Hub 中,因而咱们须要提供对 Kyma 集群的访问信息,以便能够从这些存储库中提取映像,并依据 Docker 帐户替换占位符值:
`kubectl -n multitenancy-ns create secret docker-registry registry-secret –docker-server=https://index.docker.io/v1/ –docker-username=<docker-id> –docker-password=<password> –docker-email=<email>
`
对应的 yaml 文件如下:
imagePullSecrets:
- name: registry-secret # replace with your own registry secret
创立 Kyma 部署形容文件,这也是一个 yaml 格局的文件:
---
apiVersion: gateway.kyma-project.io/v1alpha1
kind: APIRule
metadata:
creationTimestamp: null
labels:
app: kyma-multitenant-node-multitenancy
release: multitenancy
name: kyma-multitenant-node-multitenancy
spec:
gateway: kyma-gateway.kyma-system.svc.cluster.local
rules:
- accessStrategies:
- handler: allow
methods:
- GET
- POST
- PUT
- PATCH
- DELETE
- HEAD
path: /.*
service:
host: <subaccount-subadomain>-node.<cluster-domain> # replace with the values of your account
name: kyma-multitenant-node-multitenancy
port: 8080
status: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: kyma-multitenant-node-multitenancy
release: multitenancy
name: kyma-multitenant-node-multitenancy
spec:
replicas: 1
selector:
matchLabels:
app: kyma-multitenant-node-multitenancy
release: multitenancy
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: kyma-multitenant-node-multitenancy
release: multitenancy
spec:
automountServiceAccountToken: true
imagePullSecrets:
- name: registry-secret # replace with your own registry secret
containers:
- env:
- name: PORT
value: "8080"
- name: TMPDIR
value: /tmp
image: <docker-hub-account>/multitenant-kyma-backend:v1 # replace with your Docker Hub account name
livenessProbe:
exec:
command:
- nc
- -z
- localhost
- "8080"
failureThreshold: 1
initialDelaySeconds: 60
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 60
name: kyma-multitenant-node-multitenancy
ports:
- containerPort: 8080
readinessProbe:
exec:
command:
- nc
- -z
- localhost
- "8080"
failureThreshold: 1
initialDelaySeconds: 60
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 60
resources:
limits:
ephemeral-storage: 256M
memory: 256M
requests:
cpu: 100m
ephemeral-storage: 256M
memory: 256M
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: false
volumeMounts:
- mountPath: /tmp
name: tmp
securityContext:
runAsNonRoot: true
volumes:
- emptyDir: {}
name: tmp
status: {}
---
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: kyma-multitenant-node-multitenancy
release: multitenancy
name: kyma-multitenant-node-multitenancy
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
app: kyma-multitenant-node-multitenancy
release: multitenancy
status:
loadBalancer: {}
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
labels:
release: multitenancy
name: multitenancy
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
name: istio-system
podSelector:
matchLabels:
app: istio-ingressgateway
podSelector:
matchLabels:
release: multitenancy
policyTypes:
- Ingress
应用下列的命令行进行部署:
kubectl -n multitenancy-ns apply -f k8s-deployment-backend.yaml
部署胜利后,回到 Kyma 控制台,找到主动生成的能拜访该 Node.js 利用的 url:
至此,Node.js 利用的开发,以及部署到 Kyma 云原生平台的步骤就介绍结束。