تجربه امتحان سرپرست معتبر Kubernetes (CKA).

اخیراً در آزمون Certified Kubernetes Administrator (CKA) گذراندهام و خوشحالم که تجربیاتم را برای کمک به دیگران در آمادهسازی به اشتراک بگذارم. امتحان عملی و وظیفه محور است و در صورت نیاز به تأیید سریع هر چیزی، به اسناد رسمی Kubernetes دسترسی خواهید داشت.
در این وبلاگ، آنچه را که باید بدانید و نکات مفیدی را به اشتراک میگذارم که باعث میشود قبولی در آزمون CKA راحتتر احساس شود.
امتحان: انتظار چه چیزی
آزمون CKA 10 حوزه اصلی دانش Kubernetes را پوشش می دهد. از شما خواسته می شود که وظایف اداری دنیای واقعی را در یک محیط Kubernetes انجام دهید.
در اینجا یک تفکیک سریع از دامنههای کلیدی که با آنها مواجه خواهید شد و چند نمونه سؤال برای کمک به آمادهسازی شما آورده شده است.
1- مدیریت چرخه حیات برنامه
این دامنه بر توانایی شما در مدیریت برنامه های مستقر در Kubernetes تمرکز دارد. شما باید بدانید که چگونه برنامه ها را مقیاس، به روز رسانی و عیب یابی کنید.
نمونه سوال:
- با استفاده از تصویر nginx یک استقرار به نام myapp با 3 کپی ایجاد کنید. استقرار را به 5 کپی مقیاس کنید.
راه حل:
kubectl create deployment myapp --image=nginx --replicas=3 kubectl scale deployment myapp --replicas=5
- همچنین باید با بهروزرسانیها و بازگشتهای برگشتی آشنا باشید:
kubectl rollout status deployment myapp
kubectl rollout undo deployment myapp
2- ذخیره سازی:
این دامنه دانش شما را از فضای ذخیرهسازی Kubernetes، مانند حجمهای دائمی (PV) و ادعاهای حجم پایدار (PVC)، کلاسهای ذخیرهسازی، حالتهای دسترسی و سیاستهای بازپسگیری آزمایش میکند.
نمونه سوال:
یک PersistentVolumeClaim به نام xyz، با کلاس ذخیره سازی X، ظرفیت 20Gi و یک مسیر میزبان ایجاد کنید. /data
با حالت دسترسی ReadWriteOnce.
سپس با استفاده از تصویر nginx یک غلاف به نام mypod ایجاد کنید که PVC را در آن نصب می کند /data
راه حل:
- PersistentVolumeClaim YAML:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: xyz
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: x
hostPath:
path: /data
apiVersiong: v1
kind: Pod
metadata:
name: mypod
spec:
Volumes:
- name: myvol
persistentVolumeClaim:
claimName: xyz
containers:
- name: mypod-container
image: nginx
VolumeMounts:
- mountPath: /data
name: myvol
3- Cluster Maintenance
از شما خواسته می شود که گره ها را ارتقا دهید یا نسخه های خوشه ای را مدیریت کنید. این دامنه دانش شما را در مورد نگهداری گره و مدیریت نسخه Kubernetes آزمایش می کند.
نمونه سوال:
یک گره را به آخرین نسخه ارتقا دهید، مطابق با گره صفحه کنترل
راه حل:
- ابتدا نسخه های گره ها را با هم مقایسه کنید:
kubectl get nodes
- گره مورد نظر را تخلیه کنید:
kubectl drain node1 --diable-evication --ignore-daemonsets --delete-emptydir-data=false
- کامپوننت های Kubernetes را ارتقا دهید:
sudo apt upgrade -y kubelet=1.30.1-1.1 kubectl=1.30.1-1.1 kubeadm=1.30.1-1 --allow-change-held-packages
4- پیکربندی نصب
این دامنه شامل کارهایی مانند راه اندازی یک خوشه Kubernetes یا افزودن گره های جدید به خوشه موجود است.
نمونه سوال:
یک گره جدید (new-node) به خوشه اضافه کنید.
راه حل:
- در گره صفحه کنترل، دستور join را ایجاد کنید:
kubeadm token create --print-join-command
- SSH را وارد گره جدید کنید و دستور join را اجرا کنید:
kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
5- ثبت و نظارت
درک نحوه بازیابی و تجزیه و تحلیل سیاههها و نظارت بر عملکرد غلاف ضروری است. شما باید نحوه استفاده از سیاهههای مربوط به Kubectl، kubectl top را بدانید
سوالات
-
سیاهههای مربوط به یک غلاف را دریافت کنید و آنها را در آن ذخیره کنید
/tmp/pod.log
. -
غلاف با بیشترین استفاده از CPU را پیدا کنید:
راه حل:
1.
kubectl logs pod-name > /tmp/pod.log
2.
kubectl top pods -A --sort-by=cpu --no-headers | head -n 1
6- شبکه سازی
شبکه یکی از حوزه های حیاتی در Kubernetes است. شما باید نحوه عملکرد سرویس های Kubernetes (ClusterIP، NodePort، LoadBalancer) و همچنین نحوه پیکربندی و استفاده از کنترلرهای Ingress را بدانید.
نمونه سوال:
یک منبع Ingress را پیکربندی کنید که ترافیک را به سمت سرویس nginx در مسیر /nginx هدایت کند.
راه حل:
- ورودی YAML:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /nginx
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
7- برنامه ریزی
شما باید درک درستی از نحوه برنامهریزی غلافها در گرههای خاص، استفاده از پیوند گرهها، آلودگیها و تحملها نشان دهید.
همچنین باید غلاف ثابت و نحوه ایجاد آن را بدانید.
نمونه سوال:
یک غلاف را روی یک گره با برچسب env=prod برنامه ریزی کنید.
راه حل:
- Pod YAML با nodeSelector:
apiVersion: v1
kind: Pod
metadata:
name: prod-pod
spec:
nodeSelector:
env: prod
containers:
- name: nginx-container
image: nginx
8- امنیت
امنیت RBAC، سیاستهای شبکه، اسرار و حسابهای خدماتی را پوشش میدهد.
نمونه سوال:
یک خط مشی شبکه ایجاد کنید که به ترافیک ورودی فقط از پادها در فضای نام frontend به یک پاد با برچسب app=backend در فضای نام پیشفرض در پورت 80 اجازه میدهد.
راه حل:
- خط مشی شبکه YAML:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
namespace: default
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: frontend
ports:
- protocol: TCP
port: 80
9- عیب یابی
شما باید مشکلات مختلفی مانند خرابی برنامه، خرابی اجزای کلاستر و مشکلات شبکه را عیب یابی کنید.
مثال:
یکی از گره های خوشه در وضعیت آماده نیست. موضوع را بررسی و حل کنید.
پاسخ:
- بررسی کنید کدام گره آماده نیست:
kubectl get nodes
- SSH وارد گره شده و وضعیت Kubelet و لاگ ها را بررسی کنید:
systemctl status kubelet # to see the status of the kubelet
journalctl -u kubelet # to see the logs from kubelet and undertand how to fis the problem
- مشکل را برطرف کنید و دوباره Kubelet را شروع کنید:
systemctl start kubelet
10- اعتبار سنجی
اعتبارسنجی شامل اطمینان از سلامت و وضعیت منابع Kubernetes شما، اطمینان از اینکه آنها مطابق انتظار اجرا می شوند، می باشد.
نمونه سوال:
مطمئن شوید که pod mypod در حالت Running قرار دارد. اگر نه، بررسی کنید و مشکل را حل کنید.
راه حل:
- وضعیت غلاف را بررسی کنید:
kubectl get pod mypod
- اگر غلاف در حالت Running نیست، غلاف را برای بررسی بیشتر توصیف کنید:
kubectl describe pod mypod
- گزارشها یا پیکربندیهای منابع را بررسی کنید تا مشکل را حل کنید.
در نهایت نکات
در اینجا چند دستور مهم وجود دارد که اغلب در طول امتحان CKA از آنها استفاده می کنید:
- استقرار ایجاد کنید
kubectl create deployment myapp --image=nginx
- استقرار را با استفاده از یک سرویس در معرض دید قرار دهید
kubectl expose deployment myapp --port=80 --target-port=8080 --type=ClusterIP
- یک حساب کاربری ایجاد کنید
kubectl create serviceaccount my-sa
- یک نقش یا ClusterRole ایجاد کنید:
kubectl create role|clusterrole myrole --verb=get,list,watch --resource=pods
- یک RoleBinding یا ClusterRoleBinding ایجاد کنید:
kubectl create rolebinding|clusterrolebinding mybinding --role=myrole --serviceaccount=default:my-sa --namespace=default
- یک منبع ورودی ایجاد کنید:
kubectl create ingress mying --rule="myapp.example.com/nginx*=nginx-service:80"
- به یاد داشته باشید که پیکربندی Pod YAML را به خاطر بسپارید – این کار باعث صرفه جویی در وقت شما در انجام کارهای مربوط به Pod می شود.
نکات امتحان نهایی
- Copy and Paste: برای صرفه جویی در وقت می توانید متن را از محیط امتحان کپی و جایگذاری کنید. از میانبرهای زیر استفاده کنید:
- Copy: Ctrl+Shift+C
- Paste: Ctrl+Shift+V
- شما می توانید از مستندات k8s استفاده کنید اما زمانی برای بررسی آن نخواهید داشت، بنابراین مطمئن شوید که استفاده از آن را تمرین کرده اید.
همچنین میتوانید دستور برگه تقلب kubctl را در طول امتحان باز نگه دارید تا اگر بخواهید چیزی را تأیید کنید.
برای اطلاعات بیشتر یا هر گونه سوال، با من در ارتباط باشید: