Ce projet est un plugin kubectl pour générer et appliquer des manifestes de Kubernetes à l'aide d'Openai GPT.
Ma principale motivation est d'éviter de trouver et de collecter des manifestes aléatoires lors du développement des choses.
Ajouter à brew Tap et installer avec:
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew install kubectl-ai Ajouter à l'index krew et installer avec:
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-ai
kubectl krew install kubectl-ai/kubectl-aiTéléchargez le binaire à partir des versions GitHub.
Si vous souhaitez l'utiliser comme un plugin kubectl , copiez le binaire kubectl-ai sur votre PATH . Sinon, vous pouvez également utiliser le binaire autonome.
kubectl-ai nécessite une configuration de Kubernetes valide et l'une des éléments suivants:
Pour le point de terminaison compatible Openai, Azure Openai ou OpenAI, vous pouvez utiliser les variables d'environnement suivantes:
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 " > Si la variable OPENAI_ENDPOINT est définie, elle utilisera le point de terminaison. Sinon, il utilisera l'API OpenAI.
Le service Azure Openai ne permet pas certains caractères, tels que . , dans le nom de déploiement. Par conséquent, kubectl-ai remplacera automatiquement gpt-3.5-turbo à gpt-35-turbo pour Azure. Cependant, si vous utilisez un nom de déploiement Azure Openai complètement différent du nom du modèle, vous pouvez définir la variable d'environnement AZURE_OPENAI_MAP pour mapper le nom du modèle au nom de déploiement Azure Openai. Par exemple:
export AZURE_OPENAI_MAP= " gpt-3.5-turbo=my-deployment "Si vous n'avez pas d'accès API OpenAI, vous pouvez configurer un point de terminaison compatible API OpenAI local en utilisant AIKIT sur votre machine locale sans aucun GPU! Pour plus d'informations, consultez l'Aikit DocumentAton.
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 " Après avoir configuré l'environnement comme ci-dessus, vous pouvez utiliser kubectl-ai comme d'habitude.
--require-confirmation ou la variable d'environnement REQUIRE_CONFIRMATION peut être défini pour inciter l'utilisateur à confirmer avant d'appliquer le manifeste. Par défaut est vrai.
--temperature Le drapeau de la température ou la variable d'environnement TEMPERATURE peut être réglé entre 0 et 1. Une température plus élevée entraînera des achèvements plus créatifs. Une température plus basse entraînera des compléments plus déterministes. Par défaut est 0.
--use-k8s-api Flag ou USE_K8S_API La variable d'environnement peut être définie pour utiliser les spécifications Kubernetes OpenAPI pour générer le manifeste. Cela entraînera des compléments très précis, y compris les CRD (s'ils sont présents dans le cluster configuré). Ce paramètre utilisera des appels API plus ouverts et nécessite des appels de fonction qui sont disponibles dans les modèles 0613 ou ultérieurs uniquement. Par défaut est faux. Cependant, cela est recommandé pour la précision et l'exhaustivité.
--k8s-openapi-url Flag ou K8S_OPENAPI_URL Environment La variable peut être définie pour utiliser une URL de spécification Kubernetes OpenAPI personnalisée. Ceci n'est utilisé que si --use-k8s-api est défini. Par défaut, kubectl-ai utilisera le serveur API Kubernetes configuré pour obtenir la spécification à moins que ce paramètre ne soit configuré. Vous pouvez utiliser les spécifications par défaut de Kubernetes OpenAPI ou générer une spécification personnalisée pour les complétions qui inclut les définitions de ressources personnalisées (CRD). Vous pouvez générer des spécifications OpenAPI personnalisées en utilisant kubectl get --raw /openapi/v2 > swagger.json .
Kubectl AI peut être utilisé avec l'entrée et la sortie du tuyau. Par exemple:
$ 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 Si vous souhaitez utiliser un éditeur externe pour modifier le manifeste généré, vous pouvez définir l'indicateur et le tuyau --raw à l'éditeur de votre choix. Par exemple:
# 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 $ 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: LoadBalancerVeuillez noter que le plugin ne connaît pas l'état actuel du cluster (encore?), Il va donc toujours générer le manifeste complet.