使用 Lens Desktop 監控和調試 Kubernetes
Lens Desktop 是免費的。你可以查看 https://app.k8slens.dev/subscribe 來了解更多內容。Lens Desktop 有如下優勢:
- 簡單高效 —— 你無需學習
kubectl
命令 - 可視化已有的 Kubernetes 資源
- 基于開源代碼構建
- 可觀測性 —— 實時的統計數據、事件和日志流
- 錯誤和警告可以直接在 Lens 儀表盤上看到
- 支持 EKS、AKS、GKE、Minikube、Rancher、k0s、k3s、OpenShift
- 強大的社區支持 —— 有 450000 用戶,在 GitHub 上共獲得 17000 星
Minikube 安裝
Minikube 是一個用于本地運行 Kubernetes 的工具。它運行一個單節點的 Kubernetes 集群,這樣就可以在 Kubernetes 上進行日常軟件開發的實踐工作。
我們將使用 Minikube 并驗證 Lens 的用法。首先讓我們在基于 Windows 的系統上安裝 Minikube。你也可以把它安裝在其他操作系統、虛擬機或筆記本電腦上。
- 2 核以上 CPU
- 2GB RAM
- 20GB 空閑硬盤空間
- 能連接網絡
- 容器或虛擬機管理器,如 Docker、VirtualBox
在終端或命令提示符處,運行 minikube start
命令:
minikube start --driver=virtualbox
* minikube v1.12.3 on Microsoft Windows 10 Home Single Language 10.0.19044 Build 19044
* Using the virtualbox driver based on existing profile
* minikube 1.26.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.26.0
* To disable this notice, run: ‘minikube config set WantUpdateNotification false’
* Starting control plane node minikube in cluster minikube
* virtualbox “minikube” VM is missing, will recreate.
* Creating virtualbox VM (CPUs=2, Memory=3000MB, Disk=20000MB) ...
! This VM is having trouble accessing https://k8s.gcr.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* Preparing Kubernetes v1.18.3 on Docker 19.03.12 ...
* Verifying Kubernetes components...
* Enabled addons: default-storageclass, storage-provisioner
* Done! kubectl is now configured to use “minikube”
進入你的 VirtualBox,并驗證剛安裝的 Minikube 虛擬機功能正常(圖 1)。
Figure 1: Minikube virtual machine in virtual box
使用 minikube status
命令,查看狀態是否與下面的輸出一致:
C:\>minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
然后,使用 kubectl cluster-info
命令查看 KubeDNS 詳情:
kubectl cluster-info
Kubernetes master is running at https://192.168.99.103:8443
KubeDNS is running at https://192.168.99.103:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
你可以使用 kubectl cluster-info dump
命令來調試和診斷集群問題。
當 Minikube 安裝完成后,安裝 kubectl
(https://kubernetes.io/docs/tasks/tools/)。它是一個命令行集群,用于對 Kubernetes 集群和 Minikube 執行命令。
Figure 2: Lens
執行 kubectl get nodes
命令獲取所有 節點node
C:\>kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 7m57s v1.18.3
使用 kubectl get all
命令獲取默認命名空間下的所有詳情:
C:\>kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7m58s
我們現在已經有一個 Minikube 集群,并準備好了 Kubectl。下一步是安裝和配置 Lens,并用示例應用程序來驗證。
Lens 的安裝和配置
打開 https://k8slens.dev/ ,下載與你的操作系統匹配的安裝包。
然后,參照屏幕上的教程來安裝 Lens,安裝完成后打開 Lens。你會發現在目錄中有一個 minikube
(圖 3)。
Figure 3: Lens catalogue
點擊 “minikube” 后,你就進入了 Minikube 的世界,你會愛上它的。
點擊 節點node 獲取有關 kubectl get nodes
命令輸出的 節點node
現在,你可以使用 Lens 了。
Figure 4: Lens cluster
我們現在部署 https://github.com/GoogleCloudPlatform/microservices-demo,這是一個云原生微服務演示應用程序。它有 11 層的微服務應用,是一個基于網絡的電子商務應用。
下載這個應用程序,把它解壓到與 Minikube 相同的目錄。
進入 release
目錄,執行以下命令。
kubectl apply -f kubernetes-manifests.yaml
deployment.apps/emailservice created
service/emailservice created
deployment.apps/checkoutservice created
service/checkoutservice created
deployment.apps/recommendationservice created
service/recommendationservice created
deployment.apps/frontend created
service/frontend created
service/frontend-external created
deployment.apps/paymentservice created
service/paymentservice created
deployment.apps/productcatalogservice created
service/productcatalogservice created
deployment.apps/cartservice created
service/cartservice created
deployment.apps/loadgenerator created
deployment.apps/currencyservice created
service/currencyservice created
deployment.apps/shippingservice created
service/shippingservice created
deployment.apps/redis-cart created
service/redis-cart created
deployment.apps/adservice created
service/adservice created
安裝過程現在應該已經開始了,不過它需要一些時間來反映出我們使用了 kubectl
命令。
Figure 5: Lens nodes
kubectl get pods
NAME READY STATUS RESTARTS AGE
adservice-775d8b9bf5-cp7jr 0/1 Pending 0 8h
cartservice-79749895f5-jrq4d 1/1 Running 0 8h
checkoutservice-5645bf9c65-882m4 1/1 Running 0 8h
currencyservice-545c79d477-8rhg7 1/1 Running 0 8h
emailservice-7cc5c74b4f-hk74s 1/1 Running 0 8h
frontend-9cdf787f5-klfkh 1/1 Running 1 8h
loadgenerator-7b6874cb4c-645v9 1/1 Running 0 8h
paymentservice-5f74bc7b87-l4248 1/1 Running 0 8h
productcatalogservice-6846f59899-v4q4w 1/1 Running 0 8h
recommendationservice-d9c6c8b55-m2x9k 1/1 Running 0 8h
redis-cart-57bd646894-v7kfr 0/1 Pending 0 8h
shippingservice-8685dd9855-pmgjm 1/1 Running 0 8h
表 1 列出了你可以通過 kubectl
來獲取信息的幾個命令。
Figure 6: Lens pods
描述 | 命令 |
列出節點 |
|
列出集群中的所有資源 |
|
列出部署 |
|
顯示部署的完整狀態 |
|
修改集群上的部署 |
|
刪除部署 |
|
列出容器莢 |
|
刪除容器莢 |
|
顯示容器莢的完整狀態 |
|
在 Shell 中運行一個單容器莢 |
|
列出機密信息 |
|
列出服務 |
|
列出服務的完整狀態 |
|
修改集群中的服務 |
|
列出命名空間 |
|
打印容器莢日志 |
|
打印容器莢中特定容器的日志 |
|
Lens 不僅可以幫你獲取表 1 中列出的所有信息,它還可以獲取指定集群的信息。我們還能用 Lens 來對 Kubernetes 資源進行編輯和刪除操作。
Figure 7: Lens deployments
我們來看下是如何操作的。在 工作負載Workloads 部分選擇 容器莢Pod(圖 6),我們能通過 Lens 來編輯、刪除、查看日志、訪問 容器莢Pod
Figure 8: Lens Replicasets
你可以驗證 工作負載Workloads 區域中所有 部署deployments(圖 7),工作負載Workloads 區域中所有 副本Replicasets (圖 8),配置Config 區域中所有 密鑰Secrets (圖 9),以及 網絡Network 區域中所有 服務Services
Figure 9: Lens Secrets
你可以看到,跳轉到所有的資源以及在一個地方高效地查看所有資源就是如此輕松。我們可以用 Lens 修改 YAML 文件,在運行時應用它來查看變更。
Figure 10: Lens Services
對于配置在不同的云服務商部署的多個集群,我們仍可以用 Lens 來進行觀察和故障處理。
(題圖:MJ/069da8c5-9043-46b3-9b14-87a0ffc6bb35)