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

Objects و Labels و Namespaces

Object هو مورد داخل Kubernetes مثل Pod أو Deployment أو Service. كل Object له:

  • apiVersion: إصدار API.
  • kind: نوع المورد.
  • metadata: الاسم والـ labels والـ annotations.
  • spec: الحالة التي تريدها.
  • status: الحالة الحالية التي يكتبها Kubernetes.
apiVersion: v1
kind: Namespace
metadata:
name: training

metadata هي بطاقة تعريف المورد.

metadata:
name: web
labels:
app: web
env: dev
annotations:
owner: devops-team

Labels تستخدم للاختيار والربط.

مثال: Service يختار Pods التي تحمل label:

selector:
app: web

Namespace يقسم Cluster إلى مساحات. هذا مفيد لفصل:

  • فرق مختلفة.
  • بيئات مختلفة مثل dev و staging و prod.
  • تجارب التدريب عن موارد النظام.
Terminal window
kubectl create namespace dev
kubectl get pods -n dev
kubectl config set-context --current --namespace=dev

Annotations تشبه labels لكنها لا تستخدم عادة للاختيار. تستخدم لتخزين معلومات إضافية للأدوات أو البشر.

كثير من الموارد يكون لها مالك. مثلا Deployment ينشئ ReplicaSet، و ReplicaSet ينشئ Pods. لهذا لو حذفت Deployment، Kubernetes يعرف الموارد التابعة له.

Lab: تنظيم الموارد بالـ Labels

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

الهدف: إنشاء Namespace وتشغيل Pods عليها labels ثم فلترتها.

Terminal window
kubectl create namespace labels-lab
kubectl run web --image=nginx:1.27 -n labels-lab --labels app=web,env=dev
kubectl run api --image=nginx:1.27 -n labels-lab --labels app=api,env=dev
kubectl get pods -n labels-lab --show-labels
kubectl get pods -n labels-lab -l app=web
kubectl delete namespace labels-lab