k8sGPT scanning minikube on Macbook_ChatGPT


文章目录
  • 引言
  • 实践体验
  • 总结


引言

在现代应用程序开发中,Kubernetes(简称K8s)已经成为了容器编排的标准。Minikube作为一个轻量级的本地Kubernetes集群环境,为开发和测试提供了极大的便利。今天,我将分享如何在MacBook上使用k8sGPT扫描Minikube集群,以确保我们的Kubernetes集群设置和应用程序的最佳实践。

$ minikube start --nodes 2 -p multinode-demo
😄  Darwin 14.5 (arm64) 上的 [multinode-demo] minikube v1.33.1
✨  自动选择 docker 驱动。其他选项:parallels, ssh
📌  使用具有 root 权限的 Docker Desktop 驱动程序
👍  Starting "multinode-demo" primary control-plane node in "multinode-demo" cluster
🚜  Pulling base image v0.0.44 ...
    > gcr.io/k8s-minikube/kicbase...:  435.76 MiB / 435.76 MiB  100.00% 6.65 Mi
🔥  Creating docker container (CPUs=2, Memory=7792MB) ...
🌐  找到的网络选项:
    ▪ HTTP_PROXY=192.168.21.101:7890
❗  You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP (192.168.49.2).
📘  Please see https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/ for more details
    ▪ HTTPS_PROXY=192.168.21.101:7890
🐳  正在 Docker 26.1.1 中准备 Kubernetes v1.30.0…
    ▪ env HTTP_PROXY=192.168.21.101:7890
    ▪ env HTTPS_PROXY=192.168.21.101:7890
    ▪ 正在生成证书和密钥...
    ▪ 正在启动控制平面...
    ▪ 配置 RBAC 规则 ...
🔗  配置 CNI (Container Networking Interface) ...
🔎  正在验证 Kubernetes 组件...
    ▪ 正在使用镜像 gcr.io/k8s-minikube/storage-provisioner:v5
🌟  启用插件: default-storageclass, storage-provisioner

👍  Starting "multinode-demo-m02" worker node in "multinode-demo" cluster
🚜  Pulling base image v0.0.44 ...
🔥  Creating docker container (CPUs=2, Memory=7792MB) ...
🌐  找到的网络选项:
    ▪ NO_PROXY=192.168.49.2
    ▪ HTTP_PROXY=192.168.21.101:7890
❗  You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP (192.168.49.3).
📘  Please see https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/ for more details
    ▪ HTTPS_PROXY=192.168.21.101:7890
🐳  正在 Docker 26.1.1 中准备 Kubernetes v1.30.0…
    ▪ env HTTP_PROXY=192.168.21.101:7890
    ▪ env HTTPS_PROXY=192.168.21.101:7890
    ▪ env NO_PROXY=192.168.49.2
🔎  正在验证 Kubernetes 组件...
🏄  完成!kubectl 现在已配置,默认使用"multinode-demo"集群和"default"命名空间
$ kubectl get node
NAME                 STATUS   ROLES           AGE    VERSION
multinode-demo       Ready    control-plane   2m3s   v1.30.0
multinode-demo-m02   Ready    <none>          103s   v1.30.0
$ minikube status -p multinode-demo
multinode-demo
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

multinode-demo-m02
type: Worker
host: Running
kubelet: Running

$ minikube addons list
|-----------------------------|--------------------------------|
|         ADDON NAME          |           MAINTAINER           |
|-----------------------------|--------------------------------|
| ambassador                  | 3rd party (Ambassador)         |
| auto-pause                  | minikube                       |
| cloud-spanner               | Google                         |
| csi-hostpath-driver         | Kubernetes                     |
| dashboard                   | Kubernetes                     |
| default-storageclass        | Kubernetes                     |
| efk                         | 3rd party (Elastic)            |
| freshpod                    | Google                         |
| gcp-auth                    | Google                         |
| gvisor                      | minikube                       |
| headlamp                    | 3rd party (kinvolk.io)         |
| helm-tiller                 | 3rd party (Helm)               |
| inaccel                     | 3rd party (InAccel             |
|                             | [info@inaccel.com])            |
| ingress                     | Kubernetes                     |
| ingress-dns                 | minikube                       |
| inspektor-gadget            | 3rd party                      |
|                             | (inspektor-gadget.io)          |
| istio                       | 3rd party (Istio)              |
| istio-provisioner           | 3rd party (Istio)              |
| kong                        | 3rd party (Kong HQ)            |
| kubeflow                    | 3rd party                      |
| kubevirt                    | 3rd party (KubeVirt)           |
| logviewer                   | 3rd party (unknown)            |
| metallb                     | 3rd party (MetalLB)            |
| metrics-server              | Kubernetes                     |
| nvidia-device-plugin        | 3rd party (NVIDIA)             |
| nvidia-driver-installer     | 3rd party (Nvidia)             |
| nvidia-gpu-device-plugin    | 3rd party (Nvidia)             |
| olm                         | 3rd party (Operator Framework) |
| pod-security-policy         | 3rd party (unknown)            |
| portainer                   | 3rd party (Portainer.io)       |
| registry                    | minikube                       |
| registry-aliases            | 3rd party (unknown)            |
| registry-creds              | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube                       |
| storage-provisioner-gluster | 3rd party (Gluster)            |
| storage-provisioner-rancher | 3rd party (Rancher)            |
| volumesnapshots             | Kubernetes                     |
| yakd                        | 3rd party (marcnuri.com)       |
|-----------------------------|--------------------------------|
$ kubectl create deployment hello-minikube1 --image=kicbase/echo-server:1.0
deployment.apps/hello-minikube1 created
$ kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
service/hello-minikube1 exposed
$ kubectl get pod -A
NAMESPACE     NAME                                     READY   STATUS              RESTARTS        AGE
default       hello-minikube1-67bf99b564-jstcc         0/1     ContainerCreating   0               12s
kube-system   coredns-7db6d8ff4d-85s2n                 1/1     Running             2 (3m16s ago)   3m43s
kube-system   etcd-multinode-demo                      1/1     Running             0               3m57s
kube-system   kindnet-wtzgz                            1/1     Running             0               3m44s
kube-system   kindnet-zwhtz                            1/1     Running             0               3m39s
kube-system   kube-apiserver-multinode-demo            1/1     Running             0               3m57s
kube-system   kube-controller-manager-multinode-demo   1/1     Running             0               3m57s
kube-system   kube-proxy-8t4fd                         1/1     Running             0               3m39s
kube-system   kube-proxy-dxhnv                         1/1     Running             0               3m44s
kube-system   kube-scheduler-multinode-demo            1/1     Running             0               3m57s
kube-system   storage-provisioner                      1/1     Running             1 (3m32s ago)   3m55s
$ kubectl get pod -A
NAMESPACE     NAME                                     READY   STATUS              RESTARTS        AGE
default       hello-minikube1-67bf99b564-jstcc         0/1     ContainerCreating   0               16s
kube-system   coredns-7db6d8ff4d-85s2n                 1/1     Running             2 (3m20s ago)   3m47s
kube-system   etcd-multinode-demo                      1/1     Running             0               4m1s
kube-system   kindnet-wtzgz                            1/1     Running             0               3m48s
kube-system   kindnet-zwhtz                            1/1     Running             0               3m43s
kube-system   kube-apiserver-multinode-demo            1/1     Running             0               4m1s
kube-system   kube-controller-manager-multinode-demo   1/1     Running             0               4m1s
kube-system   kube-proxy-8t4fd                         1/1     Running             0               3m43s
kube-system   kube-proxy-dxhnv                         1/1     Running             0               3m48s
kube-system   kube-scheduler-multinode-demo            1/1     Running             0               4m1s
kube-system   storage-provisioner                      1/1     Running             1 (3m36s ago)   3m59s
$ brew install k8sgpt
==> Downloading https://formulae.brew.sh/api/formula.jws.json
############################################################################################################################################################################################################################################## 100.0%
==> Downloading https://formulae.brew.sh/api/cask.jws.json
############################################################################################################################################################################################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/k8sgpt/manifests/0.3.40
############################################################################################################################################################################################################################################## 100.0%
==> Fetching k8sgpt
==> Downloading https://ghcr.io/v2/homebrew/core/k8sgpt/blobs/sha256:e22d500e85a13ae94bce5be3471eb9c2fc10b343fc335adb9fd6c39a9adfc9bd
############################################################################################################################################################################################################################################## 100.0%
==> Pouring k8sgpt--0.3.40.arm64_sonoma.bottle.tar.gz
🍺  /opt/homebrew/Cellar/k8sgpt/0.3.40: 7 files, 89.3MB
==> Running `brew cleanup k8sgpt`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
$ k8sgpt generate


Opening: https://beta.openai.com/account/api-keys to generate a key for openai

Please copy the generated key and run `k8sgpt auth add` to add it to your config file

$ k8sgpt auth add
Warning: backend input is empty, will use the default value: openai
Warning: model input is empty, will use the default value: gpt-3.5-turbo
Enter openai Key: openai added to the AI backend provider list
$ k8sgpt analyze --explain
AI Provider: openai

No problems detected

$ k8sgpt analyze --explain --with-doc
AI Provider: openai

No problems detected

$ k8sgpt analyze --explain --filter=Pod --namespace=default
AI Provider: openai

No problems detected

$ k8sgpt analyze --explain --filter=Service --output=json
{
  "provider": "openai",
  "errors": null,
  "status": "OK",
  "problems": 0,
  "results": null
}
$ k8sgpt analyze --explain --filter=Service --output=json --anonymize
{
  "provider": "openai",
  "errors": null,
  "status": "OK",
  "problems": 0,
  "results": null
}
$ k8sgpt filters list
Active:
> PersistentVolumeClaim
> Ingress
> Deployment
> ReplicaSet
> Service
> StatefulSet
> CronJob
> Node
> ValidatingWebhookConfiguration
> MutatingWebhookConfiguration
> Pod
Unused:
> Log
> GatewayClass
> Gateway
> HTTPRoute
> HorizontalPodAutoScaler
> PodDisruptionBudget
> NetworkPolicy
$ k8sgpt filters add Log
Warning: by enabling logs, you will be sending potentially sensitive data to the AI backend.
Filter Log added
$ k8sgpt filters list
Active:
> Service
> Node
> StatefulSet
> CronJob
> Log
> Ingress
> MutatingWebhookConfiguration
> ValidatingWebhookConfiguration
> Pod
> Deployment
> ReplicaSet
> PersistentVolumeClaim
Unused:
> HorizontalPodAutoScaler
> PodDisruptionBudget
> NetworkPolicy
> GatewayClass
> Gateway
> HTTPRoute
$ k8sgpt auth list
Default:
> openai
Active:
> openai
Unused:
> localai
> ollama
> azureopenai
> cohere
> amazonbedrock
> amazonsagemaker
> google
> noopai
> huggingface
> googlevertexai
> oci
> watsonxai

$ minikube stop  -p multinode-demo
✋  正在停止节点 "multinode-demo-m02" ...
🛑  正在通过 SSH 关闭“multinode-demo-m02”…
✋  正在停止节点 "multinode-demo" ...
🛑  正在通过 SSH 关闭“multinode-demo”…
🛑  2 个节点已停止。

$ docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                   CREATED          STATUS                        PORTS     NAMES
19a65b1bbc03   gcr.io/k8s-minikube/kicbase:v0.0.44   "/usr/local/bin/entr…"   45 minutes ago   Exited (130) 48 seconds ago             multinode-demo-m02
0f2e98799a5a   gcr.io/k8s-minikube/kicbase:v0.0.44   "/usr/local/bin/entr…"   45 minutes ago   Exited (130) 37 seconds ago             multinode-demo
b3c3c3c6fec6   ghcr.io/open-webui/open-webui:main    "bash start.sh"           3 months ago     Exited (0) 13 days ago                  open-webui
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228.
  • 229.
  • 230.
  • 231.
  • 232.
  • 233.
  • 234.
  • 235.
  • 236.
  • 237.
  • 238.
  • 239.
  • 240.
  • 241.
  • 242.
  • 243.
  • 244.
  • 245.
  • 246.
  • 247.
  • 248.
  • 249.
  • 250.
  • 251.
  • 252.
  • 253.
  • 254.
  • 255.
  • 256.
  • 257.
  • 258.
  • 259.
  • 260.
  • 261.
  • 262.
  • 263.
  • 264.

实践体验

在我的实践中,k8sGPT帮助我发现了一些常见的配置问题,如资源限制未设置、未使用最新的镜像版本等。这些问题可能看起来微不足道,但在生产环境中可能会导致性能下降或安全隐患。

此外,k8sGPT还建议了很多优化措施,例如使用ConfigMap和Secret来管理配置数据,避免将敏感信息直接硬编码到Pod中。通过这些建议,我的Minikube集群变得更加健壮和高效。

总结

通过在MacBook上使用k8sGPT扫描Minikube集群,我们可以快速发现和解决Kubernetes集群中的潜在问题。Minikube提供了一个方便的本地开发环境,而k8sGPT则为集群的健康和优化提供了强有力的支持。希望这篇文章能帮助你在使用Kubernetes时更加得心应手。如果你还没有尝试过k8sGPT,强烈推荐你在你的开发环境中试试它。

参考: