Этот проект представляет собой плагин kubectl для генерации и применения манифестов Kubernetes с использованием OpenAI GPT.
Моя основная мотивация - избегать поиска и сбора случайных манифестов при разработке/тестировании вещей.
Добавить в brew Tap и установить с:
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew install kubectl-ai Добавьте в индекс krew и установите с:
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-ai
kubectl krew install kubectl-ai/kubectl-aiЗагрузите бинарные из выпусков GitHub.
Если вы хотите использовать это как плагин kubectl , то скопируйте бинар kubectl-ai на свой PATH . Если нет, вы также можете использовать бинарный автономный.
kubectl-ai требует действительной конфигурации Kubernetes и одной из следующих:
Для OpenAI, Azure OpenAI или OpenAI API, совместимой с конечной точкой, вы можете использовать следующие переменные среды:
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 " > Если установлена переменная OPENAI_ENDPOINT , то она будет использовать конечную точку. В противном случае он будет использовать API OpenAI.
Сервис Azure Openai не допускает определенных персонажей, таких как . , в названии развертывания. Следовательно, kubectl-ai автоматически заменит gpt-3.5-turbo на gpt-35-turbo для Azure. Однако, если вы используете имя развертывания Azure OpenAI, совершенно отличное от имени модели, вы можете установить переменную среды AZURE_OPENAI_MAP , чтобы отобразить имя модели с именем развертывания Azure Openai. Например:
export AZURE_OPENAI_MAP= " gpt-3.5-turbo=my-deployment "Если у вас нет API API Open, вы можете настроить локальную конечную точку API OpenAI, используя AIKIT на вашей локальной машине без каких-либо графических процессоров! Для получения дополнительной информации см. 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 " После настройки среды, как указано выше, вы можете использовать kubectl-ai как обычно.
--require-confirmation или переменную среды REQUIRE_CONFIRMATION может быть установлена, чтобы предложить пользователю подтверждение перед применением манифеста. По умолчанию к истинному.
--temperature флаг или переменная TEMPERATURE среды может быть установлена между 0 и 1. Более высокая температура приведет к более творческим завершениям. Более низкая температура приведет к более детерминированным завершениям. По умолчанию к 0.
--use-k8s-api Flag или USE_K8S_API Переменная среда может быть установлена для использования Kubernetes OpenApi Spect для генерации манифеста. Это приведет к очень точным завершениям, включая CRD (если присутствует в настроенном кластере). В этом параметре будут использовать больше вызовов API OpenAI, и для этого требуется вызов функций, который доступен только в моделях 0613 или более позднего дня. По умолчанию ложно. Однако это рекомендуется для точности и полноты.
--k8s-openapi-url FLAG или переменная среды K8S_OPENAPI_URL можно настроить для использования пользовательского URL-адреса Kubernetes OpenAPI. Это используется только в том случае, если устанавливается --use-k8s-api . По умолчанию kubectl-ai будет использовать настроенный сервер API Kubernetes для получения спецификации, если только этот параметр не настроен. Вы можете использовать спецификацию Kubernetes OpenAPI по умолчанию или генерировать пользовательскую спецификацию для завершений, которая включает в себя пользовательские определения ресурсов (CRDS). Вы можете генерировать пользовательскую спецификацию OpenAPI, используя kubectl get --raw /openapi/v2 > swagger.json .
Kubectl AI может использоваться с входом и выходом трубы. Например:
$ 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 Если вы хотите использовать внешний редактор для редактирования сгенерированного манифеста, вы можете установить флаг и труб --raw по вашему выбору. Например:
# 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: LoadBalancerОбратите внимание, что плагин не знает текущего состояния кластера (пока?), Так что он всегда будет генерировать полный манифест.