Proyek ini adalah plugin kubectl untuk menghasilkan dan menerapkan manifes Kubernetes menggunakan OpenAI GPT.
Motivasi utama saya adalah menghindari menemukan dan mengumpulkan manifes acak saat menguji/menguji berbagai hal.
Tambahkan ke brew Tap dan instal dengan:
brew tap sozercan/kubectl-ai https://github.com/sozercan/kubectl-ai
brew install kubectl-ai Tambahkan ke Indeks krew dan instal dengan:
kubectl krew index add kubectl-ai https://github.com/sozercan/kubectl-ai
kubectl krew install kubectl-ai/kubectl-aiUnduh Biner dari Rilis GitHub.
Jika Anda ingin menggunakan ini sebagai plugin kubectl , maka salin Binary kubectl-ai ke PATH Anda. Jika tidak, Anda juga dapat menggunakan biner mandiri.
kubectl-ai membutuhkan konfigurasi Kubernetes yang valid dan salah satu dari yang berikut:
Untuk Openai, Azure Openai atau Openai API yang kompatibel, Anda dapat menggunakan variabel lingkungan berikut:
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 " > Jika variabel OPENAI_ENDPOINT diatur, maka itu akan menggunakan titik akhir. Kalau tidak, itu akan menggunakan OpenAI API.
Layanan Azure Openai tidak mengizinkan karakter tertentu, seperti . , dalam nama penempatan. Akibatnya, kubectl-ai secara otomatis akan menggantikan gpt-3.5-turbo ke gpt-35-turbo untuk Azure. Namun, jika Anda menggunakan nama penyebaran Azure OpenAI yang sama sekali berbeda dari nama model, Anda dapat mengatur variabel lingkungan AZURE_OPENAI_MAP untuk memetakan nama model ke nama penyebaran azure openai. Misalnya:
export AZURE_OPENAI_MAP= " gpt-3.5-turbo=my-deployment "Jika Anda tidak memiliki akses API OpenAI, Anda dapat mengatur titik akhir yang kompatibel dengan API OpenAi lokal menggunakan aikit di mesin lokal Anda tanpa GPU! Untuk informasi lebih lanjut, lihat Dococaton Ayat.
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 " Setelah menyiapkan lingkungan seperti di atas, Anda dapat menggunakan kubectl-ai seperti biasa.
-Bendera --require-confirmation atau Variabel Lingkungan REQUIRE_CONFIRMATION dapat diatur untuk meminta pengguna untuk konfirmasi sebelum menerapkan manifes. Default ke true.
--temperature atau variabel lingkungan TEMPERATURE dapat ditetapkan antara 0 dan 1. Suhu yang lebih tinggi akan menghasilkan penyelesaian yang lebih kreatif. Suhu yang lebih rendah akan menghasilkan penyelesaian yang lebih deterministik. Default ke 0.
--use-k8s-api Bendera atau variabel lingkungan USE_K8S_API dapat diatur untuk menggunakan spec openapi Kubernetes untuk menghasilkan manifes. Ini akan menghasilkan penyelesaian yang sangat akurat termasuk CRD (jika ada dalam cluster yang dikonfigurasi). Pengaturan ini akan menggunakan lebih banyak panggilan API OpenAI dan memerlukan panggilan fungsi yang tersedia hanya dalam 0613 atau model yang lebih baru. Default ke false. Namun, ini disarankan untuk keakuratan dan kelengkapan.
--k8s-openapi-url Bendera atau variabel lingkungan K8S_OPENAPI_URL dapat diatur untuk menggunakan URL spec OpenAPI Kubernetes khusus. Ini hanya digunakan jika --use-k8s-api diatur. Secara default, kubectl-ai akan menggunakan server API Kubernetes yang dikonfigurasi untuk mendapatkan spec kecuali pengaturan ini dikonfigurasi. Anda dapat menggunakan spesifikasi OpenAPI Kubernetes default atau menghasilkan spesifikasi khusus untuk penyelesaian yang mencakup definisi sumber daya khusus (CRD). Anda dapat menghasilkan spesifikasi OpenAPI khusus dengan menggunakan kubectl get --raw /openapi/v2 > swagger.json .
Kubectl AI dapat digunakan dengan input dan output pipa. Misalnya:
$ 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 Jika Anda ingin menggunakan editor eksternal untuk mengedit manifes yang dihasilkan, Anda dapat mengatur --raw dan pipa ke editor pilihan Anda. Misalnya:
# 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 Opsional $ 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: LoadBalancerHarap dicatat bahwa plugin tidak tahu keadaan kluster saat ini (belum?), Jadi itu akan selalu menghasilkan manifes penuh.