K8sGPT + Ollama – یک راه حل تشخیص خودکار رایگان Kubernetes
Summarize this content to 400 words in Persian Lang
من پیش نویس های وبلاگم را در آخر هفته بررسی کردم و این یکی را پیدا کردم. به یاد دارم که حدود یک سال پیش آن را با “ابزار تشخیص خودکار Kubernetes: k8sgpt-operator” (به زبان چینی ارسال شده) نوشتم. به نظر می رسد تعلل من به حد بحرانی رسیده است. در ابتدا، من قصد داشتم از K8sGPT + LocalAI استفاده کنم. با این حال، پس از امتحان Ollama، آن را کاربر پسندتر یافتم. Ollama همچنین از OpenAI API پشتیبانی می کند، بنابراین تصمیم گرفتم به استفاده از Ollama روی بیاورم.
پس از انتشار مقاله معرفی اپراتور k8sgpt، برخی از خوانندگان به مانع بالای ورود برای استفاده از OpenAI اشاره کردند. این موضوع در واقع چالش برانگیز است اما غیر قابل حل نیست. با این حال، این مقاله در مورد حل آن مشکل نیست، بلکه معرفی جایگزینی برای OpenAI: Olama است. اواخر سال گذشته، k8sgpt وارد سندباکس CNCF شد.
1. نصب Olama
Ollama یک ابزار مدل بزرگ منبع باز است که به شما امکان می دهد به راحتی مدل های بزرگ مختلف را به صورت محلی یا در فضای ابری نصب و اجرا کنید. بسیار کاربرپسند است و با دستورات ساده قابل اجرا است. در macOS، می توانید آن را با یک دستور با استفاده از homebrew نصب کنید:
brew install ollama
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
آخرین نسخه 0.1.44 است.
ollama -v
Warning: could not connect to a running Ollama instance
Warning: client version is 0.1.44
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در لینوکس نیز می توانید آن را با اسکریپت رسمی نصب کنید.
curl -sSL https://ollama.com/install.sh | sh
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اوللاما را راه اندازی کنید و آدرس گوش دادن را روی آن تنظیم کنید 0.0.0.0 از طریق یک متغیر محیطی برای اجازه دسترسی از کانتینرها یا کلاسترهای K8s.
OLLAMA_HOST=0.0.0.0 ollama start
…
time=2024-06-16T07:54:57.329+08:00 level=INFO source=routes.go:1057 msg=”Listening on 127.0.0.1:11434 (version 0.1.44)”
time=2024-06-16T07:54:57.329+08:00 level=INFO source=payload.go:30 msg=”extracting embedded files” dir=/var/folders/9p/2tp6g0896715zst_bfkynff00000gn/T/ollama1722873865/runners
time=2024-06-16T07:54:57.346+08:00 level=INFO source=payload.go:44 msg=”Dynamic LLM libraries [metal]”
time=2024-06-16T07:54:57.385+08:00 level=INFO source=types.go:71 msg=”inference compute” id=0 library=metal compute=”” driver=0.0 name=”” total=”21.3 GiB” available=”21.3 GiB”
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
2. دانلود و اجرای مدل های بزرگ
Llama3، یکی از مدل های بزرگ محبوب، در ماه آوریل توسط متا منبع باز شد. Llama3 دارای دو نسخه 8B و 70B است.
من آن را روی macOS اجرا می کنم، بنابراین نسخه 8B را انتخاب کردم. نسخه 8B 4.7 گیگابایت است و دانلود با اتصال به اینترنت سریع 3-4 دقیقه طول می کشد.
ollama run llama3
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در M1 Pro من با 32 گیگابایت حافظه، حدود 12 ثانیه طول می کشد تا شروع شود.
time=2024-06-17T09:30:25.070+08:00 level=INFO source=server.go:572 msg=”llama runner started in 12.58 seconds”
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
هر پرس و جو حدود 14 ثانیه طول می کشد.
curl http://localhost:11434/api/generate -d ‘{
“model”: “llama3”,
“prompt”: “Why is the sky blue?”,
“stream”: false
}’
….
“total_duration”:14064009500,”load_duration”:1605750,”prompt_eval_duration”:166998000,”eval_count”:419,”eval_duration”:13894579000}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
3. پیکربندی K8sGPT CLI Backend
اگر می خواهید k8sgpt-operator را آزمایش کنید، می توانید از این مرحله صرف نظر کنید.
ما از Ollama REST API به عنوان backend برای k8sgpt استفاده خواهیم کرد که به عنوان ارائه دهنده استنتاج عمل می کند. در اینجا، نوع Backend را به عنوان انتخاب می کنیم localai زیرا LocalAI با OpenAI API سازگار است و ارائهدهنده واقعی همچنان Olama خواهد بود که Llama را اجرا میکند.
k8sgpt auth add –backend localai –model llama3 –baseurl http://localhost:11434/v1
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
آن را به عنوان ارائه دهنده پیش فرض تنظیم کنید.
k8sgpt auth default –provider localai
Default provider set to localai
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
آزمایش کردن:
با استفاده از تصویر یک pod در k8s ایجاد کنید image-not-exist.
kubectl get po k8sgpt-test
NAME READY STATUS RESTARTS AGE
k8sgpt-test 0/1 ErrImagePull 0 6s
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
برای تجزیه و تحلیل خطا از k8sgpt استفاده کنید.
k8sgpt analyze –explain –filter=Pod –namespace=default –output=json
{
“provider”: “localai”,
“errors”: null,
“status”: “ProblemDetected”,
“problems”: 1,
“results”: [
{
“kind”: “Pod”,
“name”: “default/k8sgpt-test”,
“error”: [
{
“Text”: “Back-off pulling image \”image-not-exist\””,
“KubernetesDoc”: “”,
“Sensitive”: []
}
],
“details”: “Error: Back-off pulling image \”image-not-exist\”\n\nSolution: \n1. Check if the image exists on Docker Hub or your local registry.\n2. If not, create the image using a Dockerfile and build it.\n3. If the image exists, check the spelling and try again.\n4. Verify the image repository URL in your Kubernetes configuration file (e.g., deployment.yaml).”,
“parentObject”: “”
}
]
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
4. استقرار و پیکربندی k8sgpt-operator
اپراتور k8sgpt می تواند k8sgpt را در خوشه خودکار کند. با استفاده از Helm می توانید آن را نصب کنید.
helm repo add k8sgpt https://charts.k8sgpt.ai/
helm repo update
helm install release k8sgpt/k8sgpt-operator -n k8sgpt –create-namespace
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اپراتور k8sgpt دو CRD را ارائه می دهد: K8sGPT برای پیکربندی k8sgpt و Result به نتایج تحلیل خروجی
kubectl api-resources | grep -i gpt
k8sgpts core.k8sgpt.ai/v1alpha1 true K8sGPT
results core.k8sgpt.ai/v1alpha1 true Result
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پیکربندی کنید K8sGPT، با استفاده از آدرس IP Olama برای baseUrl.
kubectl apply -n k8sgpt -f – << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-ollama
spec:
ai:
enabled: true
model: llama3
backend: localai
baseUrl: http://198.19.249.3:11434/v1
noCache: false
filters: [“Pod”]
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.8
EOF
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پس از ایجاد K8sGPT CR، اپراتور به طور خودکار یک pod برای آن ایجاد می کند. بررسی کردن Result CR همان نتایج را نشان خواهد داد.
kubectl get result -n k8sgpt -o jsonpath='{.items[].spec}’ | jq .
{
“backend”: “localai”,
“details”: “Error: Kubernetes is unable to pull the image \”image-not-exist\” due to it not existing.\n\nSolution: \n1. Check if the image actually exists.\n2. If not, create the image or use an alternative one.\n3. If the image does exist, ensure that the Docker daemon and registry are properly configured.”,
“error”: [
{
“text”: “Back-off pulling image \”image-not-exist\””
}
],
“kind”: “Pod”,
“name”: “default/k8sgpt-test”,
“parentObject”: “”
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
من پیش نویس های وبلاگم را در آخر هفته بررسی کردم و این یکی را پیدا کردم. به یاد دارم که حدود یک سال پیش آن را با “ابزار تشخیص خودکار Kubernetes: k8sgpt-operator” (به زبان چینی ارسال شده) نوشتم. به نظر می رسد تعلل من به حد بحرانی رسیده است. در ابتدا، من قصد داشتم از K8sGPT + LocalAI استفاده کنم. با این حال، پس از امتحان Ollama، آن را کاربر پسندتر یافتم. Ollama همچنین از OpenAI API پشتیبانی می کند، بنابراین تصمیم گرفتم به استفاده از Ollama روی بیاورم.
پس از انتشار مقاله معرفی اپراتور k8sgpt، برخی از خوانندگان به مانع بالای ورود برای استفاده از OpenAI اشاره کردند. این موضوع در واقع چالش برانگیز است اما غیر قابل حل نیست. با این حال، این مقاله در مورد حل آن مشکل نیست، بلکه معرفی جایگزینی برای OpenAI: Olama است. اواخر سال گذشته، k8sgpt وارد سندباکس CNCF شد.
1. نصب Olama
Ollama یک ابزار مدل بزرگ منبع باز است که به شما امکان می دهد به راحتی مدل های بزرگ مختلف را به صورت محلی یا در فضای ابری نصب و اجرا کنید. بسیار کاربرپسند است و با دستورات ساده قابل اجرا است. در macOS، می توانید آن را با یک دستور با استفاده از homebrew نصب کنید:
brew install ollama
آخرین نسخه 0.1.44 است.
ollama -v
Warning: could not connect to a running Ollama instance
Warning: client version is 0.1.44
در لینوکس نیز می توانید آن را با اسکریپت رسمی نصب کنید.
curl -sSL https://ollama.com/install.sh | sh
اوللاما را راه اندازی کنید و آدرس گوش دادن را روی آن تنظیم کنید 0.0.0.0
از طریق یک متغیر محیطی برای اجازه دسترسی از کانتینرها یا کلاسترهای K8s.
OLLAMA_HOST=0.0.0.0 ollama start
...
time=2024-06-16T07:54:57.329+08:00 level=INFO source=routes.go:1057 msg="Listening on 127.0.0.1:11434 (version 0.1.44)"
time=2024-06-16T07:54:57.329+08:00 level=INFO source=payload.go:30 msg="extracting embedded files" dir=/var/folders/9p/2tp6g0896715zst_bfkynff00000gn/T/ollama1722873865/runners
time=2024-06-16T07:54:57.346+08:00 level=INFO source=payload.go:44 msg="Dynamic LLM libraries [metal]"
time=2024-06-16T07:54:57.385+08:00 level=INFO source=types.go:71 msg="inference compute" id=0 library=metal compute="" driver=0.0 name="" total="21.3 GiB" available="21.3 GiB"
2. دانلود و اجرای مدل های بزرگ
Llama3، یکی از مدل های بزرگ محبوب، در ماه آوریل توسط متا منبع باز شد. Llama3 دارای دو نسخه 8B و 70B است.
من آن را روی macOS اجرا می کنم، بنابراین نسخه 8B را انتخاب کردم. نسخه 8B 4.7 گیگابایت است و دانلود با اتصال به اینترنت سریع 3-4 دقیقه طول می کشد.
ollama run llama3
در M1 Pro من با 32 گیگابایت حافظه، حدود 12 ثانیه طول می کشد تا شروع شود.
time=2024-06-17T09:30:25.070+08:00 level=INFO source=server.go:572 msg="llama runner started in 12.58 seconds"
هر پرس و جو حدود 14 ثانیه طول می کشد.
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "Why is the sky blue?",
"stream": false
}'
....
"total_duration":14064009500,"load_duration":1605750,"prompt_eval_duration":166998000,"eval_count":419,"eval_duration":13894579000}
3. پیکربندی K8sGPT CLI Backend
اگر می خواهید k8sgpt-operator را آزمایش کنید، می توانید از این مرحله صرف نظر کنید.
ما از Ollama REST API به عنوان backend برای k8sgpt استفاده خواهیم کرد که به عنوان ارائه دهنده استنتاج عمل می کند. در اینجا، نوع Backend را به عنوان انتخاب می کنیم localai
زیرا LocalAI با OpenAI API سازگار است و ارائهدهنده واقعی همچنان Olama خواهد بود که Llama را اجرا میکند.
k8sgpt auth add --backend localai --model llama3 --baseurl http://localhost:11434/v1
آن را به عنوان ارائه دهنده پیش فرض تنظیم کنید.
k8sgpt auth default --provider localai
Default provider set to localai
آزمایش کردن:
با استفاده از تصویر یک pod در k8s ایجاد کنید image-not-exist
.
kubectl get po k8sgpt-test
NAME READY STATUS RESTARTS AGE
k8sgpt-test 0/1 ErrImagePull 0 6s
برای تجزیه و تحلیل خطا از k8sgpt استفاده کنید.
k8sgpt analyze --explain --filter=Pod --namespace=default --output=json
{
"provider": "localai",
"errors": null,
"status": "ProblemDetected",
"problems": 1,
"results": [
{
"kind": "Pod",
"name": "default/k8sgpt-test",
"error": [
{
"Text": "Back-off pulling image \"image-not-exist\"",
"KubernetesDoc": "",
"Sensitive": []
}
],
"details": "Error: Back-off pulling image \"image-not-exist\"\n\nSolution: \n1. Check if the image exists on Docker Hub or your local registry.\n2. If not, create the image using a Dockerfile and build it.\n3. If the image exists, check the spelling and try again.\n4. Verify the image repository URL in your Kubernetes configuration file (e.g., deployment.yaml).",
"parentObject": ""
}
]
}
4. استقرار و پیکربندی k8sgpt-operator
اپراتور k8sgpt می تواند k8sgpt را در خوشه خودکار کند. با استفاده از Helm می توانید آن را نصب کنید.
helm repo add k8sgpt https://charts.k8sgpt.ai/
helm repo update
helm install release k8sgpt/k8sgpt-operator -n k8sgpt --create-namespace
اپراتور k8sgpt دو CRD را ارائه می دهد: K8sGPT
برای پیکربندی k8sgpt و Result
به نتایج تحلیل خروجی
kubectl api-resources | grep -i gpt
k8sgpts core.k8sgpt.ai/v1alpha1 true K8sGPT
results core.k8sgpt.ai/v1alpha1 true Result
پیکربندی کنید K8sGPT
، با استفاده از آدرس IP Olama برای baseUrl
.
kubectl apply -n k8sgpt -f - << EOF
apiVersion: core.k8sgpt.ai/v1alpha1
kind: K8sGPT
metadata:
name: k8sgpt-ollama
spec:
ai:
enabled: true
model: llama3
backend: localai
baseUrl: http://198.19.249.3:11434/v1
noCache: false
filters: ["Pod"]
repository: ghcr.io/k8sgpt-ai/k8sgpt
version: v0.3.8
EOF
پس از ایجاد K8sGPT
CR، اپراتور به طور خودکار یک pod برای آن ایجاد می کند. بررسی کردن Result
CR همان نتایج را نشان خواهد داد.
kubectl get result -n k8sgpt -o jsonpath='{.items[].spec}' | jq .
{
"backend": "localai",
"details": "Error: Kubernetes is unable to pull the image \"image-not-exist\" due to it not existing.\n\nSolution: \n1. Check if the image actually exists.\n2. If not, create the image or use an alternative one.\n3. If the image does exist, ensure that the Docker daemon and registry are properly configured.",
"error": [
{
"text": "Back-off pulling image \"image-not-exist\""
}
],
"kind": "Pod",
"name": "default/k8sgpt-test",
"parentObject": ""
}