This project is a kubectl plugin to generate and apply Kubernetes manifests using OpenAI GPT.
Minha principal motivação é evitar encontrar e coletar manifestos aleatórios ao desenvolver/testar as coisas.
Adicione ao brew Toque e instale com:
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew install kubectl-ai Adicionar ao Índice krew e instalar com:
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-ai
kubectl krew install kubectl-ai/kubectl-aiFaça o download do binário dos lançamentos do GitHub.
Se você deseja usar isso como um plubin kubectl , copie o binário kubectl-ai para o seu PATH . Caso contrário, você também pode usar o binário independente.
kubectl-ai requer uma configuração válida de Kubernetes e um dos seguintes:
Para o OpenAI, o Azure OpenAI ou o OpenAI API Compatible Endpoint, você pode usar as seguintes variáveis de ambiente:
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 " > Se a variável OPENAI_ENDPOINT estiver definida, ela usará o terminal. Caso contrário, ele usará a API OpenAI.
O serviço Azure Openai não permite certos caracteres, como . , no nome da implantação. Consequentemente, kubectl-ai substituirá automaticamente gpt-3.5-turbo pelo gpt-35-turbo pelo Azure. No entanto, se você usar um nome de implantação do Azure OpenAI, completamente diferente do nome do modelo, poderá definir a variável de ambiente AZURE_OPENAI_MAP para mapear o nome do modelo para o nome de implantação do Azure OpenAi. Por exemplo:
export AZURE_OPENAI_MAP= " gpt-3.5-turbo=my-deployment "Se você não tiver acesso API OpenAI, poderá configurar um terminal local compatível com o OpenAI, usando o AIKIT em sua máquina local sem nenhuma GPUs! Para obter mais informações, consulte o documentato Aikit.
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 " Depois de configurar o ambiente como acima, você pode usar kubectl-ai como de costume.
--require-confirmation flag or REQUIRE_CONFIRMATION environment variable can be set to prompt the user for confirmation before applying the manifest. Padrões para True.
--temperature variável de bandeira ou ambiente de TEMPERATURE pode ser definida entre 0 e 1. A temperatura mais alta resultará em conclusões mais criativas. A temperatura mais baixa resultará em conclusões mais determinísticas. Padrões para 0.
--use-k8s-api flag or USE_K8S_API environment variable can be set to use Kubernetes OpenAPI Spec to generate the manifest. Isso resultará em conclusões muito precisas, incluindo o CRDS (se presente no cluster configurado). Essa configuração usará mais chamadas da API OpenAI e requer chamadas de funções disponíveis apenas em 0613 ou modelos posteriores. Padrões para false. No entanto, isso é recomendado para precisão e integridade.
--k8s-openapi-url sinalizador ou K8S_OPENAPI_URL A variável de ambiente pode ser definida para usar um URL personalizado de Kubernetes OpenAPI. Isso é usado apenas se --use-k8s-api estiver definido. Por padrão, kubectl-ai usará o servidor API Kubernetes configurado para obter a especificação, a menos que essa configuração esteja configurada. Você pode usar as especificações padrão do Kubernetes OpenAPI ou gerar uma especificação personalizada para conclusões que incluem definições de recursos personalizadas (CRDS). Você pode gerar especificação OpenAPI personalizada usando kubectl get --raw /openapi/v2 > swagger.json .
Kubectl AI pode ser usado com entrada e saída de tubo. Por exemplo:
$ 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 If you want to use an external editor to edit the generated manifest, you can set the --raw flag and pipe to the editor of your choice. Por exemplo:
# 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: LoadBalancerObserve que o plugin não conhece o estado atual do cluster (ainda?), Para que sempre gerem o manifesto completo.