项目介绍
kubectl-ai
是一个旨在简化 Kubernetes 工作流的插件,它通过利用 OpenAI 的 GPT 模型来生成和应用 Kubernetes 的配置文件。这个插件的主要动机是为开发和测试过程中提供便捷的配置文件生成,从而避免手动查找和整理各种随机的 Kubernetes 配置。
安装方法
Homebrew 安装
用户可以通过 Homebrew 进行安装,这需要先添加相关源,然后执行安装命令:
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew install kubectl-ai
Krew 安装
也可以通过 Krew 插件管理工具来安装:
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-ai
kubectl krew install kubectl-ai/kubectl-ai
GitHub 发布
用户也可以选择从 GitHub 发布页面下载二进制文件。下载后,可以将 kubectl-ai
二进制文件复制到系统的 PATH
中以便作为 kubectl
插件使用,或单独运行。
使用说明
前提条件
使用 kubectl-ai
需要一个有效的 Kubernetes 配置信息以及以下之一:
- OpenAI API Key
- Azure OpenAI 服务 的 API key 和 endpoint
- OpenAI API 兼容的 endpoint,例如 AIKit 或 LocalAI
用户可以通过下列环境变量来使用 OpenAI、Azure OpenAI 或兼容的 API 端点:
export OPENAI_API_KEY=<你的 OpenAI key>
export OPENAI_DEPLOYMENT_NAME=<你的 OpenAI 部署/模型名称,默认为 "gpt-3.5-turbo-0301">
export OPENAI_ENDPOINT=<你的 OpenAI 端点,例如 "https://my-aoi-endpoint.openai.azure.com" 或 "http://localhost:8080/v1">
若设置了 OPENAI_ENDPOINT
变量,则将使用该端点,若未设置则默认使用 OpenAI API。
本地 OpenAI API 兼容端点设置
如果用户没有 OpenAI API 访问权限,可以利用 AIKit 在本地机器上设置一个兼容的 OpenAI API 的端点,无需任何 GPU 支持。用户可以参考 AIKit 文档了解更多信息。
Flag 和环境变量
--require-confirmation
标志或REQUIRE_CONFIRMATION
环境变量可设置为强制用户在应用配置前进行确认,默认为开启状态(true)。--temperature
标志或TEMPERATURE
环境变量可以在 0 到 1 之间调整,值越高会产生更具创造性的结果,默认为 0。--use-k8s-api
标志或USE_K8S_API
环境变量可用于使用 Kubernetes 的 OpenAPI 规范以生成配置文件,默认为关闭状态。不过,开启后将提升生成结果的准确性和完整性。--k8s-openapi-url
标志或K8S_OPENAPI_URL
环境变量允许用户配置自定义的 Kubernetes OpenAPI 规范 URL,这在用户设置了--use-k8s-api
后才可使用。
管道输入输出
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
使用外部编辑器
用户可以使用外部编辑器来编辑生成的配置文件:
# 使用 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"
✨ 正在尝试应用以下配置文件:
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
重新提示以优化请求
...
重新提示: 更新为 5 个副本并把端口改为 8080
✨ 正在尝试应用以下配置文件:
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
多个对象
$ kubectl ai "create a foo namespace then create nginx pod in that namespace"
✨ 正在尝试应用以下配置文件:
apiVersion: v1
kind: Namespace
metadata:
name: foo
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: foo
spec:
containers:
- name: nginx
image: nginx:latest
可选 --require-confirmation
标志
$ kubectl ai "create a service with type LoadBalancer with selector as 'app:nginx'" --require-confirmation=false
✨ 正在尝试应用以下配置文件:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer