如何在 Kubernetes 中启用无服务器计算

Knative 是在 Kubernetes 平台上开发无服务器应用程序的更快、更简便的方法。
186 位读者喜欢这篇文章。
Kubernetes

Jason Baker。CC BY-SA 4.0。

在本系列关于在开源平台上使用无服务器的前两篇文章中,我介绍了如何开始使用无服务器平台以及如何在流行的语言中编写函数,以及如何在 Apache OpenWhisk 上使用容器构建组件。

在第三篇文章中,我将引导您在 Kubernetes 环境中启用无服务器。Kubernetes 是管理无服务器工作负载和微服务应用程序容器的最流行平台,并使用细粒度的部署模型来更快、更轻松地处理工作负载。

请记住,无服务器不仅可以帮助您减少基础设施管理,同时利用实际服务使用的消费模式,还可以提供云平台提供的许多功能。有许多无服务器或 FaaS(函数即服务)平台,但 Kubernetes 是构建无服务器平台的一流选择,因为有超过 13 个基于 Kubernetes 的无服务器或 FaaS 开源项目

然而,Kubernetes 不允许您以原生方式构建、服务和管理无服务器工作负载的应用程序容器。例如,如果您想在 Kubernetes 上构建 CI/CD 管道,以从源代码构建、测试和部署云原生应用程序,则需要使用您自己的发布管理工具并将其与 Kubernetes 集成。

同样,除非您使用构建在 Kubernetes 上的独立无服务器或 FaaS 平台,例如 Apache OpenWhiskRiffKubeless,否则很难将 Kubernetes 与无服务器计算结合使用。更重要的是,对于开发人员来说,仍然很难学习 Kubernetes 环境如何处理来自云原生应用程序的无服务器工作负载的特性。

Knative

Knative 的诞生是为了让开发人员能够原生创建无服务器体验,而无需依赖额外的无服务器或 FaaS 框架和许多自定义工具。Knative 具有三个主要组件——BuildServingEventing——用于解决在 Kubernetes 平台上开发无服务器应用程序的常见模式和最佳实践。

要了解更多信息,让我们从开发人员的角度出发,了解使用 Knative 提高生产力并解决 Kubernetes 难题的常用开发流程。

步骤 1: 使用 Spring InitializrThorntail Project Generator 从头开始生成您的云原生应用程序。开始使用 12 要素应用方法实施您的业务逻辑,您还可以进行集成测试,以查看该功能在许多本地测试工具中是否正常工作。

Spring Initializr screenshot
Thorntail Project Generator screenshot

步骤 2: 通过 Knative Build 组件从您的源代码存储库构建容器镜像。您可以定义多个步骤,例如安装依赖项、运行集成测试以及将容器镜像推送到您安全镜像仓库,以使用现有的 Kubernetes 原语。更重要的是,Knative Build 使开发人员的日常工作更轻松、更简单——“枯燥但困难”。这是一个 Build YAML 的示例

apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
  name: docker-build
spec:
  serviceAccountName: build-bot
  source:
    git:
      revision: master
      url: https://github.com/redhat-developer-demos/knative-tutorial-event-greeter.git 
  steps: 
  - args:
    - --context=/workspace/java/springboot 
    - --dockerfile=/workspace/java/springboot/Dockerfile 
    - --destination=docker.io/demo/event-greeter:0.0.1 
    env:
    - name: DOCKER_CONFIG
      value: /builder/home/.docker
    image: gcr.io/kaniko-project/executor
    name: docker-push

步骤 3: 通过 Knative Serving 组件将您的容器应用程序部署为无服务器工作负载并提供服务。此步骤展示了 Knative 在自动扩展 Kubernetes 上的无服务器容器,然后在特定时间段(例如,两分钟)内没有对容器的请求时将其缩减为零方面的优势。更重要的是,Istio 将自动以多种安全方式处理无服务器工作负载的入口和出口网络流量。这是一个 Serving YAML 的示例

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: greeter
spec:
  runLatest: 
    configuration:
      revisionTemplate:
        spec:
          container:
            image: dev.local/rhdevelopers/greeter:0.0.1

步骤 4: 通过 Knative 的 Eventing 组件,将正在运行的无服务器容器绑定到各种事件平台,例如 SaaS、FaaS 和 Kubernetes。在此步骤中,您可以定义事件通道和订阅,这些通道和订阅通过消息传递平台(例如 Apache KafkaNATS 流)传递到您的服务。这是一个事件溯源 YAML 的示例

apiVersion: sources.eventing.knative.dev/v1alpha1
kind: CronJobSource 
metadata:
  name: test-cronjob-source
spec:
  schedule: "* * * * *"
  data: '{"message": "Event sourcing!!!!"}'
  sink:
    apiVersion: eventing.knative.dev/v1alpha1
    kind: Channel
    name: ch-event-greeter 

结论

使用 Knative 进行开发将节省在 Kubernetes 环境中构建无服务器应用程序的大量时间。它还可以让开发人员的工作更轻松,让他们专注于开发无服务器应用程序、函数或云原生容器。

下一步阅读
danieloh
技术营销,开发者倡导者,CNCF 大使,公开演讲者,出版作者,Quarkus,红帽运行时

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.