تخطَّ إلى المحتوى

kubectl و YAML

ستتعلم أوامر kubectl الأساسية، بنية ملفات YAML، وكيف تنتقل من أمر سريع إلى manifest قابل للحفظ في Git.

kubectl هو العميل الذي يتحدث مع Kubernetes API Server. أما YAML فهو وصف الحالة المطلوبة: ما الموارد التي تريدها؟ بأي أسماء؟ بأي إعدادات؟

flowchart LR
W[اكتب YAML] --> A[kubectl apply]
A --> API[API Server]
API --> C[Controllers]
C --> S[Actual State]
S --> G[kubectl get/describe/logs]
G --> W
Terminal window
kubectl get nodes
kubectl get namespaces
kubectl get pods -A
kubectl get pod hello-pod -o wide
kubectl describe pod hello-pod
kubectl logs hello-pod
kubectl events --sort-by=.metadata.creationTimestamp

Expected output:

NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 10m v1.34.0

أي object في Kubernetes غالبا يبدأ بهذه الأجزاء:

apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
namespace: default
labels:
app: demo
data:
APP_MODE: "dev"
LOG_LEVEL: "debug"
الحقلوظيفته
apiVersionإصدار API لهذا المورد
kindنوع المورد
metadataالاسم، namespace، labels، annotations
spec أو dataالحالة المطلوبة أو البيانات حسب نوع المورد
Terminal window
kubectl apply -f configmap.yaml
kubectl get configmap app-config -o yaml
kubectl diff -f configmap.yaml
kubectl delete -f configmap.yaml

استخدم kubectl diff قبل التعديل عندما تريد معرفة ما الذي سيتغير.

إنشاء YAML مبدئي بدون تطبيق:

Terminal window
kubectl create deployment web --image=nginx:1.27 --dry-run=client -o yaml > deployment.yaml
kubectl create service clusterip web --tcp=80:80 --dry-run=client -o yaml > service.yaml

شرح سريع:

الخيارالمعنى
--dry-run=clientلا يرسل المورد إلى cluster
-o yamlاطبع الناتج بصيغة YAML
>احفظ الناتج في ملف
Terminal window
kubectl config get-contexts
kubectl config current-context
kubectl config set-context --current --namespace=default
kubectl get pods --namespace kube-system

لا تعمل على namespace خطأ. قبل أي أمر حساس، نفذ:

Terminal window
kubectl config current-context
kubectl config view --minify --output 'jsonpath={..namespace}'
الخطأالسببالحل
error: no context existskubeconfig غير مضبوطراجع kubectl config get-contexts
the server doesn't have a resource typekind أو apiVersion خطأاستخدم kubectl api-resources
forbiddenصلاحيات RBAC غير كافيةافحص kubectl auth can-i
YAML لا يطبقindentation أو field خطأاستخدم kubectl apply --dry-run=server -f file.yaml

Lab: من أمر سريع إلى YAML قابل للحفظ

المستوى: مبتدئ الوقت: 35 دقيقة الأدوات: kubectl

الهدف: توليد Deployment و Service بصيغة YAML، مراجعة الفرق، ثم تطبيقهما.

  • Cluster محلي يعمل.
  • صلاحية إنشاء Deployment و Service في namespace الحالي.
  1. ولد Deployment:
Terminal window
kubectl create deployment web --image=nginx:1.27 --dry-run=client -o yaml > deployment.yaml
  1. ولد Service:
Terminal window
kubectl create service clusterip web --tcp=80:80 --dry-run=client -o yaml > service.yaml
  1. راجع الملفات، ثم طبقها:
Terminal window
kubectl diff -f deployment.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
  1. افحص الموارد:
Terminal window
kubectl get deploy,svc,pods -l app=web
deployment.apps/web created
service/web created
NAME READY UP-TO-DATE AVAILABLE
deployment.apps/web 1/1 1 1
Terminal window
kubectl delete -f service.yaml
kubectl delete -f deployment.yaml

الربط بالمشروع النهائي

Section titled “الربط بالمشروع النهائي”

كل مشروع ستبنيه سيبدأ بملفات YAML واضحة، ثم سيتطور إلى Helm و GitOps. إتقان kubectl و YAML هو أساس كل شيء بعد ذلك.