使用 Lens Desktop 监控和调试 Kubernetes

Lens Desktop 是一个令人兴奋的 Kubernetes 工作平台。它是基于 OpenLens 资源库的一个定制化发行版本。通过本文来了解下 Lens Desktop 能做什么以及它是如何工作的。

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 的详情,在本例中是获取 Minikube 的详情:

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

描述命令
列出节点kubectl get node
列出集群中的所有资源kubectl get all –all-namespaces
列出部署kubectl get deployment
显示部署的完整状态kubectl describe deployment <deployment_name>
修改集群上的部署kubectl edit deployment <deployment_name>
删除部署kubectl delete deployment <deployment_name>
列出容器荚kubectl get pod
删除容器荚kubectl delete pod <pod_name>
显示容器荚的完整状态kubectl describe pod <pod_name>
在 Shell 中运行一个单容器荚kubectl exec -it <pod_name> /bin/bash
列出机密信息kubectl get secrets
列出服务kubectl get services
列出服务的完整状态kubectl describe services
修改集群中的服务kubectl edit services / kubectl edit deployment <deployment_name>
列出命名空间kubectl get namespace <namespace_name>
打印容器荚日志kubectl logs <pod_name>
打印容器荚中特定容器的日志kubectl logs -c <container_name> <pod_name>

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 是否都正常(图 10),

Figure 9: Lens Secrets

你可以看到,跳转到所有的资源以及在一个地方高效地查看所有资源就是如此轻松。我们可以用 Lens 修改 YAML 文件,在运行时应用它来查看变更。

Figure 10: Lens Services

对于配置在不同的云服务商部署的多个集群,我们仍可以用 Lens 来进行观察和故障处理。

(题图:MJ/069da8c5-9043-46b3-9b14-87a0ffc6bb35)


via: https://www.opensourceforu.com/2022/09/monitoring-and-debugging-kubernetes-with-lens-desktop/

作者:Mitesh Soni 选题:lkxed 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出