該項目是使用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請注意,插件不知道群集的當前狀態(尚未?),因此它將始終生成完整的清單。