应用远程调试
在集群中的应用出现问题是,可通过 kubectl exec 进入容器命令行终端进行问题诊断:
Pod 远程调试
# Pod 中只有一个容器时
kubectl exec -it pod-name /bin/bash
# Pod中有多个容器时
kubectl exec -it pod-name -c container-name /bin/bash
Servic 远程调试
service 的远程调试其实分为两个部分:
- 第一个部分是说我想将一个服务暴露到远程的一个集群之内,让远程集群内的一些应用来去调用本地的一个服务,这是一条反向的一个链路;
- 还有一种方式是我想让这个本地服务能够去调远程的服务,那么这是一条正向的链路。
在反向列入上面有这样一个开源组件,叫做 Telepresence ,它可以将本地的应用代理到远程集群中的一个 service 上面,使用它的方式如下所示:
telepresence --swap-deployment $Deployment_Name
首先将 Telepresence 的一个 Proxy 应用部署到远程的 K8s 集群里面。然后将远程单一个 deployment swap 到本地的一个 application,使用的命令就是 Telepresence-swap-deployment 然后以及远程的 DEPLOYMENT_NAME。通过这种方式就可以将本地一个 application 代理到远程的 service 之上、可以将应用在远程集群里面进行本地调试,这个有兴趣的同学可以到 GitHub 上面来看一下这个插件的使用的方式。
第二个是如果本地应用需要调用远程集群的服务时候,可以通过 port-forward 的方式将远程的应用调用到本地的端口之上。比如说现在远程的里面有一个 API server,这个 API server 提供了一些端口,本地在调试 Code 时候,想要直接调用这个 API server,那么这时,比较简单的一个方式就是通过 port-forward 的方式,使用它的方式如下所示:
kubectl port-forward svc/app -n app-namespace
它的使用方式是 kubectl port-forward,然后 service 加上远程的 service name,再加上相应的 namespace,后面还可以加上一些额外的参数,比如说端口的一个映射,通过这种机制就可以把远程的一个应用代理到本地的端口之上,此时通过访问本地端口就可以访问远程的服务。
具体用法可以参考这个:使用port-forward访问集群中的应用程序,以Redis 为例,地址:https://www.cnblogs.com/sanduzxcvbnm/p/12988236.html