السلسلة: هذا الدرس جزء من سلسلة شهادة CKAD. للحصول على نظرة شاملة، اقرأ المقال الرئيسي أولاً.
مقدمة
قبل مهاجمة manifests YAML وأنماط CKAD، يلزم عنقود Kubernetes حقيقي للتدريب عليه. ليس docker-compose، ليس تطبيق K8s محاكَى — عنقود حقيقي مع control plane، kubelet، kube-proxy، وCNI شغّال. هذا الدرس يركّب عنقود Kubernetes 1.35 في 25 دقيقة على VPS باستخدام kind (Kubernetes IN Docker)، يضبط kubectl مع aliases لا غنى عنها في الامتحان، ويثبّت الأدوات المكمّلة التي يجب أن تكون في متناولك: kubectx، kubens، stern، k9s. في النهاية، ستحصل على بيئة تدريب مطابقة لمحاكي Linux Foundation الرسمي.
المتطلبات
- VPS Ubuntu 24.04 (4 جيغا RAM حد أدنى)
- وصول SSH root
- أساسيات Linux (apt، systemctl، vim/nano)
- 30 دقيقة
الخطوة 1 — تحضير VPS
نثبّت أولاً أدوات أساسية وDocker، لأن kind يستخدم Docker كـ runtime لاستضافة عقد Kubernetes الافتراضية. اختيار Docker هنا متعمَّد: إنها البيئة الأقرب لما يُختبَر على محاكي Linux Foundation.
apt update && apt upgrade -y
apt install -y curl wget gnupg2 software-properties-common ca-certificates jq
# تثبيت Docker من المستودع الرسمي
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list
apt update && apt install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
docker run --rm hello-world
المخرَج يجب أن يعرض «Hello from Docker!» مؤكِّداً أن daemon يشتغل ويستطيع تنزيل صور من Docker Hub. إن حصلت على «Cannot connect to the Docker daemon»، افحص systemctl status docker وسجلات journalctl -u docker -n 50.
الخطوة 2 — تثبيت kubectl 1.35
kubectl هو سكين الجيش السويسري لامتحان CKAD. ستقضي 95% من وقتك في هذا الأمر. الإصدار يجب أن يطابق إصدار العنقود تماماً لتجنّب لا توافقيات API الثانوية.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
install -m 0755 -o root -g root kubectl /usr/local/bin/kubectl
kubectl version --client
المخرَج يجب أن يدلّ على Client Version: v1.35.x. إن رأيت 1.34 أو أقل، فالثنائي قديم — أعد التنزيل مع فرض الإصدار: curl -LO https://dl.k8s.io/release/v1.35.0/bin/linux/amd64/kubectl.
الخطوة 3 — تثبيت kind وإنشاء العنقود
kind ينشئ عناقيد Kubernetes باستخدام حاويات Docker كعقد. لـ CKAD، نركّب عنقوداً بـ 1 control plane و2 workers — الطوبولوجيا الأدنى التي تشبه ما نلقاه في الشركات.
curl -Lo /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-amd64
chmod +x /usr/local/bin/kind
kind version
cat > /tmp/kind-ckad.yaml <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: ckad-prep
nodes:
- role: control-plane
- role: worker
- role: worker
networking:
apiServerAddress: "127.0.0.1"
apiServerPort: 6443
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
EOF
kind create cluster --config /tmp/kind-ckad.yaml --image kindest/node:v1.35.0
kubectl cluster-info --context kind-ckad-prep
kubectl get nodes -o wide
الإنشاء يستغرق 90-120 ثانية. مخرَج kubectl get nodes يجب أن يدرج 3 عقد في حالة Ready. إن بقيت عقدة في NotReady، فعموماً CNI الافتراضي (kindnet) لم ينهِ تهيئته — انتظر 30 ثانية وأعد. إن استمر المشكل، أعد إنشاء العنقود بـ kind delete cluster --name ckad-prep ثم أطلق الإنشاء.
الخطوة 4 — ضبط aliases kubectl لا غنى عنها
في الامتحان، كل ثانية مهمة. الـ aliases والإكمال التلقائي bash يخفّضان زمن الكتابة بـ 30-40%. هذه الإعدادات بالضبط متاحة على محاكي Linux Foundation الرسمي.
cat >> ~/.bashrc <<'EOF'
alias k=kubectl
complete -F __start_kubectl k
source <(kubectl completion bash)
export do="--dry-run=client -o yaml"
export now="--force --grace-period 0"
EOF
source ~/.bashrc
# اختبار aliases
k get nodes
k run nginx --image=nginx $do | head -10
المتغيّر do أنفع حيلة في مسار CKAD: k run nginx --image=nginx $do > pod.yaml يولّد manifest YAML جاهزاً للتعديل بأمر واحد. المتغيّر now يسمح بحذف فوري بلا grace period حين تعلق Pod: k delete pod nginx $now. كلا المتغيّرين مسموح بهما على محاكي الامتحان.
الخطوة 5 — تثبيت kubectx وkubens وstern
الامتحان يستخدم عناقيد وnamespaces متعددة. قراءة كل سؤال «switch to cluster X namespace Y» قبل الجواب جوهري — وkubectx/kubens يسرّعان هذا التبديل من عدة أوامر إلى كلمة واحدة.
git clone https://github.com/ahmetb/kubectx /opt/kubectx
ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
ln -s /opt/kubectx/kubens /usr/local/bin/kubens
# stern — سجلات multi-pods متوازية (مفيدة لتشخيص الرصد)
curl -Lo /tmp/stern.tar.gz https://github.com/stern/stern/releases/download/v1.31.0/stern_1.31.0_linux_amd64.tar.gz
tar -xzf /tmp/stern.tar.gz -C /usr/local/bin stern
kubectx
kubens
stern --version
kubectx يدرج السياقات المتاحة ويسمح بالتبديل بـ kubectx kind-ckad-prep. kubens يفعل المثل لـ namespaces. stern يجمّع سجلات عدة Pods آنياً — مفيد خاصة في المجال 5 (الرصد) حيث يجب تشخيص سلسلة microservices متكررة.
الخطوة 6 — اختبار البيئة بـ Pod بسيطة
نُصادق على كل شيء بـ Pod nginx صغيرة. ردّ الفعل الذي يجب أن يكون لديك للتحقق من تشغيلية بيئة قبل البدء بعمل جدّي.
k run test-pod --image=nginx
k get pods -w &
sleep 15
k get pod test-pod
k describe pod test-pod | head -20
k port-forward pod/test-pod 8080:80 &
sleep 3
curl -s http://localhost:8080 | head -5
k delete pod test-pod $now
يجب أن ترى Pod تمرّ بحالات Pending ← ContainerCreating ← Running، ثم ترد على طلب HTTP بصفحة nginx الافتراضية. إن بقيت Pending، kubectl describe pod test-pod يعرض Events التي تشرح السبب (غالباً مشكلة موارد أو سحب صورة).
الخطوة 7 — تثبيت k9s للتنقّل التفاعلي
k9s ليس إلزامياً في الامتحان لكنه أداة ممتازة للتدريب — يصوّر موارد Kubernetes تفاعلياً في الطرفية. مفيد خاصة لفهم العلاقات بين Deployments وReplicaSets وPods آنياً.
curl -sS https://webinstall.dev/k9s | bash
source ~/.config/envman/PATH.env
k9s --version
# لإطلاق الواجهة: k9s
k9s يعرض لوحة قيادة نصية افتراضياً على Pods. تنقّل بالأسهم، :deployments للتبديل إلى Deployments، ? للمساعدة. للخروج، :q. مكافئ Kubernetes Dashboard لكن في الطرفية — أسرع بكثير للتشخيص اليومي.
الخطوة 8 — حفظ حالة العنقود لاسترجاع سريع
kind يسمح بتصدير واستعادة عنقود، لكن عملياً لـ CKAD نحذف ونعيد الإنشاء — أسرع من أي معالجة تصدير. ومع ذلك، من المفيد إصدار ملف إعداد kind وmanifests مثالك في مستودع Git لاسترجاع سريع بعد إعادة تثبيت.
mkdir -p ~/ckad-prep/manifests
cd ~/ckad-prep
cp /tmp/kind-ckad.yaml ./
git init && git add . && git commit -m "CKAD prep environment"
# للبداية من الصفر:
# kind delete cluster --name ckad-prep
# kind create cluster --config kind-ckad.yaml
انضباط versioning مفيد ما وراء الامتحان: manifests CKAD التي ستكتبها خلال التدريب تصير قاعدة مكتبتك الشخصية لأنماط Kubernetes.
فهم kind مقابل minikube مقابل k3s — اختيار الأداة الصحيحة للتدريب
ثلاثة بدائل شائعة لتركيب Kubernetes تدريبي. kind (هذا الدرس) يستخدم Docker كـ runtime ويسمح بإطلاق عدة عناقيد متوازية على نفس الآلة. خفيف، سريع، مطابق لمحاكي CKAD الرسمي. القيد: لا LoadBalancer سحابي أصلي، لا Persistent Volumes ديناميكية بلا إعداد إضافي.
minikube هو الأداة التاريخية لـ CNCF. يدعم عدة drivers (Docker، VirtualBox، KVM، Podman) ويقترح addons أصلية لـ ingress nginx، dashboard، metrics-server، registry. اختيار ممتاز إن أردت اختبار ميزات متقدمة غير مغطّاة بـ CKAD لكنها مفيدة يومياً.
k3s هو توزيعة Kubernetes المصغّرة من Rancher. تستبدل etcd بـ sqlite افتراضياً وتشتغل في ثنائي واحد أقل من 60 ميغا. مثالية لإنتاج خفيف على VPS أو edge computing. أقل تمثيلاً لبيئة CKAD لكن ممتازة لمشاريع شخصية بعد الشهادة.
للتحضير CKAD صرفاً، ابقَ على kind. للتدريب بعد الشهادة، اختبر الثلاثة لفهم trade-offs.
أخطاء شائعة
| الخطأ | السبب | الحل |
|---|---|---|
| kind create cluster timeout | RAM غير كافية | انتقل إلى 4 جيغا RAM، أو قلّص إلى 1 control + 1 worker |
| kubectl لا يجد السياق | kubeconfig غير محمَّل | export KUBECONFIG=~/.kube/config أو أعد جلسة SSH |
| Pods في Pending أبدي | لا CNI جاهز أو موارد مشبَعة | kubectl describe pod لرؤية Events؛ kubectl get events --sort-by=.lastTimestamp |
alias k لا يشتغل بعد reboot |
~/.bashrc لم يُحمَّل | أضف source ~/.bashrc في ~/.profile |
| خطأ إصدار kubectl | ثنائي قديم | افرض الإصدار: نزّل v1.35.0 صراحة |
دروس مرافقة
- Pods وحاويات متعددة وworkloads — أنماط CKAD أساسية
- ConfigMaps وSecrets وServiceAccounts — تأمين تطبيق Kubernetes
- العودة إلى المقال الرئيسي CKAD
أسئلة شائعة
لماذا kind بدل minikube؟
kind الأقرب لمحاكي CKAD الرسمي ويبدأ أسرع (90 ث مقابل 3 د). للتحضير الصرف، إنها الأداة المرجع في 2026.
هل أحتاج فعلاً 3 عقد للتدريب؟
لا، 1 control + 1 worker كافٍ لمعظم تمارين CKAD. الـ 3 عقد تسمح بتدريب pod scheduling، taints/tolerations، وNetworkPolicies multi-node. إن كان VPS أقل من 4 جيغا RAM، ابدأ بـ 2 عقد.