用Telepresence & Golang搭建云开发环境

Kubernetes 是一个容器编排平台,它使用户能够以任何规模部署和扩展他们的微服务应用程序:从一个服务到数千个服务。释放 Kubernetes 的力量通常比最初看起来更复杂——应用程序开发人员的学习曲线尤其陡峭。知道该做什么只是成功的一半,然后您必须选择最好的工具来完成这项工作。那么 Go 开发者如何在 Kubernetes 上创建快速有效的开发工作流呢?

应用程序开发人员在尝试在 Kubernetes 上创建高效的开发工作流时面临两个独特的挑战。

  1. 大多数开发工作流程都针对本地开发进行了优化,Kubernetes 应用程序被设计为云原生。

  2. 随着 Kubernetes 应用演变成复杂的微服务架构,开发环境也变得更加复杂,因为每个微服务都增加了额外的依赖项。这些服务很快开始需要比典型本地开发环境更多的资源。

在本教程中,我们将为 Kubernetes 设置开发环境并对 Golang 微服务进行更改。通常要在本地开发,我们必须等待容器构建,推送到注册表并部署以查看代码更改的效果。相反,我们将使用Telepresence来立即查看更改的结果。

步骤 1:部署示例微服务应用程序

对于我们的示例,我们将对在资源密集型 Java 服务和大型数据存储之间运行的 Go 服务进行代码更改。我们将首先部署一个包含 3 个服务的示例微服务应用程序:

  • VeryLargeJavaService:用 Java 编写的内存密集型服务,可为我们的应用程序生成前端图形和网页

  • DataProcessingService:管理两个服务之间的信息请求的 Golang 服务。

  • VeryLargeDataStore:一个大型数据存储服务,其中包含我们 Edgey Corp 商店的示例数据。

注意:我们将这些服务称为 VeryLarge 服务是为了强调您的本地环境可能没有足够的 CPU 和 RAM,或者您可能只是不想为每个开发人员支付所有额外的开销。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--WXqspdAP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/3200/0%2A7J_48_5o8juPX5E6)

在此架构图中,您会注意到来自用户的请求通过入口控制器路由到我们的服务。为简单起见,我们将在本教程中跳过部署入口控制器的步骤。如果您已准备好在自己的设置中使用 Telepresence,并且需要一种简单的方法来设置入口控制器,我们建议您查看Ambassador Edge Stack,它可以使用K8s Initializer轻松配置。

让我们将示例应用程序部署到您的 Kubernetes 集群:

    kubectl apply -f [https://raw.githubusercontent.com/datawire/edgey-corp-go/main/k8s-config/edgey-corp-web-app-no-mapping.yaml](https://raw.githubusercontent.com/datawire/edgey-corp-go/main/k8s-config/edgey-corp-web-app-no-mapping.yaml)

进入全屏模式 退出全屏模式

第二步:搭建本地Go开发环境

DataProcessingServiceDataProcessingServiceVeryLargeJavaServiceVeryLargeDataStore
  1. 从 GitHub 克隆此应用程序的存储库。
    git clone [https://github.com/datawire/edgey-corp-go.git](https://github.com/datawire/edgey-corp-go.git)

进入全屏模式 退出全屏模式

  1. 将目录更改为 DataProcessingService
    cd edgey-corp-go/DataProcessingService

进入全屏模式 退出全屏模式

1.启动Go服务器:

    go build main.go && ./main

进入全屏模式 退出全屏模式

  1. 看到你的服务正在运行!
    10:23:41 app | Welcome to the DataProcessingGoService!

进入全屏模式 退出全屏模式

  1. 在另一个终端窗口中, curl localhost:3000/color 可以看到服务返回蓝色。
    $ curl localhost:3000/color

    “blue”

进入全屏模式 退出全屏模式

第三步:网真快速发展

我们将使用 Telepresence,一个开源的云原生计算基金会项目,而不是等待构建容器镜像、推送到存储库并部署到我们的 Kubernetes 集群。 Telepresence 在您的本地开发和 Kubernetes 集群之间创建双向网络连接,以实现快速、高效的 Kubernetes 开发。

  1. 下载 Telepresence (~60MB):
    # Mac OS X
    sudo curl -fL [https://app.getambassador.io/download/tel2/darwin/amd64/latest/telepresence](https://app.getambassador.io/download/tel2/darwin/amd64/latest/telepresence) -o /usr/local/bin/telepresence

    #Linux
    sudo curl -fL https://app.getambassador.io/download/tel2/linux/amd64/latest/telepresence -o /usr/local/bin/telepresence

进入全屏模式 退出全屏模式

  1. 使二进制可执行
    $ sudo chmod a+x /usr/local/bin/telepresence

进入全屏模式 退出全屏模式

1.连接远程集群测试Telepresence

    $ telepresence connect

进入全屏模式 退出全屏模式

  1. 向 Kubernetes API 服务器发送请求:
    $ curl -ik [https://kubernetes.default.svc.cluster.local](https://kubernetes.default.svc.cluster.local)

    HTTP/1.1 401 Unauthorized
    Cache-Control: no-cache, private
    Content-Type: application/json
    Www-Authenticate: Basic realm="kubernetes-master"
    Date: Tue, 09 Feb 2021 23:21:51 GMT

进入全屏模式 退出全屏模式

伟大的!您已成功配置 Telepresence。现在,Telepresence 正在拦截您向 Kubernetes API 服务器发出的请求,并通过其与集群的直接连接而不是 Internet 进行路由。

第四步:拦截你的Golang服务

DataProcessingServiceDataProcessingService
  1. 创建截距
    telepresence intercept dataprocessingservice — port 3000

进入全屏模式 退出全屏模式

  1. 使用网真直接访问应用程序。访问http://verylargejavaservice:8080。同样,Telepresence 正在拦截来自浏览器的请求并将它们直接路由到 Kubernetes 集群。

  2. 现在,我们将进行代码更改。打开 edgey-corp-go/DataProcessingService/main.go 并将颜色变量的值从蓝色更改为橙色。保存文件,停止之前的服务器实例并使用 go build main.go && ./main 重新启动它。

  3. 在浏览器中重新加载页面,看看颜色是如何从蓝色变为橙色的!

而已!通过 Telepresence,我们看到了从编辑本地服务到看到这些更改在部署到更大的应用程序时的效果有多快。当您将其与我们在每次更改后构建和部署容器的原始过程进行比较时,很容易看出您可以节省多少时间,尤其是当我们进行更复杂的更改或运行更大的服务时。

了解有关网真的更多信息

今天,我们学习了如何使用 Telepresence 快速迭代运行在 Kubernetes 中的 Golang 微服务。现在,我们无需等待缓慢的本地开发流程,而是可以通过即时反馈循环和高效的云原生开发环境快速迭代。

如果您想了解有关 Telepresence 的更多信息,请查看以下资源:

  • 阅读文档

  • 观看演示视频

  • 阅读更多关于拦截

  • 了解预览 URL方便与队友协作

  • 加入我们的 Slack 频道与 Telepresence 社区联系

在我们的下一个教程中,我们将使用 Telepresence 设置本地 Kubernetes 开发环境,然后使用 Delve 设置断点并调试损坏的服务。要在有更多教程可用时收到通知,请确保查看我们的网站或在 Twitter上关注我们。