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

Модуль 0.2: Майстерність роботи з терміналом

Hands-On Lab Available
Ubuntu intermediate 30 min
Launch Lab ↗

Opens in Killercoda in a new tab

Складність: [QUICK] — Налаштуйте один раз, користуйтесь завжди

Час на виконання: 15-20 хвилин

Передумови: Модуль 0.1 (працюючий кластер)


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

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

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

  • Налаштувати аліаси kubectl та bash completion, щоб зекономити 5-10 хвилин на іспиті CKA
  • Використовувати комбінації клавіш оболонки (Ctrl+R, !!, tab completion), щоб не набирати команди повторно
  • Створити персональну конфігурацію .bashrc, що прискорює роботу з kubectl у 3 рази
  • Відновити роботу після помилок в оболонці за допомогою пошуку по історії та редагування команд

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

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

На іспиті CKA у вас приблизно 7 хвилин на питання в середньому. Кожне натискання клавіші має значення. Різниця між набором kubectl get pods --all-namespaces і k get po -A невелика, але помножте це на 50+ команд kubectl — і ви заощадите 5-10 хвилин.

5-10 хвилин — це ціле питання. А може й два.

Цей модуль налаштує ваш термінал для максимальної швидкості.

Аналогія з піт-стопом Формули 1

У Формулі 1 піт-стопи вигрують або програють за частки секунди. Команда не імпровізує — кожен рух відрепетирований, кожен інструмент на своєму місці, кожна дія доведена до автоматизму. Налаштування вашого терміналу — це ваша піт-команда. Аліаси — це ваші заздалегідь підготовлені інструменти. Автодоповнення — це ваша натренована м’язова пам’ять. Без підготовки ви метушитесь. З нею — ви міняєте шини за 2 секунди, поки інші ще шукають ключ.


До: kubectl get pods --namespace kube-system --output wide
Після: k get po -n kube-system -o wide
До: kubectl describe pod nginx-deployment-abc123
Після: k describe po nginx<TAB> → автодоповнення повної назви
До: kubectl config use-context production-cluster
Після: kx production<TAB> → перемикання контексту з автодоповненням

Частина 1: Автодоповнення kubectl

Розділ «Частина 1: Автодоповнення kubectl»

Це обов’язково. Автодоповнення економить більше часу, ніж будь-який аліас.

1.1 Увімкнення Bash Completion

Розділ «1.1 Увімкнення Bash Completion»
Terminal window
# Install bash-completion if not present
sudo apt-get install -y bash-completion
# Enable kubectl completion
echo 'source <(kubectl completion bash)' >> ~/.bashrc
# Apply now
source ~/.bashrc

1.2 Перевірка автодоповнення

Розділ «1.2 Перевірка автодоповнення»
Terminal window
kubectl get <TAB><TAB>

Ви маєте побачити список ресурсів (pods, deployments, services тощо).

Terminal window
kubectl get pods -n kube<TAB>

Має автодоповнитись до kube-system.

Terminal window
kubectl describe pod cal<TAB>

Має автодоповнитись до повної назви Поду Calico.

Чи знали ви?

Середовище іспиту CKA має попередньо встановлене bash completion. Але якщо ви практикуєтесь без нього, ви набудете погані звички (запам’ятовування повних назв ресурсів, ручний набір усього). Завжди практикуйтесь з увімкненим автодоповненням.


Частина 2: Основні аліаси

Розділ «Частина 2: Основні аліаси»
Terminal window
# The most important alias
echo 'alias k=kubectl' >> ~/.bashrc
# Enable completion for the alias too
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrc

Тепер k get pods працює так само як kubectl get pods, з повним автодоповненням.

2.2 Скорочення типів ресурсів

Розділ «2.2 Скорочення типів ресурсів»

kubectl вже підтримує скорочені назви. Запам’ятайте їх:

Повна назваСкороченняПриклад
podspok get po
deploymentsdeployk get deploy
servicessvck get svc
namespacesnsk get ns
nodesnok get no
configmapscmk get cm
secrets(немає)k get secrets
persistentvolumespvk get pv
persistentvolumeclaimspvck get pvc
serviceaccountssak get sa
replicasetsrsk get rs
daemonsetsdsk get ds
statefulsetsstsk get sts
ingressesingk get ing
networkpoliciesnetpolk get netpol
storageclassessck get sc

Це не аліаси — вони вбудовані в kubectl. Використовуйте їх.

2.3 Рекомендовані додаткові аліаси

Розділ «2.3 Рекомендовані додаткові аліаси»

Додайте до вашого ~/.bashrc:

Terminal window
# Faster common operations
alias kgp='kubectl get pods'
alias kgpa='kubectl get pods -A'
alias kgs='kubectl get svc'
alias kgn='kubectl get nodes'
alias kgd='kubectl get deploy'
# Describe shortcuts
alias kdp='kubectl describe pod'
alias kds='kubectl describe svc'
alias kdn='kubectl describe node'
# Logs
alias kl='kubectl logs'
alias klf='kubectl logs -f'
# Apply/Delete
alias ka='kubectl apply -f'
alias kd='kubectl delete -f'
# Context and namespace
alias kx='kubectl config use-context'
alias kn='kubectl config set-context --current --namespace'
# Quick debug pod
alias krun='kubectl run debug --image=busybox --rm -it --restart=Never --'

2.4 Застосування всіх аліасів

Розділ «2.4 Застосування всіх аліасів»
Terminal window
source ~/.bashrc

Частина 3: Перемикання контексту та простору імен

Розділ «Частина 3: Перемикання контексту та простору імен»

На іспиті CKA використовуються декілька кластерів. Вам доведеться постійно перемикати контексти.

Бойова історія: Помилка на $15,000

DevOps-інженер хотів видалити тестовий простір імен у staging-кластері. Він набрав kubectl delete ns payment-service і натиснув Enter. А потім відчув, як серце завмерло — він був у production-контексті. 47 Подів, що обслуговували реальних клієнтів, зникли. Відновлення тривало 3 години. Рішення? Тепер він налаштував PS1 так, щоб показувати поточний контекст у командному рядку, виділений червоним, коли це production. Контекстна обізнаність — це не опція, це виживання.

3.1 Розуміння контекстів

Розділ «3.1 Розуміння контекстів»
Terminal window
# List all contexts
kubectl config get-contexts
# See current context
kubectl config current-context
# Switch context
kubectl config use-context <context-name>

3.2 Швидке перемикання контексту

Розділ «3.2 Швидке перемикання контексту»

З аліасом kx:

Terminal window
kx prod<TAB> # Autocompletes to production-context
kx staging<TAB> # Autocompletes to staging-context

3.3 Перемикання простору імен

Розділ «3.3 Перемикання простору імен»

Замість того, щоб щоразу набирати -n namespace:

Terminal window
# Set default namespace for current context
kn kube-system
# Now all commands default to kube-system
k get po # Shows kube-system pods
# Switch back to default
kn default

Увага: Неправильний кластер

Помилка №1 на іспиті — розв’язання задач у неправильному кластері. Кожне питання вказує контекст. Завжди перемикайте контекст першим. Доведіть це до автоматизму:

  1. Прочитайте питання
  2. Перемкніть контекст
  3. Потім розв’язуйте

Частина 4: Змінні середовища

Розділ «Частина 4: Змінні середовища»

4.1 Скорочення для Dry-Run

Розділ «4.1 Скорочення для Dry-Run»

Ви будете постійно генерувати YAML-шаблони:

Terminal window
export do='--dry-run=client -o yaml'
# Usage
k run nginx --image=nginx $do > pod.yaml
k create deploy nginx --image=nginx $do > deploy.yaml
k expose deploy nginx --port=80 $do > svc.yaml

4.2 Примусове видалення (використовуйте обережно)

Розділ «4.2 Примусове видалення (використовуйте обережно)»
Terminal window
export now='--force --grace-period=0'
# Usage (when you need instant deletion)
k delete po nginx $now

4.3 Додавання до .bashrc

Розділ «4.3 Додавання до .bashrc»
Terminal window
echo "export do='--dry-run=client -o yaml'" >> ~/.bashrc
echo "export now='--force --grace-period=0'" >> ~/.bashrc
source ~/.bashrc

Частина 5: Повне налаштування .bashrc

Розділ «Частина 5: Повне налаштування .bashrc»

Ось усе разом. Додайте до вашого ~/.bashrc:

Terminal window
# ============================================
# Kubernetes CKA Exam Shell Configuration
# ============================================
# kubectl completion
source <(kubectl completion bash)
# Core alias
alias k=kubectl
complete -o default -F __start_kubectl k
# Get shortcuts
alias kgp='kubectl get pods'
alias kgpa='kubectl get pods -A'
alias kgs='kubectl get svc'
alias kgn='kubectl get nodes'
alias kgd='kubectl get deploy'
alias kgpv='kubectl get pv'
alias kgpvc='kubectl get pvc'
# Describe shortcuts
alias kdp='kubectl describe pod'
alias kds='kubectl describe svc'
alias kdn='kubectl describe node'
alias kdd='kubectl describe deploy'
# Logs
alias kl='kubectl logs'
alias klf='kubectl logs -f'
# Apply/Delete
alias ka='kubectl apply -f'
alias kd='kubectl delete -f'
# Context and namespace
alias kx='kubectl config use-context'
alias kn='kubectl config set-context --current --namespace'
# Quick debug
alias krun='kubectl run debug --image=busybox --rm -it --restart=Never --'
# Environment variables
export do='--dry-run=client -o yaml'
export now='--force --grace-period=0'
# ============================================

Частина 6: Тест швидкості

Розділ «Частина 6: Тест швидкості»

Засікайте час на цих командах. Цільовий час у дужках.

Terminal window
kubectl get pods --all-namespaces --output wide # (5+ seconds typing)
kubectl describe pod <pod-name> # (3+ seconds + finding name)
kubectl config use-context production # (3+ seconds)
Terminal window
k get po -A -o wide # (<2 seconds)
kdp <TAB> # (<1 second with autocomplete)
kx prod<TAB> # (<1 second)

Генерація YAML-шаблону

Розділ «Генерація YAML-шаблону»
Terminal window
# Without
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml # (6+ seconds)
# With
k run nginx --image=nginx $do > nginx.yaml # (<2 seconds)

  • Термінал іспиту має попередньо встановлене kubectl completion, але ваших аліасів там не буде. Деякі кандидати запам’ятовують короткий скрипт налаштування аліасів, щоб набрати його на початку іспиту. Це займає 30 секунд і економить значно більше.

  • kubectl explain — ваш найкращий друг. Замість пошуку в документації:

    Terminal window
    k explain pod.spec.containers
    k explain deploy.spec.strategy

    Це працює офлайн і швидше за браузер.

  • Ви можете запустити kubectl з --help для будь-якої підкоманди:

    Terminal window
    k create --help
    k run --help
    k expose --help

    Приклади у виводі --help часто є саме тим, що вам потрібно.


ПомилкаПроблемаРішення
Не використовувати автодоповненняПовільно, друкарські помилкиЗавжди <TAB>
Забувати -A для всіх просторів іменПропуск ресурсівЗа замовчуванням використовуйте -A при пошуку
Набирати повні назви ресурсівПовільноВикористовуйте скорочення: po, svc, deploy
Неправильний контекстРобота в неправильному кластеріЗавжди kx першим
Не використовувати $doРучний набір dry-runЕкспортуйте змінну

  1. Що робить ця команда: k get po -A -o wide?

    Відповідь Виводить список усіх Подів у всіх просторах імен з розширеною інформацією (нода, IP тощо). `-A` — скорочення для `--all-namespaces`, `-o wide` показує додаткові стовпці.
  2. Як швидко згенерувати YAML Деплойменту без його створення?

    Відповідь `k create deploy nginx --image=nginx --dry-run=client -o yaml > deploy.yaml` Або з аліасом: `k create deploy nginx --image=nginx $do > deploy.yaml`
  3. Що потрібно зробити першим, починаючи нове питання іспиту?

    Відповідь Перемкнутися на правильний контекст. Кожне питання вказує, який кластер використовувати. Робота в неправильному кластері — типова помилка на іспиті.
  4. Яке скорочення для persistentvolumeclaims?

    Відповідь `pvc` — як у `k get pvc`

Завдання: Налаштуйте свій термінал і перевірте покращення швидкості.

Підготовка:

Terminal window
# Add all configurations to ~/.bashrc (use the complete setup from Part 5)
source ~/.bashrc

Тест швидкості:

  1. Засікіть час на отримання списку всіх Подів у всіх просторах імен
  2. Засікіть час на опис Поду (використовуйте автодоповнення)
  3. Засікіть час на генерацію YAML Деплойменту
  4. Засікіть час на перемикання контексту

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

  • k get po -A працює
  • Автодоповнення Tab працює для назв Подів
  • Змінна $do встановлена
  • Можете перемкнути контекст за <2 секунди

Перевірка:

Terminal window
# Test alias
k get no
# Test completion (should show options)
k get <TAB><TAB>
# Test variable
echo $do # Should output: --dry-run=client -o yaml
# Test YAML generation
k run test --image=nginx $do

Вправа 1: Тест швидкості — базові команди (Ціль: 30 секунд кожна)

Розділ «Вправа 1: Тест швидкості — базові команди (Ціль: 30 секунд кожна)»

Засікайте час. Якщо будь-яка займає >30 секунд, практикуйтесь до автоматизму.

Terminal window
# 1. List all pods in all namespaces with wide output
# Target command: k get po -A -o wide
# 2. Get all nodes
# Target command: k get no
# 3. Describe a pod (use autocomplete for name)
# Target command: kdp <TAB>
# 4. Switch to kube-system namespace
# Target command: kn kube-system
# 5. Generate deployment YAML without creating
# Target command: k create deploy nginx --image=nginx $do

Вправа 2: Перегони з перемиканням контексту (Ціль: 1 хвилина загалом)

Розділ «Вправа 2: Перегони з перемиканням контексту (Ціль: 1 хвилина загалом)»
Terminal window
# Setup: Create multiple contexts to practice
kubectl config set-context practice-1 --cluster=kubernetes --user=kubernetes-admin
kubectl config set-context practice-2 --cluster=kubernetes --user=kubernetes-admin
kubectl config set-context practice-3 --cluster=kubernetes --user=kubernetes-admin
# TIMED DRILL: Switch between contexts as fast as possible
# Start timer now!
kx practice-1
kubectl config current-context # Verify
kx practice-2
kubectl config current-context # Verify
kx practice-3
kubectl config current-context # Verify
kx kubernetes-admin@kubernetes # Back to default
kubectl config current-context # Verify
# Stop timer. Target: <1 minute for all 4 switches + verifications

Вправа 3: Спринт генерації YAML (Ціль: 3 хвилини)

Розділ «Вправа 3: Спринт генерації YAML (Ціль: 3 хвилини)»

Згенеруйте всі ці YAML-файли за допомогою змінної $do. Не створюйте ресурси, лише генеруйте файли.

Terminal window
# 1. Pod
k run nginx --image=nginx $do > pod.yaml
# 2. Deployment
k create deploy web --image=nginx --replicas=3 $do > deploy.yaml
# 3. Service (ClusterIP)
k create svc clusterip my-svc --tcp=80:80 $do > svc-clusterip.yaml
# 4. Service (NodePort)
k create svc nodeport my-np --tcp=80:80 $do > svc-nodeport.yaml
# 5. ConfigMap
k create cm my-config --from-literal=key=value $do > cm.yaml
# 6. Secret
k create secret generic my-secret --from-literal=password=secret123 $do > secret.yaml
# Verify all files exist and are valid
ls -la *.yaml
kubectl apply -f . --dry-run=client
# Cleanup
rm -f *.yaml

Вправа 4: Усунення неполадок — аліаси не працюють

Розділ «Вправа 4: Усунення неполадок — аліаси не працюють»

Сценарій: Ваші аліаси перестали працювати. Діагностуйте та виправте.

Terminal window
# Setup: Break the aliases
unalias k 2>/dev/null
unset do
# Test: These should fail
k get nodes # Command not found
echo $do # Empty
# YOUR TASK: Fix without looking at the solution
# Verify fix worked:
k get nodes
echo $do
Рішення
Terminal window
# Option 1: Re-source bashrc
source ~/.bashrc
# Option 2: Manually set (if bashrc is broken)
alias k=kubectl
complete -o default -F __start_kubectl k
export do='--dry-run=client -o yaml'
# Verify
k get nodes
echo $do

Вправа 5: Тест пам’яті на скорочені назви ресурсів

Розділ «Вправа 5: Тест пам’яті на скорочені назви ресурсів»

Не підглядаючи в таблицю, напишіть команди зі скороченнями:

Terminal window
# 1. Get all deployments → k get ____
# 2. Get all daemonsets → k get ____
# 3. Get all statefulsets → k get ____
# 4. Get all persistentvolumes → k get ____
# 5. Get all persistentvolumeclaims → k get ____
# 6. Get all configmaps → k get ____
# 7. Get all serviceaccounts → k get ____
# 8. Get all ingresses → k get ____
# 9. Get all networkpolicies → k get ____
# 10. Get all storageclasses → k get ____
Відповіді
Terminal window
k get deploy
k get ds
k get sts
k get pv
k get pvc
k get cm
k get sa
k get ing
k get netpol
k get sc

Вправа 6: Виклик — власний набір аліасів

Розділ «Вправа 6: Виклик — власний набір аліасів»

Створіть власні аліаси для підвищення продуктивності для цих сценаріїв:

  1. Показати логи Поду з мітками часу
  2. Спостерігати за Подами в поточному просторі імен
  3. Отримати події, відсортовані за часом
  4. Зайти в Под через bash
  5. Прокинути порт на 8080
Terminal window
# Add to ~/.bashrc:
alias klt='kubectl logs --timestamps'
alias kw='kubectl get pods -w'
alias kev='kubectl get events --sort-by=.lastTimestamp'
alias kex='kubectl exec -it'
alias kpf='kubectl port-forward'
source ~/.bashrc
# Test each one

Вправа 7: Симуляція іспиту — перші 2 хвилини

Розділ «Вправа 7: Симуляція іспиту — перші 2 хвилини»

Практикуйте те, що ви б зробили на самому початку іспиту CKA:

Terminal window
# Timer starts NOW
# Step 1: Set up aliases (type from memory)
alias k=kubectl
complete -o default -F __start_kubectl k
export do='--dry-run=client -o yaml'
export now='--force --grace-period=0'
# Step 2: Verify setup
k get nodes
echo $do
# Step 3: Check available contexts
kubectl config get-contexts
# Timer stop. Target: <2 minutes

Модуль 0.3: Vim для YAML — Необхідне налаштування Vim для ефективного редагування YAML-файлів.