利用Telepresence和Kubernetes进行快速开发
远程互动
“Telepresence” 是什么意思?
Telepresence是CNCF(Cloud Native Computing Foundation)的Sandbox项目之一。
它是一个可以代理Kubernetes从本地到远程的请求和从远程到本地的请求的工具。
由于这样说可能还不够清楚,所以我们来看具体的用例。
在本地容器和Kubernetes上的容器之间进行交换
在开发微服务时遇到的问题

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


可以做到这一点。
这样一来,就不需要在本地构建服务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名}

Kubernetesからローカルのportへリクエストを流す
即使不在本地运行容器,也可以将请求流向本地端口。
创建一个新的Deployment,并将请求流向本地的端口。
然而,在Kubernetes上,无法进行服务名解析,因此无法访问。
$ telepresence --new-deployment {新しいDeployment名} --expose 3000 --run bundle exec rails s

将现有的Deployment替换,并将请求流向本地的端口。
然而,由于无法通过Kubernetes上的服务进行名称解析,无法访问。(只需要一个选项)
$ telepresence --swap-deployment {サービスBのDeployment名} --expose 3000 --run bundle exec rails s

访问Kubernetes集群内的服务
使用Telepresence可以轻松访问Kubernetes集群内的服务。
例如,您可以从本地向Kubernetes服务B的Service发送请求。
$ telepresence --run curl http://service-b:3000/users/hoge

在Kubernetes的容器中运行的命令不仅仅是curl,还可以做许多其他事情。
由于Kubernetes服务并不一定可以从集群外访问,因此在这种情况下,以下方法在调试时非常有用。
请参考
-
- Telepresence で EKS 上の k8s クラスタをデバッグする
-
- Telepresence で Microservices on Kubernetes の開発環境構築
- マイクロサービスのTelepresenceを使ったローカル開発環境の話