kubetoolsca/krs

IndexError: list index out of range while running krs health for GKE workload

Opened this issue · 3 comments

I installed Nginx Pod on GKE workload by following this guide.

krs init
Services initialized and scanner loaded.

I was able to scan the GKE cluster successfully.

krs scan

Scanning your cluster...

Cluster scanned successfully...

Extracted tools used in cluster...


The cluster is using the following tools:

+-------------+--------+-----------------------------+---------------+
| Tool Name   |   Rank | Category                    | CNCF Status   |
+=============+========+=============================+===============+
| autoscaler  |      5 | Cluster with Core CLI tools | unlisted      |
+-------------+--------+-----------------------------+---------------+
| fluentbit   |      4 | Logging and Tracing         | unlisted      |
+-------------+--------+-----------------------------+---------------+
 krs recommend

Our recommended tools for this deployment are:

+-----------------------------+------------------+-------------+---------------+
| Category                    | Recommendation   | Tool Name   | CNCF Status   |
+=============================+==================+=============+===============+
| Cluster with Core CLI tools | Recommended tool | k9s         | unlisted      |
+-----------------------------+------------------+-------------+---------------+
| Logging and Tracing         | Recommended tool | elk         | unlisted      |
+-----------------------------+------------------+-------------+---------------+
git clone https://github.com/benc-uk/kubeview
Cloning into 'kubeview'...
remote: Enumerating objects: 1386, done.
remote: Counting objects: 100% (397/397), done.
remote: Compressing objects: 100% (112/112), done.
remote: Total 1386 (delta 337), reused 285 (delta 285), pack-reused 989
Receiving objects: 100% (1386/1386), 5.14 MiB | 10.14 MiB/s, done.
Resolving deltas: 100% (775/775), done.
cd kubeview/charts/
helm install kubeview kubeview
NAME: kubeview
LAST DEPLOYED: Thu Jun 13 15:01:08 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
=====================================
==== KubeView has been deployed! ====
=====================================
  To get the external IP of your application, run the following:

  export SERVICE_IP=$(kubectl get svc --namespace default kubeview -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  echo http://$SERVICE_IP

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        You can watch the status of by running 'kubectl get --namespace default svc -w kubeview'
 krs scan


Scanning your cluster...

Cluster scanned successfully...

Extracted tools used in cluster...


The cluster is using the following tools:

+-------------+--------+-----------------------------+---------------+
| Tool Name   |   Rank | Category                    | CNCF Status   |
+=============+========+=============================+===============+
| kubeview    |     30 | Cluster with Core CLI tools | unlisted      |
+-------------+--------+-----------------------------+---------------+
|             |      3 | Cluster Management          | unlisted      |
+-------------+--------+-----------------------------+---------------+
| autoscaler  |      5 | Cluster with Core CLI tools | unlisted      |
+-------------+--------+-----------------------------+---------------+
| fluentbit   |      4 | Logging and Tracing         | unlisted      |
+-------------+--------+-----------------------------+---------------+
wget https://github.com/sozercan/kubectl-ai/releases/download/v0.0.10/kubectl-ai_linux_amd64.tar.gz

--2024-06-13 15:03:31--  https://github.com/sozercan/kubectl-ai/releases/download/v0.0.10/kubectl-ai_linux_amd64.tar.gz
Resolving github.com (github.com)... 20.207.73.82
Connecting to github.com (github.com)|20.207.73.82|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/615891862/b0d8d775-54a8-409b-bc85-0909814266ad?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240613%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240613T093331Z&X-Amz-Expires=300&X-Amz-Signature=96aa314950f3223f55232d174d850398f5f1f35fb686c62acaed4e1f0e3444c7&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=615891862&response-content-disposition=attachment%3B%20filename%3Dkubectl-ai_linux_amd64.tar.gz&response-content-type=application%2Foctet-stream [following]
--2024-06-13 15:03:32--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/615891862/b0d8d775-54a8-409b-bc85-0909814266ad?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240613%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240613T093331Z&X-Amz-Expires=300&X-Amz-Signature=96aa314950f3223f55232d174d850398f5f1f35fb686c62acaed4e1f0e3444c7&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=615891862&response-content-disposition=attachment%3B%20filename%3Dkubectl-ai_linux_amd64.tar.gz&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11986631 (11M) [application/octet-stream]
Saving to: ‘kubectl-ai_linux_amd64.tar.gz’

kubectl-ai_linux_amd64.tar.gz            100%[===============================================================================>]  11.43M  16.5MB/s    in 0.7s

2024-06-13 15:03:37 (16.5 MB/s) - ‘kubectl-ai_linux_amd64.tar.gz’ saved [11986631/11986631]
kubectl ai "Create a namespace called ns1 and deploy a Nginx Pod"
✨ Attempting to apply the following manifest:
apiVersion: v1
kind: Namespace
metadata:
  name: ns1

---

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: ns1
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
✔ Apply
 kubectl get po -n ns1
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          45s
krs health

Starting interactive terminal...


Do you want to continue fixing the previously selected pod ? (y/n): >> n

Loading LLM State..

Model:  gpt-3.5-turbo

Namespaces in the cluster:

1. default
2. gke-managed-system
3. gmp-public
4. gmp-system
5. kube-node-lease
6. kube-public
7. kube-system
8. ns1

Which namespace do you want to check the health for? Select a namespace by entering its number: >> 8

Pods in the namespace ns1:

1. nginx-pod

Which pod from ns1 do you want to check the health for? Select a pod by entering its number: >> 1

Checking status of the pod...

Extracting logs and events from the pod...
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /opt/homebrew/lib/python3.11/site-packages/krs/krs.py:80 in health                               │
│                                                                                                  │
│    77 │   """                                                                                    │
│    78 │   check_initialized()                                                                    │
│    79 │   typer.echo("\nStarting interactive terminal...\n")                                     │
│ ❱  80 │   krs.health_check(change_model)                                                         │
│    81                                                                                            │
│    82 @app.command()                                                                             │
│    83 def export():                                                                              │
│                                                                                                  │
│ ╭─────── locals ───────╮                                                                         │
│ │ change_model = False │                                                                         │
│ ╰──────────────────────╯                                                                         │
│                                                                                                  │
│ /opt/homebrew/lib/python3.11/site-packages/krs/main.py:231 in health_check                       │
│                                                                                                  │
│   228 │   │   │                                                                                  │
│   229 │   │   │   print("\nExtracting logs and events from the pod...")                          │
│   230 │   │   │                                                                                  │
│ ❱ 231 │   │   │   logs_from_pod = self.get_logs_from_pod(self.selected_namespace_index, self.s   │
│   232 │   │   │                                                                                  │
│   233 │   │   │   self.logs_extracted = extract_log_entries(logs_from_pod)                       │
│   234                                                                                            │
│                                                                                                  │
│ ╭────────────────────────────────────── locals ──────────────────────────────────────╮           │
│ │           change_model = False                                                     │           │
│ │ continue_previous_chat = 'n'                                                       │           │
│ │                      i = 1                                                         │           │
│ │           krsllmclient = <krs.utils.llm_client.KrsGPTClient object at 0x1060cff50> │           │
│ │              namespace = 'ns1'                                                     │           │
│ │          namespace_len = 8                                                         │           │
│ │             namespaces = [                                                         │           │
│ │                          │   'default',                                            │           │
│ │                          │   'gke-managed-system',                                 │           │
│ │                          │   'gmp-public',                                         │           │
│ │                          │   'gmp-system',                                         │           │
│ │                          │   'kube-node-lease',                                    │           │
│ │                          │   'kube-public',                                        │           │
│ │                          │   'kube-system',                                        │           │
│ │                          │   'ns1'                                                 │           │
│ │                          ]                                                         │           │
│ │                    pod = 'nginx-pod'                                               │           │
│ │                pod_len = 1                                                         │           │
│ │               pod_list = ['nginx-pod']                                             │           │
│ │                   self = <krs.main.KrsMain object at 0x102f05a10>                  │           │
│ ╰────────────────────────────────────────────────────────────────────────────────────╯           │
│                                                                                                  │
│ /opt/homebrew/lib/python3.11/site-packages/krs/main.py:247 in get_logs_from_pod                  │
│                                                                                                  │
│   244 │   │   try:                                                                               │
│   245 │   │   │   namespace_index -= 1                                                           │
│   246 │   │   │   pod_index -= 1                                                                 │
│ ❱ 247 │   │   │   namespace = list(self.pod_info.keys())[namespace_index]                        │
│   248 │   │   │   return list(self.pod_info[namespace][pod_index]['info']['Logs'].values())[0]   │
│   249 │   │   except KeyError as e:                                                              │
│   250 │   │   │   print("\nKindly enter a value from the available namespaces and pods")         │
│                                                                                                  │
│ ╭────────────────────────── locals ──────────────────────────╮                                   │
│ │ namespace_index = 7                                        │                                   │
│ │       pod_index = 0                                        │                                   │
│ │            self = <krs.main.KrsMain object at 0x102f05a10> │                                   │
│ ╰────────────────────────────────────────────────────────────╯                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
IndexError: list index out of range

@karanveersingh5623 I noticed that fluentd is listed in CNCF but there it is not listed.

@ajeetraina Check the cncf json that is created, if there is a name mismatch, it will show unlisted. As I am pulling from CNCF directly, I cannot edit the names in between, as they would be considered synthetic then.

Json file Composition