利用Telepresence和Kubernetes进行快速开发

远程互动

“Telepresence” 是什么意思?

Telepresence是CNCF(Cloud Native Computing Foundation)的Sandbox项目之一。
它是一个可以代理Kubernetes从本地到远程的请求和从远程到本地的请求的工具。
由于这样说可能还不够清楚,所以我们来看具体的用例。

在本地容器和Kubernetes上的容器之间进行交换

在开发微服务时遇到的问题

スクリーンショット 2019-07-05 11.00.35.png

如果只想修复服务A的功能,可以使用Telepresence,可以将本地容器和Kubernetes上的容器进行互换。

スクリーンショット 2019-07-05 11.00.35.png
スクリーンショット 2019-07-05 11.20.57.png

可以做到这一点。
这样一来,就不需要在本地构建服务B的环境了。

命令是如下的。

$ telepresence --swap-deployment {サービスAのDeployment名} --docker-run --rm -it {サービスAのDocker Image名}

如果想要挂载本地的卷并运行容器,可以按照下面的方式进行。这样,即使更改了源代码也无需重新创建镜像,可以实现快速开发。

$ telepresence --swap-deployment {サービスAのDeployment名} --docker-run --rm -v /Users/akira/work/service_a:/var/app/current -p 3000:3000 {サービスAのDocker Image名}
スクリーンショット 2019-07-07 14.30.38.png

Kubernetesからローカルのportへリクエストを流す

即使不在本地运行容器,也可以将请求流向本地端口。

创建一个新的Deployment,并将请求流向本地的端口。

然而,在Kubernetes上,无法进行服务名解析,因此无法访问。

$ telepresence --new-deployment {新しいDeployment名} --expose 3000 --run bundle exec rails s
スクリーンショット 2019-07-07 14.49.09.png

将现有的Deployment替换,并将请求流向本地的端口。

然而,由于无法通过Kubernetes上的服务进行名称解析,无法访问。(只需要一个选项)

$ telepresence --swap-deployment {サービスBのDeployment名} --expose 3000 --run bundle exec rails s
スクリーンショット 2019-07-07 14.51.01.png

访问Kubernetes集群内的服务

使用Telepresence可以轻松访问Kubernetes集群内的服务。
例如,您可以从本地向Kubernetes服务B的Service发送请求。

$ telepresence --run curl http://service-b:3000/users/hoge
スクリーンショット 2019-07-07 14.51.01.png

在Kubernetes的容器中运行的命令不仅仅是curl,还可以做许多其他事情。

由于Kubernetes服务并不一定可以从集群外访问,因此在这种情况下,以下方法在调试时非常有用。

请参考

    • Telepresence で EKS 上の k8s クラスタをデバッグする

 

    • Telepresence で Microservices on Kubernetes の開発環境構築

 

    マイクロサービスのTelepresenceを使ったローカル開発環境の話
广告
将在 10 秒后关闭
bannerAds