前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Telepresence在本地调试Kubernetes服务

用Telepresence在本地调试Kubernetes服务

作者头像
CNCF
发布2019-12-04 14:57:22
3K0
发布2019-12-04 14:57:22
举报
文章被收录于专栏:CNCFCNCF

使用 Homebrew/apt/dnf

安装 Telepresence

您的计算机上需要以下功能:

  • kubectl命令行工具(这里是安装说明)。
  • 使用计算机上的本地凭据访问您的Kubernetes集群。您可以通过运行kubectl get pod来测试这一点 - 如果这个工作你都准备好了。
  • 安装Telepresence,请按照此处的说明进行操作。

使用Telepresence在本地调试服务

假设您有一个在临时集群中运行的服务,并且有人报告了针对它的bug。为了找出您想要在本地运行服务的问题......但是服务依赖于集群中的其他服务,也许还依赖于像数据库这样的云资源。

在本教程中,您将了解Telepresence如何允许您在本地调试服务。我们将使用telepresence命令行工具把在临时集群中运行的版本换成在本地计算机上运行的由你控制的调试版本。然后,Telepresence将把来自Kubernetes的流量转发到本地进程。

您应该开始部署并公开服务如下所示:

代码语言:javascript
复制
$ kubectl run hello-world --image=datawire/hello-world --port=8000
$ kubectl expose deployment hello-world --type=LoadBalancer --name=hello-world

如果您的集群位于云端,您可以找到生成的服务的地址,如下所示:

代码语言:javascript
复制
$ kubectl get service hello-world
NAME          CLUSTER-IP     EXTERNAL-IP       PORT(S)          AGE
hello-world   10.3.242.226   104.197.103.123   8000:30022/TCP   5d

如果您在EXTERNAL-IP下看到<pending>,请等待几秒钟再试一次。在这种情况下,服务被公开在http://104.197.103.123:8000/

minikube上,你应该这样做来找到URL:

代码语言:javascript
复制
$ minikube service --url hello-world
http://192.168.99.100:12345/

一旦你知道地址,你就可以存储它的值(别忘了用真实地址替换它!):

代码语言:javascript
复制
$ export HELLOWORLD=http://104.197.103.13:8000

然后发送一个查询,它将由你的集群中运行的代码提供服务:

代码语言:javascript
复制
$ curl $HELLOWORLD/
Hello, world!

使用Telepresence交换部署

重要提示: 首次启动Telepresence可能需要一段时间,因为Kubernetes需要下载服务器端的镜像。

此时,您想要切换到本地开发服务,将集群上运行的版本替换为笔记本上运行的自定义版本。为了简化示例,我们将使用一个在笔记本电脑上本地运行的简单HTTP服务器:

代码语言:javascript
复制
$ mkdir /tmp/telepresence-test
$ cd /tmp/telepresence-test
$ echo "hello from your laptop" > file.txt
$ python3 -m http.server 8001 &
[1] 2324
$ curl http://localhost:8001/file.txt
hello from your laptop
$ kill %1

我们希望公开这个本地进程,以便从Kubernetes获取流量,替换现有的hello-world部署。

重要提示:您将要在网上公开您笔记本电脑上的Web服务器。这很酷,但也非常危险!确保当前目录中没有您不希望与整个世界分享的文件。

以下是您应该如何运行telepresence(您应该确保您仍然在上面创建的/ tmp / telepresence-test目录中):

代码语言:javascript
复制
$ cd /tmp/telepresence-test
$ telepresence --swap-deployment hello-world --expose 8000 \
               --run python3 -m http.server 8000 &

这有三件事:

  • 启动一个类似V**的进程,将查询发送到集群的相应DNS和IP范围。
  • --swap-deployment命令Telepresence将现有的hello-world pod替换为运行Telepresence代理的pod。退出时,原先的pod将恢复。
  • --run命令Telepresence运行本地Web服务器并将其连接到网络代理。

只要您将HTTP服务器留在telepresence中运行,就可以从Kubernetes集群中访问它。您从这儿离开......

......到这儿:

我们现在可以通过我们创建的服务的公共地址发送查询,并且它们将访问在您的笔记本电脑上运行的Web服务器,而不是之前运行的原始代码。等待几秒钟,Telepresence代理启动; 您可以通过以下方式检查其状态:

代码语言:javascript
复制
$ kubectl get pod | grep hello-world
hello-world-2169952455-874dd   1/1       Running       0          1m
hello-world-3842688117-0bzzv   1/1       Terminating   0          4m

一旦您看到新pod处于运行状态,您就可以使用新代理连接到笔记本电脑上的Web服务器:

代码语言:javascript
复制
$ curl $HELLOWORLD/file.txt
hello from your laptop

最后,让我们在本地终止Telepresence,这样您就不必担心其他人通过将其带到后台并按下Ctrl-C来访问本地Web服务器:

代码语言:javascript
复制
$ fg
telepresence --swap-deployment hello-world --expose 8000 --run python3 -m http.server 8000
^C
Keyboard interrupt received, exiting.

现在,如果我们等待几秒钟,旧代码将被重新交换。同样,您可以通过运行来检查交换状态:

代码语言:javascript
复制
$ kubectl get pod | grep hello-world

当新pod返回运行状态时,您可以看到一切都恢复正常:

代码语言:javascript
复制
$ curl $HELLOWORLD/file.txt
Hello, world!

总结

Telepresence允许您使用代理替换现有部署,该代理将流量重新路由到计算机上的本地进程。这使您可以通过在本地运行代码轻松调试问题,同时仍然允许本地进程完全访问您的临时或测试集群。

现在是时候清理服务了:

代码语言:javascript
复制
$ kubectl delete deployment,service hello-world

Telepresence可以做的远不止这些:有关详细信息,请参阅文档的参考部分https://www.telepresence.io/discussion/why-telepresence)。

文章转载自容器时代。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档