آنچه در این مقاله میخوانید
- دستورات پایه kubectl
- Namespace در کوبرنتیز
- مدیریت پادها (Pods) در کوبرنتیز
- مدیریت Service در Kubernetes
- استقرار سرویس در کوبرنتیز
- ConfigMap در کوبرنتیز
- نگهداری، نظارت و عیب یابی Kubernetes
- مدیریت مقیاسگذاری و مقیاسگذاری خودکار در Kubernetes
- کنترل دسترسی مبتنی بر نقش (RBAC) در کوبرنتیز
- مدیریت کلاسترهای Kubernetes
- دستورات پیشرفته kubectl
- جمعبندی
- سوالات متداول
آموزش کامل دستورات پرکاربرد Kubectl برای مدیریت Kubernetes
۲۹ شهریور ۱۴۰۴
اگر با Kubernetes کار میکنید، بدون شک kubectl ابزار اصلی ارتباطی شما با کلاسترها است. kubectl یک ابزار مبتنی بر خط فرمان یا CLI است که امکان برقراری ارتباط میان Kubernetes API و کنترل پلن (Control Plane) را فراهم میکند. در واقع با Kubectl، میتوانید با کلاستر کوبرنتیز ارتباط برقرار کنید و کارهای مختلفی از جمله مدیریت کلاستر، استقرار برنامهها، مانیتورینگ منابع و اجرای دستورات داخل کانتینر را انجام دهید. در این مقاله از بلاگ لیارا، شما را با ابزار کاربردی Kubectl آشنا خواهیم کرد. همراه ما باشید:)
در ادامه بخوانید:
- دستورات پایه kubectl
- Namespace در کوبرنتیز
- مدیریت پادها (Pods) در کوبرنتیز
- مدیریت Service در Kubernetes
- استقرار سرویس در کوبرنتیز
- ConfigMap در کوبرنتیز
- نگهداری، نظارت و عیب یابی Kubernetes
- مدیریت مقیاسگذاری و مقیاسگذاری خودکار در Kubernetes
- کنترل دسترسی مبتنی بر نقش (RBAC) در کوبرنتیز
- مدیریت کلاسترهای Kubernetes
- دستورات پیشرفته kubectl
- جمع بندی
- سوالات متداول

دستورات پایه kubectl
Kubectl یکی از مهمترین ابزارها برای مدیریت زیرساختهای مبتنی بر کوبرنتیز میباشد که درک دستورات پایه kubectl برای هر کاربری که از Kubernetes استفاده میکند، ضروری است. این دستورات پایه و اساس مدیریت منابع داخل یک کلاستر در کوبرنتیز را تشکیل میدهند.
دستور kubectl version
این دستور برنامه کلاینت kubectl که روی سیستم شما اجرا میشود و نسخه سرور Kubernetes که روی کلاستر شما فعال است را نمایش میدهد. این کار به شما کمک میکند تا مطمئن شوید نسخه ابزار kubectl با نسخه کلاستر Kubernetes شما هماهنگ و سازگار است.
kubectl version --short
دستور kubectl get
این دستور اطلاعات مربوط به منابع داخل کلاستر کوبرنتیز را دریافت میکند. معمولا با انواع منابع مختلف مانند پادها(pods)، سرویسها(services) و نودها (nodes) استفاده میشود.
مانند دستور زیر:
kubectl get pods
kubectl get services
kubectl get nodes
شما همچنین میتوانید با استفاده از گزینه -o
خروجی را در فرمتهای مختلف JSON یا YAMLدریافت کنید:
kubectl get pods -o json
kubectl get services -o yaml
دستور kubectl describe
دستور kubectl describe
اطلاعات جامع و دقیقی درباره یک منبع (Resource) در کوبرنیتز ارائه میدهد، از جمله وضعیت آن، رویدادهای مرتبط و پیکربندی آن. این دستور برای عیبیابی و درک بهتر وضعیت یک منبع بسیار کاربردی است.
kubectl describe pod [pod-name]
kubectl describe service [service-name]
دستور kubectl create
همانطور که از نامش پیداست، این دستور برای ایجاد یک منبع در کلاستر Kubernetes استفاده میشود، و اینکار معمولا با استفاده از فایلهای YAML یا JSON انجام میشود که اطلاعات منبع را تعریف کردهاند. همچنین میتوان منبع را از ورودی استاندارد (standard input) نیز ایجاد کرد.
این دستور زمانی کاربرد دارد که بخواهید به سرعت منابع جدیدی مانند پاد، سرویس، دیپلویمنت را بر اساس فایلهای پیکربندی ایجاد کنید.
مانند دستور زیر:
kubectl create -f [file.yaml]
kubectl create namespace [namespace-name]
دستور kubectl delete
از این دستور برای حذف منابع در کلاستر کوبرنتیز استفاده میشود. شما میتوانید منابع را با استفاده از نام فایل، ورودی استاندارد، نوع منبع یا نام آنها حذف کنید.
همچنین، این دستور برای پاکسازی منابعی که دیگر نیاز ندارید بسیار ضروری و کاربردی است.
kubectl delete pod [pod-name]
kubectl delete -f [file.yaml]
برای آشنایی کامل با کوبرنتیز و نحوه کارکرد آن، مقاله زیر را از دست ندهید.
کوبرنتیز چیست؟
Namespace در کوبرنتیز
در کوبرنتیز، Namespace یک روش برای تقسیم منابع یک کلاستر فیزیکی به کلاسترهای مجازی کوچکتر است. به عبارت دیگر، Namespace ها به شما اجازه میدهند تا منابع یک کلاستر کوبرنتیز را به گروههای منطقی تقسیم کنید و آنها را از هم جدا کنید. این کار باعث میشود که مدیریت و سازماندهی منابع در یک محیط بزرگ و پیچیده آسانتر شود. در ادامه روشهای مختلف ایجاد یک Namespace توضیح داده شده است.
دستور kubectl get namespaces
این دستور لیستی از تمام Namespaceهای موجود در کلاستر را نمایش میدهد.
kubectl get namespaces
با استفاده از Namespaceها میتوانید محیطهای ایزوله و جداگانهای داخل کلاستر ایجاد کنید، که برای محیطهایی مانند staging و production بسیار کاربردی است.
دستور kubectl create namespace
یک Namespace جدید در کلاستر ایجاد میکند.
مثال:
kubectl create namespace [namespace-name]
این دستور زمانی کاربرد دارد که بخواهید منابع مربوط به پروژهها یا تیمهای مختلف را از هم جدا و ایزوله کنید.
دستور kubectl delete namespace
این دستور یک Namespace مشخص را به همراه تمام منابع داخل آن حذف میکند. هنگام استفاده از این دستور باید دقت کنید، زیرا تمام منابع موجود در آن Namespace به طور کامل پاک خواهند شد.
kubectl delete namespace [namespace-name]
در مقاله زیر، ۸ نکته امنیتی Kubernetes که هر متخصص دواپس باید بداند! را میتوانید مطالعه کنید.
نکات امنیتی Kubernetes
مدیریت پادها (Pods) در کوبرنتیز
در کوبرنتیز، پادها کوچکترین واحدهای قابل مدیریت هستند که کانتینرها را در خود جای میدهند. مدیریت پادها شامل ایجاد، حذف، مقیاسبندی و نظارت بر آنهاست. در ادامه برخی دستورات کاربردی پادها در کوبرنتیز را بررسی میکنیم.
دستور kubectl get pods
دستور زیر، تمام Podهای موجود در Namespace مشخص شده یا در Namespace پیشفرض را نمایش میدهد.
kubectl get pods
kubectl get pods -n [namespace]
دستور kubectl describe pod
این دستور، اطلاعات کاملی درباره یک پاد مشخص ارائه میدهد، شامل وضعیت آن، رویدادهای مرتبط و مصرف منابع.
مثال:
kubectl describe pod [pod-name]
دستور بالا، نقش مهمی در پیدا کردن مشکلات Pod و فهم دقیقتر وضعیت آن دارد.
دستور kubectl exec
دستور kubectl exec
، یک فرمان را در داخل کانتینر موجود در Pod مشخص شده اجرا میکند. این قابلیت برای عیبیابی و بررسی برنامههای در حال اجرا بسیار مفید است.
مثال:
kubectl exec -it [pod-name] -- [command]
برای مثال، میتوانید یک شل (shell) داخل کانتینر در حال اجرا باز کنید:
kubectl exec -it [pod-name] -- /bin/bash
ویژگیهای پیشرفته Kubernetes Kapsule را در مقاله زیر بخوانید.
ویژگیهای پیشرفته Kubernetes Kapsule
مدیریت Service در Kubernetes
مدیریت سرویسها در کوبرنتیز از طریق اشیاء سرویس (Services) انجام میشود که به عنوان یک لایه انتزاعی برای دسترسی به مجموعهای از پادها (Pods) عمل میکنند. در ادامه دستورات پرکاربرد آن را بررسی میکنیم.
دستور kubectl get services
این دستور تمام سرویسهای موجود در Namespace مشخص شده یا در Namespace پیشفرض را فهرست میکند:
kubectl get services
kubectl get services -n [namespace]
دستور kubectl describe service
اگر اطلاعات دقیق و کاملی درباره یک سرویس مشخص بخواهید، از جمله نقاط انتهایی (endpoints) و سلکتور (selector) آن، این دستور برای این کار است.
kubectl describe service [service-name]
با اجرای دستور بالا متوجه میشوید که ترافیک چگونه به Podها هدایت میشود.
دستور kubectl delete service
این دستور یک سرویس مشخص را از کلاستر حذف میکند.
kubectl delete service [service-name]
دستور kubectl expose
این دستور یک منبع (مثل Pod، Deployment یا ReplicaSet) را به عنوان یک سرویس جدید در Kubernetes معرفی میکند. معمولاً برای ایجاد دسترسی شبکهای به منابع داخل کلاستر استفاده میشود.
kubectl expose pod [pod-name] --port=[port] --target-port=[target-port]
برای مثال، میتوانید یک Deployment را بهصورت یک سرویس با نوع LoadBalancer منتشر کنید:
kubectl expose deployment [deployment-name] --type=LoadBalancer --port=80 --target-port=8080
برای آموزش نصب و راهاندازی Kubernetes روی سرور فیزیکی (بدون مجازیسازی)، مقاله زیر را میتوانید مطالعه کنید.
نحوه نصب و راهاندازی Kubernetes
استقرار سرویس در کوبرنتیز
استقرار سرویس در کوبرنتیز به فرآیند راهاندازی و مدیریت برنامههای کاربردی (سرویسها) در یک کلاستر کوبرنتیز اشاره دارد. این فرآیند شامل ایجاد و مدیریت منابع کوبرنتیز مانند پادها (Pods)، استقرارها (Deployments)، سرویسها (Services) و تنظیمات (ConfigMaps) برای اجرای یک برنامه به صورت پایدار و مقیاسپذیر است. در ادامه چند دستور کاربردی و مهم برای استقرار سرویس در Kubernetes را به شما معرفی میکنیم.
دستور kubectl get deployments
این دستور همهی استقرارهای موجود در Namespace مشخص شده یا در Namespace پیشفرض را فهرست میکند.
kubectl get deployments kubectl get deployments -n [namespace]
دستور kubectl describe deployment
اگر اطلاعات جامع و دقیقی درباره یک استقرار مشخص میخواهید، شامل استراتژی و وضعیت فعلی و رویدادهای مربوط به آن، این دستور برای اینکار است.
kubectl describe deployment [deployment-name]
ناگفته نماند این دستور برای درک بهتر وضعیت و پیکربندی Deploymentها بسیار کاربردی است.
دستور kubectl create deployment
این دستور یک Deployment جدید در کلاستر ایجاد میکند:
kubectl create deployment [deployment-name] --image=[image]
برای مثال، میتوانید یک Deployment با استفاده از ایمیج nginx ایجاد کنید:
kubectl create deployment nginx-deployment --image=nginx
دستور kubectl delete deployment
برای حذف یک Deployment مشخص دستور زیر را اجرا کنید:
kubectl delete deployment [deployment-name]
دستور kubectl rollout status
این دستور، وضعیت Rollout (فرآیند بهروزرسانی) یک Deployment را بررسی میکند.
kubectl rollout status deployment/[deployment-name]
ConfigMap در کوبرنتیز
در دنیای کوبرنتیز، برای ذخیره اطلاعات پیکربندی غیرحساس از ConfigMap استفاده میشود. کانفیگمپ یک API Object استاندارد است که اطلاعات پیکربندی اپلیکیشن را بهصورت Key-Value
ذخیره میکند. در ادامه دستورات مهم آن بررسی شده است.
دستور kubectl get configmaps
این دستور همه ConfigMapهای موجود در Namespace مشخص شده یا در Namespace پیشفرض را نمایش میدهد.
kubectl get configmaps
kubectl get configmaps -n [namespace]
دستور kubectl create configmap
دستور زیر، یک ConfigMap جدید ایجاد میکند که میتواند از فایل، مقدار متنی مستقیم (literal) یا فایل محیطی (environment file) ساخته شود.
kubectl create configmap [configmap-name] --from-file=[file-path]
kubectl create configmap [configmap-name] --from-literal=[key=value]
برای مثال، میتوانید یک ConfigMap از فایل بسازید:
kubectl create configmap my-config --from-file=config.yaml
آموزش گام به گام راه اندازی رجیستری خصوصی داکر در اوبونتو را در مقاله زیر بخوانید.
راه اندازی رجیستری خصوصی داکر
نگهداری، نظارت و عیب یابی Kubernetes
نگهداری، نظارت و عیبیابی در Kubernetes به طور کلی شامل مجموعهای از فعالیتها برای حفظ سلامت و پایداری یک کلاستر Kubernetes است. این فعالیتها شامل پشتیبانگیری و بازیابی، ارتقاء کلاسترها، مانیتورینگ و عیبیابی در صورت بروز مشکلات است. در ادامه چند دستور پرکاربرد را ذکر میکنیم.
دستور kubectl logs
این دستور لاگهای یک کانتینر در داخل یک Pod را دریافت میکند.
kubectl logs [pod-name]
kubectl logs [pod-name] -c [container-name]
برای عیبیابی و رفع مشکلات در داخل پادها، اجرای این دستور ضروری است.
دستور kubectl top pod
میزان مصرف منابع (CPU و حافظه) پادها را با دستور زیر مشاهده کنید.
kubectl top pod
kubectl top pod -n [namespace]
دستور kubectl top node
این دستور میزان مصرف منابع (CPU و حافظه) هر Node در کلاستر را نمایش میدهد.
kubectl top node
ناگفته نماند، مانیتورینگ منابع Nodeها برای درک سلامت کلی و ظرفیت کلاستر بسیار مهم است.
مدیریت مقیاسگذاری و مقیاسگذاری خودکار در Kubernetes
در Kubernetes، مدیریت مقیاسپذیری و مقیاسگذاری خودکار (autoscaling) به شما این امکان را میدهد که تعداد نمونههای یک برنامه (به عنوان مثال، تعداد پادها) را بر اساس نیازهای منابع و ترافیک به طور خودکار افزایش یا کاهش دهید.
دستور kubectl scale
این دستور تعداد نمونههای (replica) یک Deployment را به تعداد مشخص شده افزایش یا کاهش میدهد.
مثال:
kubectl scale deployment [deployment-name] --replicas=[number]
برای نمونه، میتوانید یک Deployment را به سه replica افزایش دهید:
kubectl scale deployment nginx-deployment --replicas=3
کنترل دسترسی مبتنی بر نقش (RBAC) در کوبرنتیز
کنترل دسترسی مبتنی بر نقش (RBAC) در کوبرنتیز یک مکانیزم امنیتی است که به مدیران اجازه میدهد تا دسترسی کاربران و سرویسها به منابع مختلف در یک کلاستر کوبرنتیز را بر اساس نقشهای تعریفشده مدیریت کنند.
دستور kubectl get roles
این دستور تمام Roleهای موجود در Namespace مشخص شده یا در Namespace پیشفرض را نمایش میدهد.
kubectl get roles
kubectl get roles -n [namespace]
دستور kubectl create role
این دستور یک Role جدید با قوانین مشخص شده ایجاد میکند.
kubectl create role [role-name] --verb=[verb] --resource=[resource]
برای مثال، میتوانید یک Role ایجاد کنید که اجازه خواندن Podها را داشته باشد:
kubectl create role pod-reader --verb=get,list,watch --resource=pods
دستور kubectl get rolebindings
این دستور تمام RoleBindingهای موجود در Namespace مشخص شده یا در Namespace پیشفرض را لیست میکند.
kubectl get rolebindings
kubectl get rolebindings -n [namespace]
دستور kubectl create rolebinding
این دستور نیز یک RoleBinding جدید ایجاد میکند تا یک Role را به یک کاربر، گروه، یا حساب سرویس متصل کند.
kubectl create rolebinding [rolebinding-name] --role=[role-name] --user=[user-name]
برای مثال، میتوانید یک Role را به یک کاربر متصل کنید:
kubectl create rolebinding pod-reader-binding --role=pod-reader --user=example-user
مدیریت کلاسترهای Kubernetes
مدیریت کلاسترهای Kubernetes به فرآیند مدیریت و هماهنگی منابع و کانتینرهای برنامهها در یک کلاستر Kubernetes اشاره دارد.
دستور kubectl cluster-info
با استفاده از این دستور میتوانید اطلاعات کلی درباره کلاستر Kubernetes را مشاهده کنید.
kubectl cluster-info
این دستور یک نمای کلی از کلاستر ارائه میدهد، شامل آدرسهای Master و DNS.
دستور kubectl get nodes
تمامی Nodeهای موجود در کلاستر را لیست کنید.
kubectl get nodes
ناگفته نماند، درک وضعیت Nodeها برای حفظ سلامت و پایداری کلاستر بسیار اهمیت دارد.
دستور kubectl drain
این دستور تمامی Podها را به صورت امن از روی یک Node تخلیه میکند تا عملیات نگهداری بدون ایجاد اختلال انجام شود.
kubectl drain [node-name]
دستور kubectl cordon
دستور cordon یک Node را بهعنوان “غیرقابل برنامهریزی” علامتگذاری میکند تا از زمانبندی (schedule) شدن Podهای جدید روی آن جلوگیری شود.
kubectl cordon [node-name]
با سرور مجازی لینوکس لیارا، قدرت، سرعت و امنیت را یکجا داشته باشید!
✅ منابع اختصاصی و مقیاسپذیر✅ استقرار سریع بدون پیچیدگی ✅ قیمت مقرونبهصرفه
خرید سرور مجازی لینوکس ساعتی لیارا
دستورات پیشرفته kubectl
با استفاده از این دستورات پیشرفته و تکنیکهای مرتبط، میتوانید مدیریت کلاستر Kubernetes را به سطح حرفهایتری ارتقاء دهید و مشکلات پیچیدهتر را سریعتر شناسایی و رفع کنید.
kubectl apply
این دستور پیکربندی یک منبع را از طریق فایل یا ورودی استاندارد اعمال میکند.
kubectl apply -f [file.yaml]
دستور apply
معمولاً برای اعمال تغییرات تدریجی (incremental) روی منابع استفاده میشود.
kubectl patch
یک منبع را با استفاده از یک patch بهروزرسانی میکند.
kubectl patch [resource-type] [resource-name] --patch [json-patch]
مثال: برای بهروزرسانی ایمیج یک deployment دستور زیر را اجرا کنید.
kubectl patch deployment [deployment-name] -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.15.4"}]}}}}'
kubectl replace
یک منبع را از طریق فایل یا ورودی استاندارد جایگزین میکند.
kubectl replace -f [file.yaml]
kubectl annotate
یک annotation جدید به منبع اضافه کرده یا آن را بهروزرسانی میکند.
kubectl annotate [resource-type] [resource-name] [annotation-key]=[annotation-value]
مثال: اضافه کردن annotation به یک pod به شکل زیر است.
kubectl annotate pod [pod-name] description="This is my pod"
kubectl label
یک label جدید به منبع اضافه کرده یا آن را بهروزرسانی میکند.
kubectl label [resource-type] [resource-name] [label-key]=[label-value]
مثال: اضافه کردن label به یک pod را با اجرای کد زیر مشاهده کنید.
kubectl label pod [pod-name] app=myapp
جمعبندی
تسلط بر دستورات kubectl یکی از مهارتهای پایه و ضروری برای هر فردی است که با Kubernetes کار میکند. در این مقاله ۱۰۰ دستور برتر را معرفی کردیم که به شما کمک میکند منابع Kubernetes خود را به شکل مؤثر مدیریت کنید. با تمرین این دستورات و استفاده منظم از آنها در فرآیند کاری روزانه، توانمندی شما در مدیریت و عیبیابی برنامههای Kubernetes به طرز چشمگیری افزایش خواهد یافت.
سوالات متداول
۱. kubectl چیست و چرا برای کار با Kubernetes ضروری است؟
kubectl ابزار خط فرمان اصلی برای تعامل با کلاستر Kubernetes است که امکان مدیریت منابع، استقرار برنامهها، عیبیابی و مانیتورینگ را فراهم میکند.
۲. چگونه میتوانم منابع داخل کلاستر Kubernetes را با kubectl مشاهده کنم؟
دستور kubectl get
برای نمایش منابع مختلف مانند پادها، سرویسها و نودها استفاده میشود. مثلاً kubectl get pods
لیستی از پادهای موجود را نمایش میدهد.
۳. تفاوت Namespace با دیگر منابع در Kubernetes چیست و چگونه میتوان Namespace جدید ایجاد کرد؟
Namespace یک فضای منطقی جداکننده منابع داخل کلاستر است که امکان تفکیک پروژهها یا محیطها را فراهم میکند. با دستور kubectl create namespace [namespace-name]
میتوانید Namespace جدید ایجاد کنید.
۴. چگونه میتوانم مشکلات یک Pod را با استفاده از kubectl شناسایی و رفع کنم؟
استفاده از دستور kubectl describe pod [pod-name]
برای مشاهده جزئیات و رویدادها، و دستور kubectl logs [pod-name]
برای مشاهده لاگها، از روشهای رایج عیبیابی هستند.