Dieses Projekt ist ein kubectl -Plugin, um Kubernetes -Manifests mit OpenAI GPT zu generieren und anzuwenden.
Meine Hauptmotivation ist es, zufällige Manifests zu vermeiden, wenn Dev/Testing Dinge testen.
Zu brew hinzufügen und installieren mit:
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew install kubectl-ai Zu krew Index hinzufügen und installieren mit:
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-ai
kubectl krew install kubectl-ai/kubectl-aiLaden Sie die Binärdatei von Github Releases herunter.
Wenn Sie dies als kubectl Plugin verwenden möchten, kopieren Sie kubectl-ai Binär auf Ihren PATH . Wenn nicht, können Sie auch den binären Standalone verwenden.
kubectl-ai benötigt eine gültige Kubernetes-Konfiguration und eine der folgenden:
Für OpenAI-, Azure OpenAI- oder OpenAI -API -kompatible Endpunkt können Sie die folgenden Umgebungsvariablen verwenden:
export OPENAI_API_KEY= < your OpenAI key >
export OPENAI_DEPLOYMENT_NAME= < your OpenAI deployment/model name. defaults to " gpt-3.5-turbo-0301 " >
export OPENAI_ENDPOINT= < your OpenAI endpoint, like " https://my-aoi-endpoint.openai.azure.com " or " http://localhost:8080/v1 " > Wenn eine Variable OPENAI_ENDPOINT festgelegt ist, wird der Endpunkt verwendet. Andernfalls wird OpenAI -API verwendet.
Der Azure OpenAI -Dienst erlaubt bestimmte Zeichen nicht, wie z . im Namensnamen. Infolgedessen ersetzt kubectl-ai automatisch gpt-3.5-turbo durch Azure durch gpt-35-turbo . Wenn Sie jedoch einen Azure OpenAI -Bereitstellungsnamen verwenden, der sich vollständig vom Modellnamen unterscheidet, können Sie die Umgebungsvariable AZURE_OPENAI_MAP so festlegen, dass der Modellname dem Namen der Azure OpenAI -Bereitstellung abgebildet ist. Zum Beispiel:
export AZURE_OPENAI_MAP= " gpt-3.5-turbo=my-deployment "Wenn Sie keinen OpenAI-API-Zugriff haben, können Sie einen örtlichen OpenAI-API-kompatiblen Endpunkt mit AIKIT auf Ihrer lokalen Maschine ohne GPUs einrichten! Weitere Informationen finden Sie im Aikit -Dokumentaton.
docker run -d --rm -p 8080:8080 ghcr.io/sozercan/llama3.1:8b
export OPENAI_ENDPOINT= " http://localhost:8080/v1 "
export OPENAI_DEPLOYMENT_NAME= " llama-3.1-8b-instruct "
export OPENAI_API_KEY= " n/a " Nachdem Sie die Umgebung wie oben eingerichtet haben, können Sie kubectl-ai wie gewohnt verwenden.
--require-confirmation Flagge oder die Umweltvariable REQUIRE_CONFIRMATION kann so eingestellt werden, dass der Benutzer zur Bestätigung vor der Anwendung des Manifests aufgefordert wird. Standardmäßig true.
--temperature oder TEMPERATURE kann zwischen 0 und 1 festgelegt werden. Eine höhere Temperatur führt zu kreativeren Abschlüssen. Eine niedrigere Temperatur führt zu deterministischeren Abschlüssen. Standardmäßig 0.
--use-k8s-api Flag oder USE_K8S_API Umgebungsvariable kann so eingestellt werden, dass die Kubernetes OpenAPI-Spezifikation das Manifest generiert. Dies führt zu sehr genauen Abschlüssen, einschließlich CRDs (falls in konfiguriertem Cluster vorhanden). Diese Einstellung verwendet mehr OpenAI -API -Aufrufe und erfordert Funktionsanrufe, die nur in 0613 oder späteren Modellen verfügbar sind. Standardmäßig falsch. Dies wird jedoch für Genauigkeit und Vollständigkeit empfohlen.
--k8s-openapi-url -Flag oder K8S_OPENAPI_URL Umgebungsvariable kann so eingestellt werden, dass eine benutzerdefinierte Kubernetes openAPI-Spezifikations-URL verwendet wird. Dies wird nur verwendet, wenn --use-k8s-api festgelegt ist. Standardmäßig verwendet kubectl-ai den konfigurierten Kubernetes-API-Server, um die Spezifikation zu erhalten, sofern diese Einstellung sofern nicht konfiguriert ist. Sie können die Standardkubernetes OpenAPI -Spezifikation verwenden oder eine benutzerdefinierte Spezifikation für Abschlüsse erstellen, die benutzerdefinierte Ressourcendefinitionen (CRDS) enthält. Sie können eine benutzerdefinierte OpenAPI -Spezifikation erstellen, indem Sie kubectl get --raw /openapi/v2 > swagger.json verwenden.
Kubectl AI kann mit Rohreingang und Ausgang verwendet werden. Zum Beispiel:
$ cat foo-deployment.yaml | kubectl ai " change replicas to 5 " --raw | kubectl apply -f -$ cat foo-deployment.yaml | kubectl ai " change replicas to 5 " --raw > my-deployment-updated.yaml Wenn Sie einen externen Editor verwenden möchten, um das generierte Manifest zu bearbeiten, können Sie das Flag und die Pfeife --raw auf den Editor Ihrer Wahl festlegen. Zum Beispiel:
# Visual Studio Code
$ kubectl ai " create a foo namespace " --raw | code -
# Vim
$ kubectl ai " create a foo namespace " --raw | vim -$ kubectl ai " create an nginx deployment with 3 replicas "
Attempting to apply the following manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Use the arrow keys to navigate: ↓ ↑ → ←
? Would you like to apply this ? [Reprompt/Apply/Don ' t Apply]:
+ Reprompt
▸ Apply
Don ' t Apply...
Reprompt: update to 5 replicas and port 8080
Attempting to apply the following manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 8080
Use the arrow keys to navigate: ↓ ↑ → ←
? Would you like to apply this ? [Reprompt/Apply/Don ' t Apply]:
+ Reprompt
▸ Apply
Don ' t Apply$ kubectl ai " create a foo namespace then create nginx pod in that namespace "
Attempting to apply the following manifest:
apiVersion: v1
kind: Namespace
metadata:
name: foo
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: foo
spec:
containers:
- name: nginx
image: nginx:latest
Use the arrow keys to navigate: ↓ ↑ → ←
? Would you like to apply this ? [Reprompt/Apply/Don ' t Apply]:
+ Reprompt
▸ Apply
Don ' t Apply--require-confirmation -Flag $ kubectl ai " create a service with type LoadBalancer with selector as 'app:nginx' " --require-confirmation=false
Attempting to apply the following manifest:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancerBitte beachten Sie, dass das Plugin den aktuellen Status des Clusters (noch?) Kennt, so dass es immer das vollständige Manifest erzeugt.