Підсумковий тест частини 4: Середовище застосунків, конфігурація та безпека
Обмеження часу: 25 хвилин (симуляція тиску іспиту)
Прохідний бал: 80% (8/10 запитань)
Цей тест перевіряє ваші знання з:
- ConfigMaps та Secrets
- Вимог та лімітів ресурсів
- SecurityContexts
- Сервісних акаунтів
- Custom Resource Definitions
Інструкції
Розділ «Інструкції»- Спробуйте відповісти на кожне запитання без підглядання відповідей
- Засікайте час — швидкість важлива для CKAD
- Використовуйте лише
kubectlтаkubernetes.io/docs - Перевірте відповіді після завершення всіх запитань
Запитання
Розділ «Запитання»Запитання 1: ConfigMap з літералів
Розділ «Запитання 1: ConfigMap з літералів»[2 хвилини]
Створіть ConfigMap з назвою app-settings з такими значеннями:
LOG_LEVEL=debugMAX_CONNECTIONS=100ENVIRONMENT=staging
Відповідь
k create configmap app-settings \ --from-literal=LOG_LEVEL=debug \ --from-literal=MAX_CONNECTIONS=100 \ --from-literal=ENVIRONMENT=stagingЗапитання 2: Secret як змінна оточення
Розділ «Запитання 2: Secret як змінна оточення»[3 хвилини]
Створіть Secret з назвою db-creds зі значеннями username=admin та password=secret123. Потім створіть під з назвою db-client з nginx, який має ці значення як змінні оточення DB_USER та DB_PASS.
Відповідь
k create secret generic db-creds \ --from-literal=username=admin \ --from-literal=password=secret123
cat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: db-clientspec: containers: - name: nginx image: nginx env: - name: DB_USER valueFrom: secretKeyRef: name: db-creds key: username - name: DB_PASS valueFrom: secretKeyRef: name: db-creds key: passwordEOFЗапитання 3: Ліміти ресурсів
Розділ «Запитання 3: Ліміти ресурсів»[2 хвилини]
Створіть під з назвою limited-pod з nginx, який має:
- Запит пам’яті: 128Mi
- Ліміт пам’яті: 256Mi
- Запит CPU: 100m
- Ліміт CPU: 200m
Відповідь
cat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: limited-podspec: containers: - name: nginx image: nginx resources: requests: memory: "128Mi" cpu: "100m" limits: memory: "256Mi" cpu: "200m"EOFЗапитання 4: SecurityContext — Запуск від не-root
Розділ «Запитання 4: SecurityContext — Запуск від не-root»[3 хвилини]
Створіть під з назвою secure-pod з busybox, який:
- Працює від користувача з ID 1000
- Працює від групи з ID 3000
- Має
fsGroupвстановлений у 2000 - Виконує команду
id && sleep 3600
Відповідь
cat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: secure-podspec: securityContext: runAsUser: 1000 runAsGroup: 3000 fsGroup: 2000 containers: - name: busybox image: busybox command: ['sh', '-c', 'id && sleep 3600']EOFПеревірка: k logs secure-pod має показати uid=1000 gid=3000 groups=2000,3000
Запитання 5: ConfigMap як том
Розділ «Запитання 5: ConfigMap як том»[3 хвилини]
Створіть ConfigMap з назвою nginx-config з таким вмістом:
server { listen 8080; location / { return 200 'ConfigMap works!\n'; }}Потім створіть під з назвою nginx-custom, який монтує цей ConfigMap до /etc/nginx/conf.d/default.conf.
Відповідь
cat << 'EOF' > /tmp/default.confserver { listen 8080; location / { return 200 'ConfigMap works!\n'; }}EOF
k create configmap nginx-config --from-file=/tmp/default.conf
cat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: nginx-customspec: containers: - name: nginx image: nginx volumeMounts: - name: config mountPath: /etc/nginx/conf.d/default.conf subPath: default.conf volumes: - name: config configMap: name: nginx-configEOFЗапитання 6: Сервісний акаунт
Розділ «Запитання 6: Сервісний акаунт»[2 хвилини]
Створіть Сервісний акаунт з назвою app-sa та під з назвою app-pod з nginx, який використовує цей Сервісний акаунт.
Відповідь
k create sa app-sa
cat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: app-podspec: serviceAccountName: app-sa containers: - name: nginx image: nginxEOF
# Перевіркаk get pod app-pod -o jsonpath='{.spec.serviceAccountName}'Запитання 7: Декодування Secret
Розділ «Запитання 7: Декодування Secret»[1 хвилина]
Secret з назвою api-secret існує з ключем api-key. Як декодувати та відобразити його значення?
Відповідь
k get secret api-secret -o jsonpath='{.data.api-key}' | base64 -decho # новий рядокЗапитання 8: Видалення capabilities
Розділ «Запитання 8: Видалення capabilities»[3 хвилини]
Створіть під з назвою minimal-caps з nginx, який:
- Видаляє ВСІ capabilities
- Додає лише capability
NET_BIND_SERVICE - Запобігає ескалації привілеїв
Відповідь
cat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: minimal-capsspec: containers: - name: nginx image: nginx securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL add: - NET_BIND_SERVICEEOFЗапитання 9: Клас QoS
Розділ «Запитання 9: Клас QoS»[2 хвилини]
Створіть під з назвою guaranteed-pod з nginx, який має клас QoS Guaranteed. Яка конфігурація ресурсів потрібна?
Відповідь
Для QoS Guaranteed запити повинні дорівнювати лімітам як для CPU, так і для пам’яті:
cat << 'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: guaranteed-podspec: containers: - name: nginx image: nginx resources: requests: memory: "128Mi" cpu: "100m" limits: memory: "128Mi" cpu: "100m"EOF
# Перевіркаk get pod guaranteed-pod -o jsonpath='{.status.qosClass}'# Має вивести: GuaranteedЗапитання 10: Custom Resource
Розділ «Запитання 10: Custom Resource»[3 хвилини]
Враховуючи, що CRD для databases.example.com існує, створіть Custom Resource:
- Назва:
production-db - Kind:
Database - apiVersion:
example.com/v1 - spec.engine:
postgres - spec.replicas:
3
Відповідь
cat << 'EOF' | k apply -f -apiVersion: example.com/v1kind: Databasemetadata: name: production-dbspec: engine: postgres replicas: 3EOF
# Перевіркаk get databasesk describe database production-dbОцінювання
Розділ «Оцінювання»| Правильних відповідей | Бал | Статус |
|---|---|---|
| 10/10 | 100% | Відмінно — готові до іспиту |
| 8–9/10 | 80–90% | Добре — потрібен незначний перегляд |
| 6–7/10 | 60–70% | Перегляньте слабкі місця |
| <6/10 | <60% | Поверніться до модулів частини 4 |
Очищення
Розділ «Очищення»k delete configmap app-settings nginx-config 2>/dev/nullk delete secret db-creds api-secret 2>/dev/nullk delete pod db-client limited-pod secure-pod nginx-custom app-pod minimal-caps guaranteed-pod 2>/dev/nullk delete sa app-sa 2>/dev/nullk delete database production-db 2>/dev/nullКлючові висновки
Розділ «Ключові висновки»Якщо ви набрали менше 80%, перегляньте ці теми:
- Пропустили Q1, Q5: Перегляньте Модуль 4.1 (ConfigMaps) — створення та монтування томів
- Пропустили Q2, Q7: Перегляньте Модуль 4.2 (Secrets) — змінні оточення та декодування
- Пропустили Q3, Q9: Перегляньте Модуль 4.3 (Ресурси) — запити, ліміти, QoS
- Пропустили Q4, Q8: Перегляньте Модуль 4.4 (SecurityContexts) — користувач/група, capabilities
- Пропустили Q6: Перегляньте Модуль 4.5 (Сервісні акаунти) — створення та призначення
- Пропустили Q10: Перегляньте Модуль 4.6 (CRDs) — власні ресурси
Наступна частина
Розділ «Наступна частина»Частина 5: Сервіси та мережа — Сервіси, Ingress та мережеві політики.