Підсумковий тест Частини 1: Проєктування та збірка застосунків
Обмеження часу: 25 хвилин (симуляція тиску іспиту)
Прохідний бал: 80% (8/10 запитань)
Цей тест перевіряє ваше володіння:
- Образами контейнерів
- Jobs та CronJobs
- Підами з кількома контейнерами (sidecar, init, ambassador)
- Томами (emptyDir, ConfigMap, Secret, PVC)
Інструкції
Розділ «Інструкції»- Спробуйте кожне запитання, не заглядаючи у відповіді
- Засікайте час — швидкість важлива для CKAD
- Використовуйте лише
kubectlтаkubernetes.io/docs - Перевірте відповіді після завершення всіх запитань
Запитання
Розділ «Запитання»Запитання 1: Проблема із завантаженням образу
Розділ «Запитання 1: Проблема із завантаженням образу»[2 хвилини]
Під застряг у ImagePullBackOff:
k get pods# NAME READY STATUS RESTARTS AGE# broken 0/1 ImagePullBackOff 0 5mВизначте проблему та виправте її. Під повинен запускати nginx версії 1.21.
Відповідь
# Діагностикаk describe pod broken | grep -A5 Events# Шукайте: failed to pull image
# Перевірити поточний образk get pod broken -o jsonpath='{.spec.containers[0].image}'# Ймовірно неправильний тег або друкарська помилка
# Виправлення (видалити та створити заново або пропатчити)k delete pod brokenk run broken --image=nginx:1.21Запитання 2: Створення Job
Розділ «Запитання 2: Створення Job»[2 хвилини]
Створіть Job з назвою backup-job, який:
- Використовує образ
busybox - Виконує команду
echo "Backup completed at $(date)" - Має backoff limit 2
Відповідь
# Згенерувати та модифікувати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/v1kind: Jobmetadata: name: backup-jobspec: backoffLimit: 2 template: spec: containers: - name: backup image: busybox command: ["sh", "-c", "echo Backup completed at $(date)"] restartPolicy: NeverEOFЗапитання 3: Розклад CronJob
Розділ «Запитання 3: Розклад CronJob»[2 хвилини]
Створіть CronJob з назвою cleanup, який:
- Запускається кожні 30 хвилин
- Використовує образ
busybox - Виводить “Cleanup running”
- Має
concurrencyPolicy: Forbid
Відповідь
# Імперативно, потім пропатчити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/v1kind: CronJobmetadata: name: cleanupspec: schedule: "*/30 * * * *" concurrencyPolicy: Forbid jobTemplate: spec: template: spec: containers: - name: cleanup image: busybox command: ["echo", "Cleanup running"] restartPolicy: OnFailureEOFЗапитання 4: Під з кількома контейнерами
Розділ «Запитання 4: Під з кількома контейнерами»[3 хвилини]
Створіть Під з назвою sidecar-pod з:
- Основний контейнер: образ
nginx - Sidecar-контейнер: образ
busybox, що виконуєtail -f /var/log/nginx/access.log - Обидва контейнери ділять том, змонтований у
/var/log/nginx
Відповідь
apiVersion: v1kind: Podmetadata: name: sidecar-podspec: 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: {}k apply -f sidecar-pod.yamlЗапитання 5: Init-контейнер
Розділ «Запитання 5: Init-контейнер»[3 хвилини]
Створіть Під з назвою init-pod, який:
- Має init-контейнер, що створює файл
/work/ready.txtзі вмістом “initialized” - Основний контейнер (nginx) монтує ту саму директорію
Відповідь
apiVersion: v1kind: Podmetadata: name: init-podspec: 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: {}Перевірка:
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
Відповідь
# Створити ConfigMapk create cm web-content --from-literal=index.html="Hello CKAD"
# Створити Підcat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: web-serverspec: containers: - name: nginx image: nginx volumeMounts: - name: html mountPath: /usr/share/nginx/html volumes: - name: html configMap: name: web-contentEOF
# Перевіркаk exec web-server -- curl localhostЗапитання 7: Том Secret
Розділ «Запитання 7: Том Secret»[2 хвилини]
Створіть Secret з назвою db-creds з:
username=adminpassword=secret123
Змонтуйте його тільки для читання у Під з назвою secret-pod у /etc/db
Відповідь
# Створити secretk create secret generic db-creds \ --from-literal=username=admin \ --from-literal=password=secret123
# Створити Підcat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: secret-podspec: containers: - name: app image: busybox command: ["sleep", "3600"] volumeMounts: - name: secrets mountPath: /etc/db readOnly: true volumes: - name: secrets secret: secretName: db-credsEOF
# Перевіркаk exec secret-pod -- cat /etc/db/passwordЗапитання 8: Паралельний Job
Розділ «Запитання 8: Паралельний Job»[3 хвилини]
Створіть Job з назвою parallel-job, який:
- Виконує 6 завершень
- З паралелізмом 2
- Використовує busybox для виведення “Processing”
Відповідь
apiVersion: batch/v1kind: Jobmetadata: name: parallel-jobspec: completions: 6 parallelism: 2 template: spec: containers: - name: worker image: busybox command: ["echo", "Processing"] restartPolicy: NeverПеревірка:
k get pods -l job-name=parallel-job -w# Повинні бачити 2 Піди одночасно, 6 загаломЗапитання 9: Виправлення Підa з кількома контейнерами
Розділ «Запитання 9: Виправлення Підa з кількома контейнерами»[3 хвилини]
Наступний Під не запускається. Визначте та виправте проблему:
apiVersion: v1kind: Podmetadata: name: broken-multispec: 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 для перевірки збереження.
Відповідь
# Створити PVCcat << 'EOF' | k apply -f -apiVersion: v1kind: PersistentVolumeClaimmetadata: name: data-pvcspec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 100MiEOF
# Створити Підcat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: storage-podspec: containers: - name: nginx image: nginx volumeMounts: - name: storage mountPath: /data volumes: - name: storage persistentVolumeClaim: claimName: data-pvcEOF
# Перевіркаk exec storage-pod -- sh -c "echo 'persistent' > /data/test.txt"k exec storage-pod -- cat /data/test.txtОцінювання
Розділ «Оцінювання»| Правильних відповідей | Бал | Статус |
|---|---|---|
| 10/10 | 100% | Відмінно — готові до іспиту |
| 8–9/10 | 80–90% | Добре — потрібне незначне повторення |
| 6–7/10 | 60–70% | Повторіть слабкі теми |
| <6/10 | <60% | Перегляньте модулі Частини 1 |
Очищення
Розділ «Очищення»k delete pod broken sidecar-pod init-pod web-server secret-pod storage-pod broken-multi 2>/dev/nullk delete job backup-job parallel-job 2>/dev/nullk delete cronjob cleanup 2>/dev/nullk delete cm web-content 2>/dev/nullk delete secret db-creds 2>/dev/nullk delete pvc data-pvc 2>/dev/nullНаступна частина
Розділ «Наступна частина»Частина 2: Розгортання застосунків — Деплойменти, Helm, Kustomize та стратегії розгортання.