Перейти до вмісту

Підсумковий тест Частини 1: Проєктування та збірка застосунків

Lab Progress 0/4 completed

Обмеження часу: 25 хвилин (симуляція тиску іспиту)

Прохідний бал: 80% (8/10 запитань)

Цей тест перевіряє ваше володіння:

  • Образами контейнерів
  • Jobs та CronJobs
  • Підами з кількома контейнерами (sidecar, init, ambassador)
  • Томами (emptyDir, ConfigMap, Secret, PVC)

  1. Спробуйте кожне запитання, не заглядаючи у відповіді
  2. Засікайте час — швидкість важлива для CKAD
  3. Використовуйте лише kubectl та kubernetes.io/docs
  4. Перевірте відповіді після завершення всіх запитань

Запитання 1: Проблема із завантаженням образу

Розділ «Запитання 1: Проблема із завантаженням образу»

[2 хвилини]

Під застряг у ImagePullBackOff:

Terminal window
k get pods
# NAME READY STATUS RESTARTS AGE
# broken 0/1 ImagePullBackOff 0 5m

Визначте проблему та виправте її. Під повинен запускати nginx версії 1.21.

Відповідь
Terminal window
# Діагностика
k describe pod broken | grep -A5 Events
# Шукайте: failed to pull image
# Перевірити поточний образ
k get pod broken -o jsonpath='{.spec.containers[0].image}'
# Ймовірно неправильний тег або друкарська помилка
# Виправлення (видалити та створити заново або пропатчити)
k delete pod broken
k run broken --image=nginx:1.21

Запитання 2: Створення Job

Розділ «Запитання 2: Створення Job»

[2 хвилини]

Створіть Job з назвою backup-job, який:

  • Використовує образ busybox
  • Виконує команду echo "Backup completed at $(date)"
  • Має backoff limit 2
Відповідь
Terminal window
# Згенерувати та модифікувати
k create job backup-job --image=busybox --dry-run=client -o yaml -- sh -c 'echo "Backup completed at $(date)"' > job.yaml
# Додати backoffLimit: 2 до spec, потім застосувати
# Або напряму:
cat << 'EOF' | k apply -f -
apiVersion: batch/v1
kind: Job
metadata:
name: backup-job
spec:
backoffLimit: 2
template:
spec:
containers:
- name: backup
image: busybox
command: ["sh", "-c", "echo Backup completed at $(date)"]
restartPolicy: Never
EOF

Запитання 3: Розклад CronJob

Розділ «Запитання 3: Розклад CronJob»

[2 хвилини]

Створіть CronJob з назвою cleanup, який:

  • Запускається кожні 30 хвилин
  • Використовує образ busybox
  • Виводить “Cleanup running”
  • Має concurrencyPolicy: Forbid
Відповідь
Terminal window
# Імперативно, потім пропатчити
k create cronjob cleanup --image=busybox --schedule="*/30 * * * *" -- echo "Cleanup running"
k patch cronjob cleanup -p '{"spec":{"concurrencyPolicy":"Forbid"}}'
# Або YAML:
cat << 'EOF' | k apply -f -
apiVersion: batch/v1
kind: CronJob
metadata:
name: cleanup
spec:
schedule: "*/30 * * * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
containers:
- name: cleanup
image: busybox
command: ["echo", "Cleanup running"]
restartPolicy: OnFailure
EOF

Запитання 4: Під з кількома контейнерами

Розділ «Запитання 4: Під з кількома контейнерами»

[3 хвилини]

Створіть Під з назвою sidecar-pod з:

  • Основний контейнер: образ nginx
  • Sidecar-контейнер: образ busybox, що виконує tail -f /var/log/nginx/access.log
  • Обидва контейнери ділять том, змонтований у /var/log/nginx
Відповідь
apiVersion: v1
kind: Pod
metadata:
name: sidecar-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: logs
mountPath: /var/log/nginx
- name: sidecar
image: busybox
command: ["tail", "-f", "/var/log/nginx/access.log"]
volumeMounts:
- name: logs
mountPath: /var/log/nginx
volumes:
- name: logs
emptyDir: {}
Terminal window
k apply -f sidecar-pod.yaml

Запитання 5: Init-контейнер

Розділ «Запитання 5: Init-контейнер»

[3 хвилини]

Створіть Під з назвою init-pod, який:

  • Має init-контейнер, що створює файл /work/ready.txt зі вмістом “initialized”
  • Основний контейнер (nginx) монтує ту саму директорію
Відповідь
apiVersion: v1
kind: Pod
metadata:
name: init-pod
spec:
initContainers:
- name: init
image: busybox
command: ["sh", "-c", "echo initialized > /work/ready.txt"]
volumeMounts:
- name: workdir
mountPath: /work
containers:
- name: nginx
image: nginx
volumeMounts:
- name: workdir
mountPath: /work
volumes:
- name: workdir
emptyDir: {}

Перевірка:

Terminal window
k exec init-pod -- cat /work/ready.txt

Запитання 6: ConfigMap як том

Розділ «Запитання 6: ConfigMap як том»

[2 хвилини]

Створіть ConfigMap з назвою web-content з ключем index.html, що містить “Hello CKAD”.

Потім створіть Під з назвою web-server, який:

  • Використовує образ nginx
  • Монтує ConfigMap у /usr/share/nginx/html
Відповідь
Terminal window
# Створити ConfigMap
k create cm web-content --from-literal=index.html="Hello CKAD"
# Створити Під
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
configMap:
name: web-content
EOF
# Перевірка
k exec web-server -- curl localhost

Запитання 7: Том Secret

Розділ «Запитання 7: Том Secret»

[2 хвилини]

Створіть Secret з назвою db-creds з:

  • username=admin
  • password=secret123

Змонтуйте його тільки для читання у Під з назвою secret-pod у /etc/db

Відповідь
Terminal window
# Створити secret
k create secret generic db-creds \
--from-literal=username=admin \
--from-literal=password=secret123
# Створити Під
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: secret-pod
spec:
containers:
- name: app
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- name: secrets
mountPath: /etc/db
readOnly: true
volumes:
- name: secrets
secret:
secretName: db-creds
EOF
# Перевірка
k exec secret-pod -- cat /etc/db/password

Запитання 8: Паралельний Job

Розділ «Запитання 8: Паралельний Job»

[3 хвилини]

Створіть Job з назвою parallel-job, який:

  • Виконує 6 завершень
  • З паралелізмом 2
  • Використовує busybox для виведення “Processing”
Відповідь
apiVersion: batch/v1
kind: Job
metadata:
name: parallel-job
spec:
completions: 6
parallelism: 2
template:
spec:
containers:
- name: worker
image: busybox
command: ["echo", "Processing"]
restartPolicy: Never

Перевірка:

Terminal window
k get pods -l job-name=parallel-job -w
# Повинні бачити 2 Піди одночасно, 6 загалом

Запитання 9: Виправлення Підa з кількома контейнерами

Розділ «Запитання 9: Виправлення Підa з кількома контейнерами»

[3 хвилини]

Наступний Під не запускається. Визначте та виправте проблему:

apiVersion: v1
kind: Pod
metadata:
name: broken-multi
spec:
initContainers:
- name: init
image: busybox
command: ["sleep", "infinity"] # Проблема!
containers:
- name: main
image: nginx
Відповідь

Проблема: Init-контейнер виконує sleep infinity і ніколи не завершується. Init-контейнери повинні завершитися (вийти з кодом 0), щоб основні контейнери запустилися.

Виправлення: Змініть команду init-контейнера на таку, що завершується:

initContainers:
- name: init
image: busybox
command: ["echo", "Init done"]

Запитання 10: PVC та Під

Розділ «Запитання 10: PVC та Під»

[3 хвилини]

Створіть PVC з назвою data-pvc, що запитує 100Mi сховища.

Потім створіть Під з назвою storage-pod, який:

  • Використовує образ nginx
  • Монтує PVC у /data

Запишіть файл у /data/test.txt для перевірки збереження.

Відповідь
Terminal window
# Створити PVC
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 100Mi
EOF
# Створити Під
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: storage-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: storage
mountPath: /data
volumes:
- name: storage
persistentVolumeClaim:
claimName: data-pvc
EOF
# Перевірка
k exec storage-pod -- sh -c "echo 'persistent' > /data/test.txt"
k exec storage-pod -- cat /data/test.txt

Правильних відповідейБалСтатус
10/10100%Відмінно — готові до іспиту
8–9/1080–90%Добре — потрібне незначне повторення
6–7/1060–70%Повторіть слабкі теми
<6/10<60%Перегляньте модулі Частини 1

Terminal window
k delete pod broken sidecar-pod init-pod web-server secret-pod storage-pod broken-multi 2>/dev/null
k delete job backup-job parallel-job 2>/dev/null
k delete cronjob cleanup 2>/dev/null
k delete cm web-content 2>/dev/null
k delete secret db-creds 2>/dev/null
k delete pvc data-pvc 2>/dev/null

Частина 2: Розгортання застосунків — Деплойменти, Helm, Kustomize та стратегії розгортання.