Este proyecto es un complemento kubectl para generar y aplicar los manifiestos de Kubernetes utilizando OpenAI GPT.
Mi principal motivación es evitar encontrar y recolectar manifiestas aleatorias al desarrollar/probar cosas.
Agregue a brew Toque e instale con:
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew install kubectl-ai Agregar al índice krew e instalar con:
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-ai
kubectl krew install kubectl-ai/kubectl-aiDescargue el binario de los lanzamientos de GitHub.
Si desea usar esto como un complemento kubectl , entonces copie kubectl-ai Binary en su PATH . Si no, también puede usar el Standalone binario.
kubectl-ai requiere una configuración válida de Kubernetes y una de las siguientes opciones:
Para el punto final compatible con OpenAI, Azure OpenAI o OpenAI API, puede usar las siguientes variables de entorno:
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 se establece la variable OPENAI_ENDPOINT , usará el punto final. De lo contrario, utilizará la API de OpenAI.
El servicio Azure OpenAI no permite ciertos personajes, como . , en el nombre de implementación. En consecuencia, kubectl-ai reemplazará automáticamente gpt-3.5-turbo a gpt-35-turbo para Azure. Sin embargo, si utiliza un nombre de implementación de Azure OpenAI completamente diferente del nombre del modelo, puede establecer el entorno AZURE_OPENAI_MAP para asignar el nombre del modelo al nombre de implementación de Azure OpenAI. Por ejemplo:
export AZURE_OPENAI_MAP= " gpt-3.5-turbo=my-deployment "Si no tiene acceso a la API de OpenAI, ¡puede configurar un punto final local compatible con API OpenAI usando AIKIT en su máquina local sin GPU! Para obtener más información, consulte el 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 " Después de configurar el entorno como arriba, puede usar kubectl-ai como de costumbre.
-El indicador --require-confirmation o la variable de entorno REQUIRE_CONFIRMATION se pueden establecer para solicitar al usuario la confirmación antes de aplicar el manifiesto. El valor predeterminado es verdadero.
--temperature variable de entorno de indicador de temperatura o TEMPERATURE se puede establecer entre 0 y 1. La temperatura más alta dará como resultado una terminación más creativa. La temperatura más baja dará como resultado terminaciones más deterministas. El valor predeterminado es 0.
--use-k8s-api Flag o USE_K8S_API El entorno se puede configurar para usar la especificación de Kubernetes Openapi para generar el manifiesto. Esto dará como resultado terminaciones muy precisas, incluidos los CRD (si están presentes en el clúster configurado). Esta configuración utilizará más llamadas de API de OpenAI y requiere llamadas de funciones que están disponibles solo en modelos 0613 o posteriores. El valor predeterminado es falso. Sin embargo, esto se recomienda para su precisión e integridad.
--k8s-openapi-url flag o K8S_OPENAPI_URL La variable de entorno se puede configurar para utilizar una URL de especificación de Kubernetes Openapi personalizada. Esto solo se usa si se establece --use-k8s-api . De manera predeterminada, kubectl-ai utilizará el servidor API Kubernetes configurado para obtener la especificación a menos que esta configuración esté configurada. Puede usar la especificación predeterminada de Kubernetes OpenAPI o generar una especificación personalizada para completar que incluya definiciones de recursos personalizadas (CRDS). Puede generar especificaciones OpenAPI personalizadas utilizando kubectl get --raw /openapi/v2 > swagger.json .
Kubectl AI se puede usar con entrada y salida de tubería. Por ejemplo:
$ 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 desea utilizar un editor externo para editar el manifiesto generado, puede configurar la bandera --raw y la tubería en el editor de su elección. Por ejemplo:
# 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: LoadBalancerTenga en cuenta que el complemento no conoce el estado actual del clúster (¿todavía?), Por lo que siempre generará el manifiesto completo.