在本教程中,了解在 IBM Cloud Kubernetes Service (IKS) 上使用 Istio 安装 Knative、构建映像并将其推送到 IBM Cloud Container Registry 以及部署 nodejs 应用程序是多么容易。

在进入说明之前,让我们快速了解 Knative 是什么以及它的关键组件是什么。

Knative 扩展了 Kubernetes,以提供开发人员创建现代、以源代码为中心、基于容器的云原生应用程序所需的缺失构建块。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--O8ivla6C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/280/1%2ApzF__5c3GXD8phF0pCBcfQ.png)

Knative 项目下的每个组件都试图识别常见模式并编写成功的基于 Kubernetes 的实际框架和应用程序共享的最佳实践,例如:

  • 编排源到容器的工作流程

  • 在部署期间路由和管理流量

  • 根据需求扩展和调整资源

  • 将运行服务绑定到事件生态系统

Knative 专注于每个人都需要的“无聊但困难”的部分,但没有人能从自己重做中受益。这反过来又使开发人员可以将更多时间用于编写应用程序代码,而不必担心他们将如何构建、部署、监控和调试它。

什么是Knative组件?

目前,Knative 包含以下顶级存储库:

  • 构建和构建模板 — 自动、可重复的服务器端容器构建

  • 服务 — 缩放为零,请求驱动的计算

  • eventing — 事件的管理和交付

随着更多领域的确定,我们预计此列表会增加。

先决条件

  • 节点和 npm

  • 下载安装ibmcloud命令行工具

设置 CLI

如果您已经安装了带有 ibmcloud 插件的 ibmcloud CLI,则可以跳过这些步骤。_

  • 安装cs(container-service)和cr(container-registry)插件
$ ibmcloud plugin install container-service -r Bluemix

$ ibmcloud plugin install container-registry -r Bluemix
  • 授权 ibmcloud:
$ ibmcloud login

创建Kubernetes集群并设置Istio

在本部分中,您将在 IBM Cloud Kubernetes 服务 (IKS) 上供应 Kubernetes 集群并安装 Istio + Knative 组件。

  • 设置环境变量

  • 按照步骤创建 Kubernetes 集群(始终选择stable版本)

  • 由于 Knative 依赖于 Istio,我们安装最新版本的 Istio

$ kubectl apply --filename https://raw.githubusercontent.com/knative/serving/master/third_party/istio-1.0.2/istio.yaml

[](https://res.cloudinary.com/practicaldev/image/fetch/s--yVblYX-z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images- 1.medium.com/max/1024/1%2AogetR49JlqDlMJeA9Sj87Q.png)

安装 Istio

  • 使用 istio-injectionu003denabled 标记默认命名空间:kubectl label namespace default istio-injectionu003denabled

  • 监控 Istio 组件,直到所有组件都显示 STATUS 正在运行或已完成:kubectl get pods --namespace istio-system

  • 按照说明进行操作在 IKS 集群上安装 Knative 组件

  • 要检查 Knative 安装,请运行以下命令

kubectl api-resources | grep knative

需要 kubectl 客户端 1.11 或以上版本

[](https://res.cloudinary.com/practicaldev/image/fetch/s--tRAE1ZNF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/1024/1%2AvSO4ZX1LYIs-UlDatTPfYg.png)

验证 Knative 安装

构建和部署应用程序

本节使用helloworld-nodejsapp 的 rehash。有关其他编程语言(Go、Python、C#、Java 等)的代码示例,请参阅Knative 服务示例应用程序

  • 克隆repo并 cd 到文件夹中
$ git clone https://github.com/VidyasagarMSC/knative-deploy.git

$ cd knative-deploy
  • 安装依赖
$ npm install
  • 通过替换和值构建 Docker 映像并将其推送到 IBM Cloud Container Registry
$ ibmcloud cr build -t registry.<region>.bluemix.net/<namespace>/knative-node-app .

注意: 要检查您的区域,请运行 ibmcloud cr region 并设置新的命名空间,请参阅此链接

  • 在 service.yaml 中,替换图像值并运行以下命令
$ kubectl apply --filename service.yaml
  • 要查找服务的 IP 地址,请使用 kubectl get svc knative-ingressgateway -n istio-system 获取集群的入口 IP。如果您的集群是新集群,则服务可能需要一段时间才能获得外部 IP 地址。
$ export IP_ADDRESS=$(kubectl get svc knative-ingressgateway --namespace istio-system --output 'jsonpath={.status.loadBalancer.ingress[0].ip}')
  • 要查找服务的 URL,请使用 kubectl get services.serving.knative.dev knative-node-app --output jsonpathu003d'{.status.domain}'
$ export HOST_URL=$(kubectl get services.serving.knative.dev knative-node-app --output jsonpath='{.status.domain}')
  • 现在您可以向您的应用发出请求以查看结果。
$ curl -H "Host: ${HOST_URL}" http://${IP_ADDRESS}

**Response:** Knative Node App running on IBM Cloud

从 kubernetes 集群内的 Dockerfile 将源构建到容器映像中,并将映像推送到 IBM Cloud Container Registry;所有这一切都使用谷歌的 Kaniko 工具,按照帖子](https://medium.com/@VidyasagarMSC/build-a-container-image-inside-a-k8s-cluster-and-push-it-to-ibm-cloud-container-registry-abac9b1e5246)中的步骤[

清理

  • 运行以下命令从集群中删除示例应用程序
$ kubectl delete --filename service.yaml
  • 要删除集群(删除所有内容),请输入以下命令:
$ ibmcloud cs cluster-rm $CLUSTER_NAME

问题或疑虑?在 Twitter 上联系 — VidyasagarMSC

延伸阅读

  • Using Kaniko — 在 K8s 集群中构建容器镜像并将其推送到 IBM Cloud Container Registry

  • Knative使用 LogDNA 记录

  • Knative使用 Sysdig 监控

  • Knative监控

  • IBM、Google 催生 Knative Serverless Cloud 项目

  • Knative 文档


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐