From 55ba4d64ee4a9a5cd8b925d9a5686cc9ddabf285 Mon Sep 17 00:00:00 2001 From: Nicolas Lamirault Date: Thu, 18 Jan 2024 13:23:02 +0100 Subject: [PATCH] feat(k8sgpt): Multiple providers support Signed-off-by: Nicolas Lamirault --- .../charts/ai/k8sgpt/templates/k8sgpt.yaml | 43 ++++++++++-- .../charts/ai/k8sgpt/templates/secret.yaml | 67 ++++++++++++++++++- .../charts/ai/k8sgpt/values-k3s-homelab.yaml | 22 ++++++ gitops/argocd/charts/ai/k8sgpt/values.yaml | 17 +++++ 4 files changed, 143 insertions(+), 6 deletions(-) diff --git a/gitops/argocd/charts/ai/k8sgpt/templates/k8sgpt.yaml b/gitops/argocd/charts/ai/k8sgpt/templates/k8sgpt.yaml index 319a83437b..3ba36d9292 100644 --- a/gitops/argocd/charts/ai/k8sgpt/templates/k8sgpt.yaml +++ b/gitops/argocd/charts/ai/k8sgpt/templates/k8sgpt.yaml @@ -29,16 +29,51 @@ metadata: namespace: {{ .Release.Namespace }} spec: ai: - enabled: false - model: gpt-3.5-turbo + enabled: true + # LocalAI + {{- if .Values.ai.providers.localai.enabled }} + backend: localai + model: {{ .Values.ai.providers.localai.model }} + baseUrl: {{ .Values.ai.providers.localai.baseUrl }} + {{- end }} + # OpenAI + {{- if .Values.ai.providers.openai.enabled }} backend: openai + model: {{ .Values.ai.providers.openai.model }} secret: - name: k8sgpt-credentials + name: k8sgpt-ai-credentials key: openai-api-key + {{- end }} + # Azure OpenAI + {{- if .Values.ai.providers.azure_openai.enabled }} + backend: azureopenai + model: {{ .Values.ai.providers.azure_openai.model }} + baseUrl: {{ .Values.ai.providers.azure_openai.baseUrl }} + engine: llm + secret: + name: k8sgpt-ai-credentials + key: azure-api-key + {{- end }} + # AWS Bedrock + {{- if .Values.ai.providers.aws_bedrock.enabled }} + backend: + {{- end }} + # Google Gemini + {{- if .Values.ai.providers.google_gemini.enabled }} + backend: + {{- end }} # anonymized: false # language: english - noCache: false version: v0.3.8 + noCache: {{ not .Values.ai.cache.enabled }} + {{- if .Values.ai.cache.enabled }} + remoteCache: + credentials: + name: k8sgpt-cloudflare-credentials + s3: + bucketName: {{ .Values.ai.cache.s3.bucketName }} + region: eu-west-1 + {{- end }} # filters: # - Ingress # sink: diff --git a/gitops/argocd/charts/ai/k8sgpt/templates/secret.yaml b/gitops/argocd/charts/ai/k8sgpt/templates/secret.yaml index bd6fc7ff7e..8586de8ce7 100644 --- a/gitops/argocd/charts/ai/k8sgpt/templates/secret.yaml +++ b/gitops/argocd/charts/ai/k8sgpt/templates/secret.yaml @@ -25,7 +25,7 @@ metadata: labels: {{- include "chart.labels" (index .Subcharts "k8sgpt-operator") | nindent 4 }} app: k8sgpt - name: k8sgpt-credentials + name: k8sgpt-ai-credentials namespace: {{ .Release.Namespace }} spec: refreshInterval: 1h @@ -33,11 +33,74 @@ spec: kind: ClusterSecretStore name: akeyless target: - name: k8sgpt-credentials + name: k8sgpt-ai-credentials creationPolicy: Owner data: + # OpenAI + {{- if .Values.ai.providers.openai.enabled }} - secretKey: openai-api-key remoteRef: conversionStrategy: Default decodingStrategy: None key: K8SGPT_OPENAI + {{- end }} + # Azure OpenAI + {{- if .Values.ai.providers.azure_openai.enabled }} + - secretKey: azure-api-key + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: K8SGPT_AZURE_OPENAI_APIKEY + - secretKey: AZURE_OPENAI_ENDPOINT + remoteRef: + key: K8SGPT_AZURE_OPENAI_ENDPOINT + {{- end }} + # AWS Bedrock + {{- if .Values.ai.providers.aws_bedrock.enabled }} + - secretKey: AWS_ACCESS_KEY + remoteRef: + key: K8SGPT_AWS_ACCESS_KEY + - secretKey: AWS_SECRET_ACCESS_KEY + remoteRef: + key: K8SGPT_AWS_SECRET_ACCESS_KEY + - secretKey: AWS_DEFAULT_REGION + remoteRef: + key: K8SGPT_AWS_DEFAULT_REGION + {{- end }} + # Google Gemini + {{- if .Values.ai.providers.google_gemini.enabled }} + - secretKey: GEMINI_API_KEY + remoteRef: + key: K8SGPT_GEMINI_API_KEY + {{- end }} +--- +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + {{- if .Values.additionalAnnotations }} + annotations: + {{ toYaml .Values.additionalAnnotations | indent 4 }} + {{- end }} + labels: + {{- include "chart.labels" (index .Subcharts "k8sgpt-operator") | nindent 4 }} + app: k8sgpt + name: k8sgpt-cloudflare-credentials + namespace: {{ .Release.Namespace }} +spec: + refreshInterval: "1h" + secretStoreRef: + kind: ClusterSecretStore + name: akeyless + target: + name: k8sgpt-cloudflare-credentials + creationPolicy: Owner + data: + - secretKey: AWS_ACCESS_KEY_ID + remoteRef: + key: AWS_ACCESS_KEY_ID + - secretKey: AWS_SECRET_ACCESS_KEY + remoteRef: + key: AWS_SECRET_ACCESS_KEY + - secretKey: AWS_S3_ENDPOINT + remoteRef: + key: AWS_S3_ENDPOINT diff --git a/gitops/argocd/charts/ai/k8sgpt/values-k3s-homelab.yaml b/gitops/argocd/charts/ai/k8sgpt/values-k3s-homelab.yaml index 6d1c4b6f2f..6783caffc0 100644 --- a/gitops/argocd/charts/ai/k8sgpt/values-k3s-homelab.yaml +++ b/gitops/argocd/charts/ai/k8sgpt/values-k3s-homelab.yaml @@ -15,6 +15,28 @@ # # SPDX-License-Identifier: Apache-2.0 +ai: + providers: + localai: + enabled: true + model: llama-2-7b-chat.ggmlv3.q4_0.bin # gpt-3.5-turbo + baseUrl: http://localai.ai.svc.cluster.local:8080/v1 + openai: + enabled: false + model: gpt-3.5-turbo + azure_openai: + enabled: false + model: gpt-35-turbo + baseUrl: https://k8sgpt.openai.azure.com/ + aws_bedrock: + enabled: false + google_gemini: + enabled: false + cache: + enabled: true + s3: + bucketName: portefaix-homelab-k8sgpt-cache + k8sgpt-operator: controllerManager: resources: diff --git a/gitops/argocd/charts/ai/k8sgpt/values.yaml b/gitops/argocd/charts/ai/k8sgpt/values.yaml index 90cd42eb55..610c20f166 100644 --- a/gitops/argocd/charts/ai/k8sgpt/values.yaml +++ b/gitops/argocd/charts/ai/k8sgpt/values.yaml @@ -15,6 +15,23 @@ # # SPDX-License-Identifier: Apache-2.0 +ai: + providers: + noopai: + enabled: true + localai: + enabled: false + openai: + enabled: false + azure_openai: + enabled: false + aws_bedrock: + enabled: false + google_gemini: + enabled: false + cache: + enabled: false + k8sgpt: name: core