مفاهیم پایه
هر کاری که در کنسول انجام میدهید یک شیء به سبک Kubernetes است. کنسول نمایی از همین اشیاست و همان اشیا با kubectl هم در دسترساند.
فضای کاری و namespace
- فضای کاری (Workspace) یعنی سازمان شما، مثلاً tapsifood. هر فضای کاری API server جدای خودش را دارد و هیچ چیز در آن از فضای کاری دیگر دیده نمیشود. این API با kubectl سازگار است؛ کلاستر Kubernetes برای اجرای بار کاری شما نیست.
- namespace یک پروژه داخل فضای کاری است، مثلاً default یا production. ماشینها، دیسکها، Bucket Claimها و آدرسها در namespace قرار میگیرند.
| محدوده | چه چیزی | نمونه |
|---|---|---|
| فضای کاری | زیرساخت مشترک و تنظیمات سازمان | VPC، Subnet، S3Bucket، WorkspaceMembership، PublicIP، صورتحساب |
| namespace | بارهای کاری و claimها | VirtualMachine، PersistentVolumeClaim، PrivateIP، PublicIPClaim، S3BucketClaim، NamespaceMembership |
یک namespace فقط از طریق grant یا claim به دارایی فضای کاری دسترسی دارد: Subnet فهرست namespaceهای مجاز را دارد، PersistentVolumeClaim یک PersistentVolume را bind میکند و S3BucketClaim برای یک namespace، Bucket میسازد.
کاتالوگ
Zone، MachineType، MachineImage و StorageClass کاتالوگ پلتفرم هستند؛ در همهی فضاهای کاری یکسان و فقطخواندنیاند (create پاسخ 405 MethodNotAllowed میدهد).
| نوع | مقادیر فعلی |
|---|---|
| Zone | thr-az2 (منطقهی thr) |
| MachineType | ex811 … ex816 |
| MachineImage | ubuntu-24-04، ubuntu-26-04، debian-12، debian-13 |
| StorageClass | ssd |
❯ kubectl get zones,machinetypes,machineimages
spec، status و conditions
- spec چیزی است که درخواست دادهاید؛ status چیزی است که وجود دارد. پلتفرم هیچوقت spec شما را بازنویسی نمیکند.
- status.phase خلاصهی یککلمهای برای نمایش است (Pending، Ready، Available، Error، Bound، Released). status.conditions[] قرارداد اصلی است: Ready بههمراه conditionهای خاص هر نوع، هرکدام با reason و message.
- ساخت یک شیء ممکن است موفق باشد ولی در Ready=False بماند (تداخل آدرس، نبود grant، سقف سهمیه). این خطا نیست؛ شیء ساخته شده و condition دلیلش را میگوید.
- اگر status.observedGeneration کمتر از metadata.generation باشد، کنترلر هنوز آخرین تغییر را اعمال نکرده است.
ارجاع، تغییرناپذیری و حذف امن
اشیا با نام به هم ارجاع میدهند (subnetRef: {name: app-a}). برخی فیلدها پس از ثبت تغییرناپذیرند: image، placement و SSH keyهای ماشین، CIDR یک Subnet، storage class یک claim. برای تغییر آنها باید شیء جدید بسازید.
VPC دارای Subnet، Subnet دارای آدرس، دیسک متصل، آدرس عمومی bindشده یا image در حال استفاده تا وقتی وابستگیشان باقی است حذف نمیشوند؛ kubectl delete منتظر میماند یا با ذکر دلیل رد میشود.