منابع موجود را از طریق Helm مدیریت کنید!

منابع موجود را از طریق Helm مدیریت کنید
Helm واقعا یک ابزار بسیار قدرتمند برای مدیریت اشیاء Kubernetes است. با یک دستور، میتوانیم چندین موجودیت Kubernetes مرتبط را نصب یا ارتقا دهیم. فرض کنید میخواهیم هر نموداری را از رجیستری فرمان نصب کنیم، فقط باید دستور زیر را تایپ کنیم و فرمان کارهای سنگین را برای ما انجام میدهد.
$ helm install [RELEASE_NAME] [REPO]/[CHART]
اما پست زیر در مورد اصول اولیه فرمان یا نحوه نصب یا ارتقاء نمودار و غیره نیست. بلکه در مورد یادگیری جدید است.
هنگام نصب یکی از نمودارهایم، با مشکل زیر مواجه شدم:
خطا: INSTALLATION FAILED: مانیفست های رندر شده حاوی منبعی هستند که از قبل وجود دارد. ادامه نصب امکانپذیر نیست: StorageClass “demo-sc” در فضای نام “” وجود دارد و نمیتوان آن را به نسخه فعلی وارد کرد: فراداده مالکیت نامعتبر. خطای اعتبار سنجی برچسب: کلید گم شده “app.kubernetes.io/managed-by”: باید روی “Helm” تنظیم شود. خطای اعتبار نویسی حاشیه نویسی: کلید گم شده “meta.helm.sh/release-name”: باید روی “نسخه آزمایشی” تنظیم شود. خطای تایید حاشیه نویسی: کلید گم شده “meta.helm.sh/release-namespace”: باید روی “پیش فرض” تنظیم شود
دلیل این مشکل کاملاً واضح است، storageClass که بخشی از نمودار فرمان است از قبل با ویژگیهای یکسان وجود دارد و بنابراین نصب نمودار انجام نشد.
و با حذف آن شی به راحتی رفع می شود [storageClass in my case] و ادامه نصب نمودار.
اما دقیقا در پس زمینه چه اتفاقی می افتد؟ چگونه هل می داند که کدام شی را مدیریت کند؟ کدام مخالف به عنوان بخشی از انتشار با هم جمع شوند؟
پاسخ، برچسبها و حاشیهنویسیهای ساده است، اگر خطا را با دقت بخوانیم، نکات زیادی در مورد آنچه که فرمان در مانیفست Kubernetes انتظار دارد به ما میدهد.
خطای اعتبار سنجی برچسب: کلید گم شده “app.kubernetes.io/managed-by”: باید روی “Helm” تنظیم شود.
این برای یافتن تمام نهادهای مدیریت شده توسط فرمان استفاده می شود، اگر بخواهیم آن را به صورت دستی اصلاح کنیم، فقط می توانیم یک برچسب اضافه کنیم و کارمان تمام است.
خطای اعتبار نویسی حاشیه نویسی: کلید گم شده “meta.helm.sh/release-name”: باید روی “نسخه آزمایشی” تنظیم شود.
این برای تشخیص اینکه همه اشیاء Kubernetes چه بخشی از انتشار هستند استفاده می شود [demo-release in my case].
خطای تایید حاشیه نویسی: کلید گم شده “meta.helm.sh/release-namespace”: باید روی “پیش فرض” تنظیم شود
این برای تشخیص اینکه اشیاء Kubernetes باید در کدام فضای نام ایجاد شوند استفاده می شود [default in my case].
بنابراین، در حالت ایده آل، اگر این سه چیز را به یک شی موجود اضافه کنیم [storageclass in my case] و دوباره سعی کنید رها کننده را نصب کنید، فرمان با آن جسم به عنوان کودک خود رفتار می کند و مراقبت از آن را همراه با سایر اشیاء همان رهاسازی شروع می کند.
اگر علاقه مند هستید در زیر یک HowTo سریع آورده شده است.
$ kubectl label sc demo-sc app.kubernetes.io/managed-by=Helm
$ kubectl annotate sc demo-sc meta.helm.sh/release-name=demo-release
$ kubectl annotate sc demo-sc meta.helm.sh/release-namespace=default
*sc/storageClass نوعی شی است.
*demo-sc نام شی است.
هنگامی که دستورات بالا اجرا می شوند و اکنون که ما سعی می کنیم نمودار را نصب یا حتی حذف نصب کنیم، storageClass به عنوان بخشی از آن نسخه در نظر گرفته می شود.
$ helm upgrade --install demo-release ./demo
Release "demo-release" does not exist. Installing it now.
NAME: demo-release
LAST DEPLOYED: Tue Oct 11 11:18:15 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None