CKAD sınavı için çözümlediğim ve gözlemlediğim soru örneklerini aşağıdaki iletiyorum. Günlük kullanımda kubernetes üzerinde helm vb. araçlar kullanıyorsanız benim gibi aşağıdaki konularda eksik olduğunuz bölümler olabilir, sizlerde soruları biraz değiştirip kendiniz çözümleyebilirsiniz.
Örnek vermek gerekirse ( servis yaratma bir podun ulaşılabilir hale getirilmesi, pvc yaratma bir pod içinde mount edilmesi, secret yaratma pod içinde env tanımlanması, security context, liveness probe, storage class vb.)
Faydalanabileceğiniz makaleler;
https://mattburman.com/how-i-passed-the-ckad-exam/
https://github.com/dgkanatsios/CKAD-exercises/tree/main
Create a single pod; image httpd:alpine , define container name cont1
k -n mert run pod1 --image=httpd:alpine --dry-run=client -o yaml
output:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod1 name: pod1 namespace: mert spec: containers: - image: httpd:alpine name: cont1 resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {}
Create a job; image busybox, execute
“sleep 2 && echo done”, label id:job ,
run total of 5 times -3 runs parallel
Bu soruda birden çok ister mevcut, öncelikle hızlıca job oluşturup, imajı belirleyelim ve komutu çalıştırtacak şekilde komutu düzenleyelim.
kubectl create job neb-new-job --image=busybox --dry-run=client -o yaml -- sh -c "sleep 2 && echo done"
output; (label ekleyelim ve completion – parallelism tanımını ekleyelim)
https://kubernetes.io/docs/concepts/workloads/controllers/job/#backoff-limit-per-index
apiVersion: batch/v1 kind: Job metadata: creationTimestamp: null name: neb-new-job labels: id: awesome-job spec: completions: 5 parallelism: 3 template: metadata: creationTimestamp: null spec: containers: - image: busybox: name: neb-new-job-cnt command: ["/bin/sh"] args: ["-c","sleep 2 && echo done"] resources: {} restartPolicy: Never status: {}
Create a pod; image busybox,
execute “touch /tmp/ ready && sleep 1d”, readiness initially wait5, periodically 10sec,
readiness execute “cat /tmp/ready”
Bu soruda birden çok ister mevcut, öncelikle hızlıca pod oluşturup, imajı belirleyelim ve komutu çalıştırtacak şekilde komutu düzenleyelim.
kubectl -n mert run pod --image=busybox:1.31.0 --dry-run=client -o yaml -- 'touch /tmp/ready && sleep 1d'
output; (ek olarak readinessProbe ayarlarını tamamlayalım)
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod name: pod namespace: mert spec: containers: - args: - /bin/sh - -c - touch /tmp/ready && sleep 1d image: busybox:1.31.0 name: pod resources: {} readinessProbe: exec: command: - cat - /tmp/ready initialDelaySeconds: 5 periodSeconds: 10 dnsPolicy: ClusterFirst restartPolicy: Always
Create a deploy; image nginx, replicas 3,
set allowPrivilegeEscalation: false – privileged: false
Bu soruda birden çok ister mevcut, öncelikle hızlıca deploy oluşturup, imajı belirleyelim ve replica belirtelim,
kubectl -n mert create deployment new-deploy --image=nginx --replicas=3 --dry-run=client -o yaml
output; (ek olarak content security ayarlarını tamamlayalım)
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: new-deploy name: new-deploy namespace: mert spec: replicas: 3 selector: matchLabels: app: new-deploy strategy: {} template: metadata: creationTimestamp: null labels: app: new-deploy spec: containers: - image: nginx name: nginx resources: {} securityContext: allowPrivilegeEscalation: false privileged: false status: {}
Create a service; clusterip, named ckad-svc, expose pod, redirect port 3333:80,
Create a pod, pod name ckadpod-api,
image nginx, define label,
Create a example curl pod, test it this question.
Bu soruda birden çok ister mevcut, öncelikle hızlıca bir pod oluşturup, imajı belirleyelim ve ,
kubectl -n mert run ckad-api --image=nginx:alpine --labels="project=ckad-api" --dry-run=client -o yaml
output; (ek olarak content security ayarlarını tamamlayalım)
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: project: ckad-api name: ckad-api namespace: mert spec: containers: - image: nginx:1.17.3-alpine name: ckad-api-container resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {}
Şimdi servis için komutu gerçekleştirelim ve tek bir yaml dosyasında toplayalım;
kubectl -n mert create service clusterip ckad-svc --tcp=3333:80 --dry-run=client -o yaml
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: project: ckad-api name: ckad-api namespace: mert spec: containers: - image: nginx:alpine name: ckad-api resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {} --- apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: ckad-svc name: ckad-svc namespace: mert spec: ports: - name: 3333-80 port: 3333 protocol: TCP targetPort: 80 selector: project: ckad-api type: ClusterIP
Kontrol için “kubectl get ep” deneyebilirsiniz, hata olmadığı takdirde ip aldığını görmeniz gerekmekte,
k -n mert run example-curl --image=nginx:alpine --dry-run=client -o yaml exec pod: curl ckad-svc:3333
Create a pv ; named ckad-pv, capacity 2Gi, Read WriteOnce, hostPath /Volumes/Data,
Create a pvc ; named ckad-pvc, request 2Gi, no storage class,
Create Deploy, named ckad-pv-deploy, image httpd, mount /tmp/ckad-pv.
Bu soruda birden çok ister mevcut, öncelikle hızlıca deploy oluşturup, imajı belirleyelim,
kubectl -n mert create deployment ckad-pv-deploy --image=httpd:alpine --dry-run=client -o yaml
output; (pv-pvc tanımını yapalım, mount belirleyelim)
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: ckad-pv-deploy name: ckad-pv-deploy namespace: mert spec: replicas: 1 selector: matchLabels: app: ckad-pv-deploy strategy: {} template: metadata: creationTimestamp: null labels: app: ckad-pv-deploy spec: volumes: - name: ckad-pv persistentVolumeClaim: claimName: ckad-pvc containers: - image: httpd:2.4.41-alpine name: httpd volumeMounts: - mountPath: "/tmp/ckad-pv" name: ckad-pv --- apiVersion: v1 kind: PersistentVolume metadata: name: ckad-pv spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce hostPath: path: "/Volumes/Data" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ckad-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi
Create a secret; contain user=user pass=pw, Create a pod; env variable SECRET_USER and SECRET_PASS and mount secret /tmp/test2.
kubectl -n mert create secret generic secret-handler --from-literal=user=user --from-literal=pass=pwd
output: (Env ve mount tanımlarını yapalım)
https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kubectl/#create-a-secret
https://kubernetes.io/docs/concepts/configuration/secret/#use-case-dotfiles-in-a-secret-volume
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: 14pod name: 14pod namespace: mert spec: volumes: - name: test secret: secretName: secret-handler containers: - image: nginx name: 14pod volumeMounts: - name: test mountPath: "/tmp/test2" resources: {} env: - name: SECRET_USER valueFrom: secretKeyRef: name: secret-handler key: user - name: SECRET_PASS valueFrom: secretKeyRef: name: secret-handler key: pass dnsPolicy: ClusterFirst restartPolicy: Always