پرش به محتویات

آموزش کوبرنتیز؛ شب دوم: kubectl و کشف API

هدف امشب این است که بدون وابستگی به داشبورد گرافیکی، کلاستر را با اطمینان بررسی کنیم. مهم‌ترین عادت عملیاتی این است که پیش از هر تغییر، Context و Namespace مقصد را کنترل کنیم.

ایمنی Context و Namespace

kubectl config current-context
kubectl config get-contexts
kubectl config view --minify
kubectl get namespaces

Namespace این درس را بسازید:

kubectl create namespace course-night-2

می‌توانید Namespace را فقط برای یک فرمان تعیین کنید:

kubectl get pods --namespace course-night-2

یا Namespace پیش‌فرض Context فعلی را تغییر دهید:

kubectl config set-context --current --namespace=course-night-2
kubectl config view --minify --output 'jsonpath={..namespace}{"\n"}'

این تنظیم در پایان درس دوباره به default برگردانده می‌شود.

کشف منابع API

به‌جای حفظ‌کردن منابع و فیلدها، از خود API کمک بگیرید:

kubectl api-resources
kubectl api-resources --namespaced=true
kubectl api-resources --namespaced=false
kubectl api-versions
kubectl explain deployment
kubectl explain deployment.spec
kubectl explain deployment.spec.strategy

دو فرمان دوم و سوم نشان می‌دهند هر منبع درون Namespace قرار می‌گیرد یا در سطح کل کلاستر تعریف می‌شود. kubectl explain نیز مستندات Schema را مستقیماً از API در اختیارتان می‌گذارد.

قالب‌های خروجی

یک منبع واحد را می‌توان با قالب‌های گوناگون مشاهده کرد:

kubectl get nodes
kubectl get nodes -o wide
kubectl get nodes -o name
kubectl get nodes -o yaml
kubectl get nodes -o json

برای گزارش‌های دقیق‌تر، ستون‌های سفارشی و JSONPath کاربردی‌اند:

kubectl get nodes \
  -o custom-columns='NAME:.metadata.name,READY:.status.conditions[-1].status,KUBELET:.status.nodeInfo.kubeletVersion'

kubectl get pods -A \
  -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,NODE:.spec.nodeName,PHASE:.status.phase'

kubectl get nodes \
  -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.containerRuntimeVersion}{"\n"}{end}'

فیلترکردن و بررسی سلامت

با Label Selector و Field Selector دامنهٔ خروجی را محدود کنید:

kubectl get pods -A --show-labels
kubectl get pods -A --field-selector=status.phase=Running
kubectl get pods -A -l app=nginx

رویدادها و Endpointهای خام سلامت API را نیز بررسی کنید:

kubectl get events -A --sort-by=.metadata.creationTimestamp
kubectl get --raw='/version'
kubectl get --raw='/readyz'

چک‌لیست پایان

  • پیش از تغییر کلاستر، Context و Namespace را بررسی کرده‌ام.
  • می‌توانم Namespaced یا Cluster-scoped بودن یک منبع را پیدا کنم.
  • یک فیلد ناآشنا را با kubectl explain بررسی کرده‌ام.
  • خروجی YAML، ستون سفارشی و JSONPath ساخته‌ام.
  • آبجکت‌ها را بر اساس Label و Field فیلتر کرده‌ام.

در پایان Context و محیط تمرین را به حالت قبل برگردانید:

kubectl config set-context --current --namespace=default
kubectl delete namespace course-night-2