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

Підсумковий тест частини 4: Середовище застосунків, конфігурація та безпека

Lab Progress 0/6 completed

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

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

Цей тест перевіряє ваші знання з:

  • ConfigMaps та Secrets
  • Вимог та лімітів ресурсів
  • SecurityContexts
  • Сервісних акаунтів
  • Custom Resource Definitions

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

Запитання 1: ConfigMap з літералів

Розділ «Запитання 1: ConfigMap з літералів»

[2 хвилини]

Створіть ConfigMap з назвою app-settings з такими значеннями:

  • LOG_LEVEL=debug
  • MAX_CONNECTIONS=100
  • ENVIRONMENT=staging
Відповідь
Terminal window
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.

Відповідь
Terminal window
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: db-client
spec:
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: password
EOF

Запитання 3: Ліміти ресурсів

Розділ «Запитання 3: Ліміти ресурсів»

[2 хвилини]

Створіть під з назвою limited-pod з nginx, який має:

  • Запит пам’яті: 128Mi
  • Ліміт пам’яті: 256Mi
  • Запит CPU: 100m
  • Ліміт CPU: 200m
Відповідь
Terminal window
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: limited-pod
spec:
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
Відповідь
Terminal window
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
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.

Відповідь
Terminal window
cat << 'EOF' > /tmp/default.conf
server {
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: v1
kind: Pod
metadata:
name: nginx-custom
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: config
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
volumes:
- name: config
configMap:
name: nginx-config
EOF

Запитання 6: Сервісний акаунт

Розділ «Запитання 6: Сервісний акаунт»

[2 хвилини]

Створіть Сервісний акаунт з назвою app-sa та під з назвою app-pod з nginx, який використовує цей Сервісний акаунт.

Відповідь
Terminal window
k create sa app-sa
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
serviceAccountName: app-sa
containers:
- name: nginx
image: nginx
EOF
# Перевірка
k get pod app-pod -o jsonpath='{.spec.serviceAccountName}'

Запитання 7: Декодування Secret

Розділ «Запитання 7: Декодування Secret»

[1 хвилина]

Secret з назвою api-secret існує з ключем api-key. Як декодувати та відобразити його значення?

Відповідь
Terminal window
k get secret api-secret -o jsonpath='{.data.api-key}' | base64 -d
echo # новий рядок

Запитання 8: Видалення capabilities

Розділ «Запитання 8: Видалення capabilities»

[3 хвилини]

Створіть під з назвою minimal-caps з nginx, який:

  • Видаляє ВСІ capabilities
  • Додає лише capability NET_BIND_SERVICE
  • Запобігає ескалації привілеїв
Відповідь
Terminal window
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: minimal-caps
spec:
containers:
- name: nginx
image: nginx
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
EOF

Запитання 9: Клас QoS

Розділ «Запитання 9: Клас QoS»

[2 хвилини]

Створіть під з назвою guaranteed-pod з nginx, який має клас QoS Guaranteed. Яка конфігурація ресурсів потрібна?

Відповідь

Для QoS Guaranteed запити повинні дорівнювати лімітам як для CPU, так і для пам’яті:

Terminal window
cat << 'EOF' | k apply -f -
apiVersion: v1
kind: Pod
metadata:
name: guaranteed-pod
spec:
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
Відповідь
Terminal window
cat << 'EOF' | k apply -f -
apiVersion: example.com/v1
kind: Database
metadata:
name: production-db
spec:
engine: postgres
replicas: 3
EOF
# Перевірка
k get databases
k describe database production-db

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

Terminal window
k delete configmap app-settings nginx-config 2>/dev/null
k delete secret db-creds api-secret 2>/dev/null
k delete pod db-client limited-pod secure-pod nginx-custom app-pod minimal-caps guaranteed-pod 2>/dev/null
k delete sa app-sa 2>/dev/null
k 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 та мережеві політики.