使用 Lens Desktop 監(jiān)控和調(diào)試 Kubernetes
Lens Desktop 是免費(fèi)的。你可以查看 https://app.k8slens.dev/subscribe 來了解更多內(nèi)容。Lens Desktop 有如下優(yōu)勢:
- 簡單高效 —— 你無需學(xué)習(xí)
kubectl
命令 - 可視化已有的 Kubernetes 資源
- 基于開源代碼構(gòu)建
- 可觀測性 —— 實(shí)時(shí)的統(tǒng)計(jì)數(shù)據(jù)、事件和日志流
- 錯(cuò)誤和警告可以直接在 Lens 儀表盤上看到
- 支持 EKS、AKS、GKE、Minikube、Rancher、k0s、k3s、OpenShift
- 強(qiáng)大的社區(qū)支持 —— 有 450000 用戶,在 GitHub 上共獲得 17000 星
Minikube 安裝
Minikube 是一個(gè)用于本地運(yùn)行 Kubernetes 的工具。它運(yùn)行一個(gè)單節(jié)點(diǎn)的 Kubernetes 集群,這樣就可以在 Kubernetes 上進(jìn)行日常軟件開發(fā)的實(shí)踐工作。
我們將使用 Minikube 并驗(yàn)證 Lens 的用法。首先讓我們在基于 Windows 的系統(tǒng)上安裝 Minikube。你也可以把它安裝在其他操作系統(tǒng)、虛擬機(jī)或筆記本電腦上。
- 2 核以上 CPU
- 2GB RAM
- 20GB 空閑硬盤空間
- 能連接網(wǎng)絡(luò)
- 容器或虛擬機(jī)管理器,如 Docker、VirtualBox
在終端或命令提示符處,運(yùn)行 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”
進(jìn)入你的 VirtualBox,并驗(yàn)證剛安裝的 Minikube 虛擬機(jī)功能正常(圖 1)。
Figure 1: Minikube virtual machine in virtual box
使用 minikube status
命令,查看狀態(tài)是否與下面的輸出一致:
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
命令來調(diào)試和診斷集群問題。
當(dāng) Minikube 安裝完成后,安裝 kubectl
(https://kubernetes.io/docs/tasks/tools/)。它是一個(gè)命令行集群,用于對 Kubernetes 集群和 Minikube 執(zhí)行命令。
Figure 2: Lens
執(zhí)行 kubectl get nodes
命令獲取所有 節(jié)點(diǎn)node
C:\>kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 7m57s v1.18.3
使用 kubectl get all
命令獲取默認(rèn)命名空間下的所有詳情:
C:\>kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7m58s
我們現(xiàn)在已經(jīng)有一個(gè) Minikube 集群,并準(zhǔn)備好了 Kubectl。下一步是安裝和配置 Lens,并用示例應(yīng)用程序來驗(yàn)證。
Lens 的安裝和配置
打開 https://k8slens.dev/ ,下載與你的操作系統(tǒng)匹配的安裝包。
然后,參照屏幕上的教程來安裝 Lens,安裝完成后打開 Lens。你會(huì)發(fā)現(xiàn)在目錄中有一個(gè) minikube
(圖 3)。
Figure 3: Lens catalogue
點(diǎn)擊 “minikube” 后,你就進(jìn)入了 Minikube 的世界,你會(huì)愛上它的。
點(diǎn)擊 節(jié)點(diǎn)node 獲取有關(guān) kubectl get nodes
命令輸出的 節(jié)點(diǎn)node
現(xiàn)在,你可以使用 Lens 了。
Figure 4: Lens cluster
我們現(xiàn)在部署 https://github.com/GoogleCloudPlatform/microservices-demo,這是一個(gè)云原生微服務(wù)演示應(yīng)用程序。它有 11 層的微服務(wù)應(yīng)用,是一個(gè)基于網(wǎng)絡(luò)的電子商務(wù)應(yīng)用。
下載這個(gè)應(yīng)用程序,把它解壓到與 Minikube 相同的目錄。
進(jìn)入 release
目錄,執(zhí)行以下命令。
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
安裝過程現(xiàn)在應(yīng)該已經(jīng)開始了,不過它需要一些時(shí)間來反映出我們使用了 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
來獲取信息的幾個(gè)命令。
Figure 6: Lens pods
描述 | 命令 |
列出節(jié)點(diǎn) |
|
列出集群中的所有資源 |
|
列出部署 |
|
顯示部署的完整狀態(tài) |
|
修改集群上的部署 |
|
刪除部署 |
|
列出容器莢 |
|
刪除容器莢 |
|
顯示容器莢的完整狀態(tài) |
|
在 Shell 中運(yùn)行一個(gè)單容器莢 |
|
列出機(jī)密信息 |
|
列出服務(wù) |
|
列出服務(wù)的完整狀態(tài) |
|
修改集群中的服務(wù) |
|
列出命名空間 |
|
打印容器莢日志 |
|
打印容器莢中特定容器的日志 |
|
Lens 不僅可以幫你獲取表 1 中列出的所有信息,它還可以獲取指定集群的信息。我們還能用 Lens 來對 Kubernetes 資源進(jìn)行編輯和刪除操作。
Figure 7: Lens deployments
我們來看下是如何操作的。在 工作負(fù)載Workloads 部分選擇 容器莢Pod(圖 6),我們能通過 Lens 來編輯、刪除、查看日志、訪問 容器莢Pod
Figure 8: Lens Replicasets
你可以驗(yàn)證 工作負(fù)載Workloads 區(qū)域中所有 部署deployments(圖 7),工作負(fù)載Workloads 區(qū)域中所有 副本Replicasets (圖 8),配置Config 區(qū)域中所有 密鑰Secrets (圖 9),以及 網(wǎng)絡(luò)Network 區(qū)域中所有 服務(wù)Services
Figure 9: Lens Secrets
你可以看到,跳轉(zhuǎn)到所有的資源以及在一個(gè)地方高效地查看所有資源就是如此輕松。我們可以用 Lens 修改 YAML 文件,在運(yùn)行時(shí)應(yīng)用它來查看變更。
Figure 10: Lens Services
對于配置在不同的云服務(wù)商部署的多個(gè)集群,我們?nèi)钥梢杂?Lens 來進(jìn)行觀察和故障處理。
(題圖:MJ/069da8c5-9043-46b3-9b14-87a0ffc6bb35)