该项目是使用OpenAI GPT生成和应用Kubernetes表现出来的kubectl插件。
我的主要动机是避免在开发/测试事物时发现和收集随机表现。
添加到brew水龙头并安装以下安装:
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变量,则将使用端点。否则,它将使用OpenAI API。
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 "如果您没有OpenAI API访问权限,则可以使用本地计算机上的Aikit在没有任何GPU的情况下设置本地OpenAI API兼容端点!有关更多信息,请参见Aikit Docuctaton。
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 Environment变量,以提示用户在应用清单之前确认。默认为true。
--temperature标志或TEMPERATURE环境变量可以在0到1之间设置。较高的温度将导致更具创造性的完成。较低的温度将导致更确定性的完成。默认为0。
--use-k8s-api flag或USE_K8S_API环境变量设置为使用kubernetes openapi规范生成清单。这将导致非常准确的完成,包括CRD(如果存在于配置的群集中)。此设置将使用更多的OpenAI API调用,并且需要仅在0613或更高版本中可用的功能调用。默认为false。但是,建议这样做的准确性和完整性。
--k8s-openapi-url标志或K8S_OPENAPI_URL环境变量可以设置为使用自定义的kubernetes OpenAPI Spec url。仅当设置--use-k8s-api时才使用。默认情况下,除非配置此设置,否则kubectl-ai将使用配置的Kubernetes API服务器获取规格。您可以使用默认的Kubernetes OpenAPI规格,也可以为包括自定义资源定义(CRD)的完整生成自定义规格。您可以使用kubectl get --raw /openapi/v2 > swagger.json生成自定义的OpenAPI规格。
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请注意,插件不知道群集的当前状态(尚未?),因此它将始终生成完整的清单。