آموزش کوبرنتیز؛ شب دوم: kubectl و کشف API¶
هدف امشب این است که بدون وابستگی به داشبورد گرافیکی، کلاستر را با اطمینان بررسی کنیم. مهمترین عادت عملیاتی این است که پیش از هر تغییر، Context و Namespace مقصد را کنترل کنیم.
ایمنی Context و Namespace¶
kubectl config current-context
kubectl config get-contexts
kubectl config view --minify
kubectl get namespaces
Namespace این درس را بسازید:
میتوانید Namespace را فقط برای یک فرمان تعیین کنید:
یا 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 و محیط تمرین را به حالت قبل برگردانید: