K8S调试利器:telepresence2使用文档

createh52周前 (06-24)技术教程4

telepresence2主要解决的问题

  • 帮助开发人员对kubernetes进行调试以及问题分析;
  • 开发人员无需再将本地开发运行到Kubernetes内部;
  • 可以提高团队间的实时协作,以及对环境创建进行预览;

telepresence能够将本地的开发程序插入到kubernetes集群内部,使得程序的环境看起来像在pod内部;并且在本地开发过程中,可以使用k8s内部所有的网络服务以及DNS名称;

工作原理

在使用telepresence后,其会在集群内部创建一个小型代理,路由流量会在一个安全网络隧道之间来回;

在kubernetes内部可以使用命令查看到代理名称;

[root@k8s-master-0 ~]# kubectl get ns
NAME              STATUS   AGE
ambassador        Active   30d
[root@k8s-master-0 ~]# kubectl get all -n ambassador
NAME                                   READY   STATUS    RESTARTS   AGE
pod/traffic-manager-85cb46d955-nhlfr   1/1     Running   0          26h

NAME                      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE
service/traffic-manager   ClusterIP   None         <none>        8022/TCP,8081/TCP   26h
1
NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/traffic-manager   1/1     1            1           26h

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/traffic-manager-85cb46d955   1         1         1       26h

快速入门

PS:可以自行查看官方文档

安装

从github上可以下载最新版,目前使用的最新版为:2.2.2

# 解压
tar -zxvf telepresence-2.2.2.tar.gz
cd telepresence-2.2.2
# 设置环境变量
export TELEPRESENCE_VERSION=v2.2.2
make build 
mv ./telepresence $GOBIN/telepresence

安装kubectl

telepresence需要往集群内部安装代理,所以在开发及其上需要安装kubectl;

安装完成后,从kubenetes集群内拷贝配置文件;

scp -r root@10.222.222.11:/root/.kube/config /root/.kube/config
# 执行kubectl 
kubectl get pod

实战

在集群内部创建测试pod:

# 创建deploy
kubectl create deploy hello --image=luksa/kubia
# 暴露服务
kubectl expose deploy hello --port 80 --target-port 8080

telepresence2的命令包括:

Available Commands:
  Session Commands:
    connect              连接集群
    login                登录Ambassador Cloud #无需用到
    logout               退出Ambassador Cloud	#无需用到
    license              获取版本信息Ambassador Cloud#无需用到
    status               查看连接状态
    quit				 退出
  Traffic Commands:
    list                 列举当前可以拦截的服务
    intercept            拦截一个服务
    leave                退出拦截服务
    preview              
  Other Commands:
    version              查看版本
    uninstall            卸载集群中的代理插件
    dashboard            打开一个dashboard(需要联网)
    current-cluster-id  

连接集群

telepresence connect
Launching Telepresence Daemon v2.3.2 (api v3)
Connecting to traffic manager...
Connected to context kubernetes-admin@kubernetes (https://<clusterip>:6443)

查看连接状态

# telepresence status
Root Daemon: Running
  Version     : v2.3.2 (api 3)
  DNS : ""
User Daemon: Running
  Version           : v2.3.2 (api 3)
  Ambassador Cloud  : Logged out
  Status            : Connected
  Kubernetes server : https://cluster-ip:6443
  Kubernetes context: kubernetes-admin@kubernetes
  Telepresence proxy: ON (networking to the cluster is enabled)
  Intercepts        : 0 total

查看当前可以拦截服务

# telepresence list --namespace default
nginx-demo: ready to intercept (traffic-agent not yet installed)

tips: --namespace可以指定k8s的命名空间;

其默认是根据kubectl的配置进行展示的;

访问集群内部的服务

[root@localhost bin]# curl hello.platform/
You've hit hello-66cff46dc-khm9q

在本机拦截服务

【存在问题,后续更新】

FAQ

  • 在安装过程中,可能存在某些操作超时的情况,如:
telepresence: error: connector.Connect: the traffic manager gRPC API timed out.  The current timeout 15s can be configured as "timeouts.trafficManagerAPI" in "/root/.config/telepresence/config.yml"
rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /tmp/telepresence-connector.socket: connect: connection refused"

通过查看消息可知,请求代理的API超时,可以通过提示修改超时时间;

  • 访问应用过程中,出现如下错误:
[root@localhost telepresence-2.2.2]# curl http://hello.platform
curl: (56) Recv failure: Connection reset by peer

可查看svc资源是否运行正确;

作者:TangLyan
链接:
https://juejin.cn/post/6976246800566976549

来源:掘金

相关文章

代码调试,教给你

昨天我和一些朋友一起调试代码,他们做程序员这一行都不太久,我向他们展示了一些代码调试技巧。今天早上我在想,我应该如何教授他们学习代码调试?我在Twitter上发了一条推文说,我从来没有见过任何好的调试...

彻底搞懂容器启动、停止、调试的每一个细节!

开篇导读许多刚接触 Docker 的开发者都有一个误区:“镜像构建完就万事大吉,run 一下就部署成功了。”实际上,在生产环境中,我们面对的是:容器突然崩了?容器内怎么调试?怎么优雅重启?怎么持久化数...

使用VS Code调试PhpStudy环境里的代码

最近几个月把所有项目都迁过来 VS Code 了(除了因为Unity调试问题反而用回了 Visual Studio),PHP也就抛弃了最强的 PhpStorm 。这段时间抽空在帮朋友处理PHP项目,然...

容器网络调试怎么办?一条命令就搞定!

nsenter 命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于 util-linux 包中。用途一个最典型的用途就是进入容器的网络命令空间。相当多的容器为了轻量级,是不包含较为基础的命...

线上项目CPU,内存都跑满了,怎么调试?

记得第一次当整个电商项目负责人的时候,在使用量高峰期时,运维的同事突然跑过来说,xx服务的某台机器的CPU,内存暴了(OOM了),赶紧想办法怎么做。当时的心情既高兴,又紧张。高兴的是产品真的有使用在使...

手把手教你nginx解决前端本地跨域问题

收到很多私信,有许多同学遇到本地开发静态文件,想要调试远程接口的问题,教大家一个解决跨域调试常用的方法。有什么其他问题也欢迎大家关注私信我,看到的会一一解答。先下载nginx,因为大部分人是windo...