تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش کامل دستورات پرکاربرد Kubectl برای مدیریت Kubernetes


۲۹ شهریور ۱۴۰۴

اگر با Kubernetes کار می‌کنید، بدون شک kubectl ابزار اصلی ارتباطی شما با کلاسترها است. kubectl یک ابزار مبتنی بر خط فرمان یا CLI است که امکان برقراری ارتباط میان Kubernetes API و کنترل ‌پلن (Control Plane) را فراهم می‌کند. در واقع با Kubectl، می‌توانید با کلاستر کوبرنتیز ارتباط برقرار کنید و کارهای مختلفی از جمله مدیریت کلاستر، استقرار برنامه‌ها، مانیتورینگ منابع و اجرای دستورات داخل کانتینر را انجام دهید. در این مقاله از بلاگ لیارا، شما را با ابزار کاربردی Kubectl آشنا خواهیم کرد. همراه ما باشید:)

در ادامه بخوانید:

  • دستورات پایه kubectl
  • Namespace در کوبرنتیز
  • مدیریت پادها (Pods) در کوبرنتیز
  • مدیریت Service در Kubernetes
  • استقرار سرویس در کوبرنتیز
  • ConfigMap در کوبرنتیز
  • نگهداری، نظارت و عیب یابی Kubernetes
  • مدیریت مقیاس‌گذاری و مقیاس‌گذاری خودکار در Kubernetes
  • کنترل دسترسی مبتنی بر نقش (RBAC) در کوبرنتیز
  • مدیریت کلاسترهای Kubernetes
  • دستورات پیشرفته kubectl
  • جمع بندی
  • سوالات متداول
آموزش کامل دستورات پرکاربرد Kubectl برای مدیریت Kubernetes

دستورات پایه 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] برای مشاهده لاگ‌ها، از روش‌های رایج عیب‌یابی هستند.

به اشتراک بگذارید