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

Модуль 0.2: Робочий процес розробника

Hands-On Lab Available
K8s Cluster intermediate 30 min
Launch Lab ↗

Opens in Killercoda in a new tab

Складність: [QUICK] - Основні шаблони kubectl

Час на проходження: 25-30 хвилин

Передумови: Модуль 0.1 (Огляд CKAD), Модуль 0.2 CKA (Володіння оболонкою)


Що ви зможете робити

Розділ «Що ви зможете робити»

Після завершення цього модуля ви зможете:

  • Налаштувати псевдоніми kubectl, автодоповнення оболонки та ярлики, специфічні для CKAD, для максимальної швидкості
  • Створити ресурси Kubernetes імперативно за допомогою kubectl run, kubectl create та kubectl expose
  • Діагностувати проблеми з ресурсами швидко за допомогою kubectl describe, kubectl logs та kubectl exec
  • Пояснити робочий процес kubectl, орієнтований на розробника, що відрізняє завдання CKAD від CKA

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

CKAD — це про швидкість ТА правильність. У вас є 2 години на ~15-20 завдань. Кожна секунда має значення. Різниця між успішним і провальним результатом часто полягає не в знаннях, а у швидкості виконання.

Цей модуль зосереджений на специфічних для розробника шаблонах kubectl, які ви будете використовувати постійно. Якщо ви пройшли програму CKA, у вас вже налаштовані псевдоніми (aliases) та автодоповнення. Тут ми додаємо оптимізації спеціально для CKAD.

Аналогія: Пояс з інструментами теслі

Майстер-тесля не порпається в ящику для інструментів заради кожного цвяха. Найчастіше використовувані інструменти висять у нього на поясі, розміщені для миттєвого доступу. Аналогічно, ваші найбільш вживані шаблони kubectl повинні бути під рукою — створені як псевдоніми, запам’ятовані та відпрацьовані до рівня м’язової пам’яті.


Важливі псевдоніми (Aliases) для CKAD

Розділ «Важливі псевдоніми (Aliases) для CKAD»

Якщо ви пройшли програму CKA, вони у вас уже є. Якщо ні, додайте їх зараз:

Terminal window
# Add to ~/.bashrc or ~/.zshrc
# Basic alias (MUST have)
alias k='kubectl'
# Common actions
alias kaf='kubectl apply -f'
alias kdel='kubectl delete'
alias kd='kubectl describe'
alias kg='kubectl get'
alias kl='kubectl logs'
alias kx='kubectl exec -it'
# Output formats
alias kgy='kubectl get -o yaml'
alias kgw='kubectl get -o wide'
# Dry-run pattern (CKAD essential)
alias kdr='kubectl --dry-run=client -o yaml'
# Quick run
alias kr='kubectl run'
# Watch
alias kgpw='kubectl get pods -w'

Доповнення спеціально для CKAD

Розділ «Доповнення спеціально для CKAD»
Terminal window
# Jobs and CronJobs (CKAD heavy)
alias kcj='kubectl create job'
alias kccj='kubectl create cronjob'
# Quick debug pod
alias kdebug='kubectl run debug --image=busybox --rm -it --restart=Never --'
# Logs with container selection
alias klc='kubectl logs -c'
# Fast context switch
alias kctx='kubectl config use-context'
alias kns='kubectl config set-context --current --namespace'

Шаблон Dry-Run: Ваш найкращий друг

Розділ «Шаблон Dry-Run: Ваш найкращий друг»

Шаблон --dry-run=client -o yaml генерує YAML без створення ресурсів. Це необхідно для CKAD:

Terminal window
# Generate pod YAML
k run nginx --image=nginx $kdr > pod.yaml
# Generate deployment YAML
k create deploy web --image=nginx --replicas=3 $kdr > deploy.yaml
# Generate job YAML
k create job backup --image=busybox -- echo done $kdr > job.yaml
# Generate service YAML
k expose deploy web --port=80 $kdr > svc.yaml

Встановіть її для ще швидшої генерації YAML:

Terminal window
export kdr='--dry-run=client -o yaml'
# Now use it anywhere
k run nginx --image=nginx $kdr > pod.yaml
k create deploy web --image=nginx $kdr > deploy.yaml

Генерація YAML для багатоконтейнерного Пода

Розділ «Генерація YAML для багатоконтейнерного Пода»

Це фірмова навичка CKAD. Ви не можете створювати багатоконтейнерні Поди імперативно — вам потрібен YAML. Ось найшвидший підхід:

Крок 1: Згенеруйте базовий YAML

Розділ «Крок 1: Згенеруйте базовий YAML»
Terminal window
k run multi --image=nginx $kdr > multi-pod.yaml

Крок 2: Додайте другий контейнер

Розділ «Крок 2: Додайте другий контейнер»

Відредагуйте файл і продублюйте розділ контейнера:

apiVersion: v1
kind: Pod
metadata:
name: multi
spec:
containers:
- name: nginx
image: nginx
- name: sidecar # Add this
image: busybox # Add this
command: ["sleep", "3600"] # Add this

Практикуйте до автоматизму

Розділ «Практикуйте до автоматизму»

Цей шаблон зустрічається приблизно у 20% запитань CKAD. Ви повинні вміти:

  1. Згенерувати базовий YAML
  2. Додати контейнер sidecar
  3. Застосувати та перевірити

Усе це менш ніж за 2 хвилини.


Шаблони швидкого тестування

Розділ «Шаблони швидкого тестування»

В CKAD часто просять перевірити вашу роботу. Ці шаблони допоможуть:

Тестування підключення від Пода до Сервісу

Розділ «Тестування підключення від Пода до Сервісу»
Terminal window
# One-liner test pod
k run test --image=busybox --rm -it --restart=Never -- wget -qO- http://service-name
# DNS resolution test
k run test --image=busybox --rm -it --restart=Never -- nslookup service-name
# Test with curl
k run test --image=curlimages/curl --rm -it --restart=Never -- curl http://service-name

Швидка перевірка логів Пода

Розділ «Швидка перевірка логів Пода»
Terminal window
# Last 10 lines
k logs pod-name --tail=10
# Follow logs
k logs pod-name -f
# Specific container in multi-container pod
k logs pod-name -c container-name
# Previous container (if restarted)
k logs pod-name --previous

Зневадження всередині контейнера

Розділ «Зневадження всередині контейнера»
Terminal window
# Interactive shell
k exec -it pod-name -- sh
# Specific container
k exec -it pod-name -c container-name -- sh
# Run a single command
k exec pod-name -- cat /etc/config/app.conf

JSON Path для швидкого вилучення даних

Розділ «JSON Path для швидкого вилучення даних»

Деякі запитання CKAD вимагають конкретних значень. JSONPath стає у пригоді:

Terminal window
# Get pod IP
k get pod nginx -o jsonpath='{.status.podIP}'
# Get all pod IPs
k get pods -o jsonpath='{.items[*].status.podIP}'
# Get container image
k get pod nginx -o jsonpath='{.spec.containers[0].image}'
# Get node where pod runs
k get pod nginx -o jsonpath='{.spec.nodeName}'

Поширені шаблони JSONPath для CKAD

Розділ «Поширені шаблони JSONPath для CKAD»
Terminal window
# All container names in a pod
k get pod multi -o jsonpath='{.spec.containers[*].name}'
# All service cluster IPs
k get svc -o jsonpath='{.items[*].spec.clusterIP}'
# ConfigMap data
k get cm myconfig -o jsonpath='{.data.key}'
# Secret data (base64 encoded)
k get secret mysecret -o jsonpath='{.data.password}' | base64 -d

Управління Простором імен

Розділ «Управління Простором імен»

Запитання CKAD часто вказують Простори імен. Будьте швидкими:

Terminal window
# Create namespace
k create ns dev
# Set default namespace for session
k config set-context --current --namespace=dev
# Run command in specific namespace
k get pods -n prod
# All namespaces
k get pods -A

Порада від профі: Спочатку перевіряйте Простір імен

Розділ «Порада від профі: Спочатку перевіряйте Простір імен»

Багато кандидатів провалюють завдання на іспиті, тому що працюють не в тому Просторі імен. Завжди перевіряйте:

Terminal window
# Check current namespace
k config view --minify | grep namespace
# Or set it explicitly in each command
k get pods -n specified-namespace

Швидкість Vim для редагування YAML

Розділ «Швидкість Vim для редагування YAML»

Ви будете постійно редагувати YAML. Ці налаштування Vim допоможуть:

" Add to ~/.vimrc
set tabstop=2
set shiftwidth=2
set expandtab
set autoindent

Основні команди Vim для YAML

Розділ «Основні команди Vim для YAML»
" Copy a line
yy
" Paste below
p
" Delete a line
dd
" Indent a block (visual mode)
>>
" Unindent a block
<<
" Search for text
/searchterm
" Jump to line 50
:50
" Save and quit
:wq

Копіювання блоків YAML

Розділ «Копіювання блоків YAML»

Додаючи контейнер sidecar, ви будете копіювати наявну специфікацію контейнера:

1. Position cursor on the line with "- name:"
2. V (visual line mode)
3. Move down to select all container lines
4. y (yank/copy)
5. Move to where you want the new container
6. p (paste)
7. Edit the pasted block

  • Прапорець --restart=Never є критично важливим для тестових Подів. Без нього Kubernetes створює Деплоймент замість звичайного Пода. Прапорець --rm видаляє Под після його завершення — ідеально для одноразових тестів.

  • Ви можете поєднати -it та --rm для ефемерних сеансів зневадження. Под запускається інтерактивно та зникає після виходу.

  • JSONPath в kubectl використовує той самий синтаксис, що й API Kubernetes. Його практика допомагає як на іспиті, так і в реальній автоматизації.


ПомилкаЧому це шкодитьРішення
Забутий прапорець --restart=NeverСтворює Деплоймент замість ПодаЗробіть це частиною свого шаблону тестування
Неправильний Простір іменРесурси створюються в defaultЗавжди спочатку перевіряйте/встановлюйте Простір імен
Редагування YAML з неправильним відступомНедійсний YAML, незрозумілі помилкиВикористовуйте :set paste у Vim перед вставленням
Невикористання --dry-runПовільніше створення YAMLЗробіть використання змінної $kdr своєю другою натурою
Забагато пошуку в документаціїВитрачений часЗапам’ятайте типові специфікації

  1. Яка команда генерує YAML для Job без створення ресурсу?

    Відповідь `kubectl create job myjob --image=busybox -- echo done --dry-run=client -o yaml`
  2. Як створити тестовий Под, який автоматично видаляється після запуску wget?

    Відповідь `kubectl run test --image=busybox --rm -it --restart=Never -- wget -qO- http://service`
  3. Який JSONPath використовується для отримання образу першого контейнера з Пода?

    Відповідь `kubectl get pod podname -o jsonpath='{.spec.containers[0].image}'`
  4. Як встановити Простір імен за замовчуванням для поточного контексту?

    Відповідь `kubectl config set-context --current --namespace=namespace-name`

Практичне завдання

Розділ «Практичне завдання»

Завдання: Відпрацюйте шаблони робочого процесу розробника CKAD.

Частина 1: Майстерність Dry-Run (Ціль: 3 хвилини)

Terminal window
# Generate these YAML files using --dry-run
# 1. Pod named 'web' with nginx image
# 2. Deployment named 'api' with httpd image, 2 replicas
# 3. Job named 'backup' that echoes "complete"
# 4. CronJob named 'hourly' running every hour

Частина 2: Створення кількох контейнерів (Ціль: 4 хвилини)

Terminal window
# Create a pod with two containers:
# - main: nginx
# - sidecar: busybox running "sleep 3600"

Частина 3: Швидке тестування (Ціль: 2 хвилини)

Terminal window
# Test connectivity to a service
# Verify pod logs work
# Execute a command in a container

Критерії успіху:

  • Усі файли YAML згенеровано правильно
  • Багатоконтейнерний Под працює з обома контейнерами в стані Ready
  • Тестові команди виконуються успішно

Вправа 1: Перевірка псевдонімів (Ціль: 1 хвилина)

Розділ «Вправа 1: Перевірка псевдонімів (Ціль: 1 хвилина)»

Перевірте, чи працюють ваші псевдоніми:

Terminal window
# These should all work
k get pods
kgy pod nginx # Get YAML of a pod
kdr # Should echo "--dry-run=client -o yaml"

Вправа 2: Швидкість генерації YAML (Ціль: 5 хвилин)

Розділ «Вправа 2: Швидкість генерації YAML (Ціль: 5 хвилин)»

Згенеруйте YAML для кожного типу ресурсу, не підглядаючи в нотатки:

Terminal window
# Pod
k run nginx --image=nginx $kdr > /tmp/pod.yaml
# Deployment
k create deploy web --image=nginx $kdr > /tmp/deploy.yaml
# Service
k create svc clusterip mysvc --tcp=80:80 $kdr > /tmp/svc.yaml
# Job
k create job backup --image=busybox -- echo done $kdr > /tmp/job.yaml
# CronJob
k create cronjob hourly --image=busybox --schedule="0 * * * *" -- date $kdr > /tmp/cronjob.yaml
# ConfigMap
k create cm myconfig --from-literal=key=value $kdr > /tmp/cm.yaml
# Secret
k create secret generic mysecret --from-literal=password=secret $kdr > /tmp/secret.yaml

Вправа 3: Швидкість створення багатоконтейнерного Пода (Ціль: 3 хвилини)

Розділ «Вправа 3: Швидкість створення багатоконтейнерного Пода (Ціль: 3 хвилини)»

Створіть багатоконтейнерний Под з нуля:

Terminal window
# Generate base
k run multi --image=nginx $kdr > /tmp/multi.yaml
# Edit to add sidecar (use vim)
vim /tmp/multi.yaml
# Apply
k apply -f /tmp/multi.yaml
# Verify both containers running
k get pod multi -o jsonpath='{.spec.containers[*].name}'
# Expected: nginx sidecar
# Cleanup
k delete pod multi

Вправа 4: Вилучення JSONPath (Ціль: 3 хвилини)

Розділ «Вправа 4: Вилучення JSONPath (Ціль: 3 хвилини)»
Terminal window
# Create a test pod first
k run nginx --image=nginx
# Wait for running
k wait --for=condition=Ready pod/nginx
# Extract these values using JSONPath:
# 1. Pod IP
k get pod nginx -o jsonpath='{.status.podIP}'
# 2. Container image
k get pod nginx -o jsonpath='{.spec.containers[0].image}'
# 3. Node name
k get pod nginx -o jsonpath='{.spec.nodeName}'
# 4. Pod phase (Running/Pending/etc)
k get pod nginx -o jsonpath='{.status.phase}'
# Cleanup
k delete pod nginx

Вправа 5: Робочий процес із Просторами імен (Ціль: 2 хвилини)

Розділ «Вправа 5: Робочий процес із Просторами імен (Ціль: 2 хвилини)»
Terminal window
# Create a namespace
k create ns ckad-test
# Set as default
k config set-context --current --namespace=ckad-test
# Verify
k config view --minify | grep namespace
# Create a pod (should go to ckad-test)
k run nginx --image=nginx
# Verify pod is in ckad-test
k get pods # Should show nginx
k get pods -n default # Should NOT show nginx
# Reset namespace
k config set-context --current --namespace=default
# Cleanup
k delete ns ckad-test

Вправа 6: Повний робочий процес розробника (Ціль: 8 хвилин)

Розділ «Вправа 6: Повний робочий процес розробника (Ціль: 8 хвилин)»

Зімітуйте завдання CKAD від початку до кінця:

Сценарій: Створіть вебдодаток із sidecar, який логує доступ.

Terminal window
# 1. Create namespace
k create ns web-app
# 2. Set namespace
k config set-context --current --namespace=web-app
# 3. Generate multi-container pod YAML
k run webapp --image=nginx $kdr > /tmp/webapp.yaml
# 4. Edit to add sidecar (logs container)
# Add this container:
# - name: logger
# image: busybox
# command: ["sh", "-c", "tail -f /var/log/nginx/access.log"]
# volumeMounts:
# - name: logs
# mountPath: /var/log/nginx
# 5. Apply
k apply -f /tmp/webapp.yaml
# 6. Verify both containers running
k get pod webapp -o wide
k describe pod webapp | grep -A5 Containers
# 7. Test connectivity
k expose pod webapp --port=80
k run test --image=busybox --rm -it --restart=Never -- wget -qO- http://webapp
# 8. Cleanup
k config set-context --current --namespace=default
k delete ns web-app

Модуль 1.1: Образи контейнерів — Збірка, тегування та пуш образів контейнерів для CKAD.