Salta ai contenuti

k8sgpt — Operator

L’operator esegue k8sgpt periodicamente dentro il cluster e salva i risultati come custom resource Result. Nessun terminale aperto, risultati consultabili con kubectl o GitOps.

Finestra del terminale
helm repo add k8sgpt https://charts.k8sgpt.ai/
Finestra del terminale
helm repo update
Finestra del terminale
helm upgrade --install k8sgpt-operator k8sgpt/k8sgpt-operator -n k8sgpt-operator-system --create-namespace --set serviceMonitor.enabled=true
Finestra del terminale
kubectl -n k8sgpt-operator-system get pods
Finestra del terminale
kubectl get crd | grep k8sgpt
Finestra del terminale
cat > k8sgpt-local.yaml <<'EOF2'
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-local
namespace: k8sgpt-operator-system
spec:
ai:
enabled: true
backend: localai
model: qwen2.5:7b-instruct
baseUrl: http://host.docker.internal:11434/v1
noCache: false
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.4.1
filters:
- Pod
- Service
- PersistentVolumeClaim
- Deployment
EOF2

version è il tag dell’immagine runtime che l’operator avvia: allinealo a una release esistente di k8sgpt. Verifica i campi supportati dalla tua versione del CRD:

Finestra del terminale
kubectl explain k8sgpt.spec.ai
Finestra del terminale
kubectl apply -f k8sgpt-local.yaml
Finestra del terminale
kubectl -n k8sgpt-operator-system get k8sgpt,deploy,pods
Finestra del terminale
kubectl -n k8sgpt-operator-system get results
Finestra del terminale
kubectl -n k8sgpt-operator-system get results -o custom-columns=KIND:.spec.kind,NAME:.spec.name,PARENT:.spec.parentObject
Finestra del terminale
kubectl -n k8sgpt-operator-system get results -o jsonpath='{range .items[*]}{"== "}{.spec.kind}{"/"}{.spec.name}{"\n"}{.spec.details}{"\n\n"}{end}'
Finestra del terminale
kubectl -n k8sgpt-operator-system get result -o yaml | yq '.items[0].spec'

I Result si aggiornano a ogni ciclo: quando correggi un guasto, il relativo Result sparisce.

Con serviceMonitor.enabled=true Prometheus raccoglie le metriche dell’operator. Individua i nomi esposti:

Finestra del terminale
curl -s 'localhost:9090/api/v1/label/__name__/values' | jq -r '.data[]' | grep -i k8sgpt

Il CR supporta sink come Slack o Mattermost tramite spec.sink. In ambienti offline punta a un’istanza interna:

Finestra del terminale
kubectl explain k8sgpt.spec.sink
Finestra del terminale
kubectl -n k8sgpt-operator-system logs deploy/k8sgpt-operator-controller-manager -f
Finestra del terminale
kubectl -n k8sgpt-operator-system logs deploy/k8sgpt-local -f
Finestra del terminale
kubectl -n k8sgpt-operator-system describe k8sgpt k8sgpt-local
Finestra del terminale
kubectl delete -f k8sgpt-local.yaml
Finestra del terminale
helm uninstall k8sgpt-operator -n k8sgpt-operator-system