example(k8sgpt): Add k8sgpt example (#631)
Signed-off-by: mudler <mudler@localai.io>renovate/github.com-imdario-mergo-1.x
parent
6da892758b
commit
7da07e8af9
@ -0,0 +1,70 @@ |
||||
# k8sgpt example |
||||
|
||||
This example show how to use LocalAI with k8sgpt |
||||
|
||||
![Screenshot from 2023-06-19 23-58-47](https://github.com/go-skynet/go-ggml-transformers.cpp/assets/2420543/cab87409-ee68-44ae-8d53-41627fb49509) |
||||
|
||||
## Create the cluster locally with Kind (optional) |
||||
|
||||
If you want to test this locally without a remote Kubernetes cluster, you can use kind. |
||||
|
||||
Install [kind](https://kind.sigs.k8s.io/) and create a cluster: |
||||
|
||||
``` |
||||
kind create cluster |
||||
``` |
||||
|
||||
## Setup LocalAI |
||||
|
||||
We will use [helm](https://helm.sh/docs/intro/install/): |
||||
|
||||
``` |
||||
helm repo add go-skynet https://go-skynet.github.io/helm-charts/ |
||||
helm repo update |
||||
|
||||
# Clone LocalAI |
||||
git clone https://github.com/go-skynet/LocalAI |
||||
|
||||
cd LocalAI/examples/k8sgpt |
||||
|
||||
# modify values.yaml preload_models with the models you want to install. |
||||
# CHANGE the URL to a model in huggingface. |
||||
helm install local-ai go-skynet/local-ai --create-namespace --namespace local-ai --values values.yaml |
||||
``` |
||||
|
||||
## Setup K8sGPT |
||||
|
||||
``` |
||||
# Install k8sgpt |
||||
helm repo add k8sgpt https://charts.k8sgpt.ai/ |
||||
helm repo update |
||||
helm install release k8sgpt/k8sgpt-operator -n k8sgpt-operator-system --create-namespace |
||||
``` |
||||
|
||||
Apply the k8sgpt-operator configuration: |
||||
|
||||
``` |
||||
kubectl apply -f - << EOF |
||||
apiVersion: core.k8sgpt.ai/v1alpha1 |
||||
kind: K8sGPT |
||||
metadata: |
||||
name: k8sgpt-local-ai |
||||
namespace: default |
||||
spec: |
||||
backend: localai |
||||
baseUrl: http://local-ai.local-ai.svc.cluster.local:8080/v1 |
||||
noCache: false |
||||
model: gpt-3.5-turbo |
||||
noCache: false |
||||
version: v0.3.0 |
||||
enableAI: true |
||||
EOF |
||||
``` |
||||
|
||||
## Test |
||||
|
||||
Apply a broken pod: |
||||
|
||||
``` |
||||
kubectl apply -f broken-pod.yaml |
||||
``` |
@ -0,0 +1,14 @@ |
||||
apiVersion: v1 |
||||
kind: Pod |
||||
metadata: |
||||
name: broken-pod |
||||
spec: |
||||
containers: |
||||
- name: broken-pod |
||||
image: nginx:1.a.b.c |
||||
livenessProbe: |
||||
httpGet: |
||||
path: / |
||||
port: 90 |
||||
initialDelaySeconds: 3 |
||||
periodSeconds: 3 |
@ -0,0 +1,95 @@ |
||||
replicaCount: 1 |
||||
|
||||
deployment: |
||||
# https://quay.io/repository/go-skynet/local-ai?tab=tags |
||||
image: quay.io/go-skynet/local-ai:latest |
||||
env: |
||||
threads: 4 |
||||
debug: "true" |
||||
context_size: 512 |
||||
preload_models: '[{ "url": "github:go-skynet/model-gallery/wizard.yaml", "name": "gpt-3.5-turbo", "overrides": { "parameters": { "model": "WizardLM-7B-uncensored.ggmlv3.q5_1" }},"files": [ { "uri": "https://huggingface.co//WizardLM-7B-uncensored-GGML/resolve/main/WizardLM-7B-uncensored.ggmlv3.q5_1.bin", "sha256": "d92a509d83a8ea5e08ba4c2dbaf08f29015932dc2accd627ce0665ac72c2bb2b", "filename": "WizardLM-7B-uncensored.ggmlv3.q5_1" }]}]' |
||||
modelsPath: "/models" |
||||
|
||||
resources: |
||||
{} |
||||
# We usually recommend not to specify default resources and to leave this as a conscious |
||||
# choice for the user. This also increases chances charts run on environments with little |
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following |
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'. |
||||
# limits: |
||||
# cpu: 100m |
||||
# memory: 128Mi |
||||
# requests: |
||||
# cpu: 100m |
||||
# memory: 128Mi |
||||
|
||||
# Prompt templates to include |
||||
# Note: the keys of this map will be the names of the prompt template files |
||||
promptTemplates: |
||||
{} |
||||
# ggml-gpt4all-j.tmpl: | |
||||
# The prompt below is a question to answer, a task to complete, or a conversation to respond to; decide which and write an appropriate response. |
||||
# ### Prompt: |
||||
# {{.Input}} |
||||
# ### Response: |
||||
|
||||
# Models to download at runtime |
||||
models: |
||||
# Whether to force download models even if they already exist |
||||
forceDownload: false |
||||
|
||||
# The list of URLs to download models from |
||||
# Note: the name of the file will be the name of the loaded model |
||||
list: |
||||
#- url: "https://gpt4all.io/models/ggml-gpt4all-j.bin" |
||||
# basicAuth: base64EncodedCredentials |
||||
|
||||
# Persistent storage for models and prompt templates. |
||||
# PVC and HostPath are mutually exclusive. If both are enabled, |
||||
# PVC configuration takes precedence. If neither are enabled, ephemeral |
||||
# storage is used. |
||||
persistence: |
||||
pvc: |
||||
enabled: false |
||||
size: 6Gi |
||||
accessModes: |
||||
- ReadWriteOnce |
||||
|
||||
annotations: {} |
||||
|
||||
# Optional |
||||
storageClass: ~ |
||||
|
||||
hostPath: |
||||
enabled: false |
||||
path: "/models" |
||||
|
||||
service: |
||||
type: ClusterIP |
||||
port: 8080 |
||||
annotations: {} |
||||
# If using an AWS load balancer, you'll need to override the default 60s load balancer idle timeout |
||||
# service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "1200" |
||||
|
||||
ingress: |
||||
enabled: false |
||||
className: "" |
||||
annotations: |
||||
{} |
||||
# kubernetes.io/ingress.class: nginx |
||||
# kubernetes.io/tls-acme: "true" |
||||
hosts: |
||||
- host: chart-example.local |
||||
paths: |
||||
- path: / |
||||
pathType: ImplementationSpecific |
||||
tls: [] |
||||
# - secretName: chart-example-tls |
||||
# hosts: |
||||
# - chart-example.local |
||||
|
||||
nodeSelector: {} |
||||
|
||||
tolerations: [] |
||||
|
||||
affinity: {} |
Loading…
Reference in new issue