首頁 > 科技

K8S偵錯利器:telepresence2使用文件

2021-06-22 18:48:50

telepresence2主要解決的問題

  • 幫助開發人員對kubernetes進行偵錯以及問題分析;
  • 開發人員無需再將本地開發運行到Kubernetes內部;
  • 可以提高團隊間的實時協作,以及對環境創建進行預覽;

telepresence能夠將本地的開發程式插入到kubernetes叢集內部,使得程式的環境看起來像在pod內部;並且在本地開發過程中,可以使用k8s內部所有的網路服務以及DNS名稱;

工作原理

在使用telepresence後,其會在叢集內部創建一個小型代理,路由流量會在一個安全網路隧道之間來回;

在kubernetes內部可以使用命令檢視到代理名稱;

[root@k8s-master-0 ~]# kubectl get nsNAME              STATUS   AGEambassador        Active   30d[root@k8s-master-0 ~]# kubectl get all -n ambassadorNAME                                   READY   STATUS    RESTARTS   AGEpod/traffic-manager-85cb46d955-nhlfr   1/1     Running   0          26hNAME                      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGEservice/traffic-manager   ClusterIP   None         <none>        8022/TCP,8081/TCP   26h1NAME                              READY   UP-TO-DATE   AVAILABLE   AGEdeployment.apps/traffic-manager   1/1     1            1           26hNAME                                         DESIRED   CURRENT   READY   AGEreplicaset.apps/traffic-manager-85cb46d955   1         1         1       26h

快速入門

PS:可以自行檢視官方文件

安裝

從github上可以下載最新版,目前使用的最新版為:2.2.2

# 解壓tar -zxvf telepresence-2.2.2.tar.gzcd telepresence-2.2.2# 設定環境變數export TELEPRESENCE_VERSION=v2.2.2make 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:

# 創建deploykubectl 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 connectLaunching Telepresence Daemon v2.3.2 (api v3)Connecting to traffic manager...Connected to context kubernetes-admin@kubernetes (https://<clusterip>:6443)

檢視連線狀態

# telepresence statusRoot 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 defaultnginx-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.platformcurl: (56) Recv failure: Connection reset by peer

可檢視svc資源是否運行正確;

作者:TangLyan
連結:https://juejin.cn/post/6976246800566976549
來源:掘金


IT145.com E-mail:sddin#qq.com