Ckad Çalışma Notları

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)

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-liveness-command

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)

https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container

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)

https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume

https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolumeclaim

https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-pod

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.