Модуль 0.2: Майстерність роботи з терміналом
Складність:
[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»# Install bash-completion if not presentsudo apt-get install -y bash-completion
# Enable kubectl completionecho 'source <(kubectl completion bash)' >> ~/.bashrc
# Apply nowsource ~/.bashrc1.2 Перевірка автодоповнення
Розділ «1.2 Перевірка автодоповнення»kubectl get <TAB><TAB>Ви маєте побачити список ресурсів (pods, deployments, services тощо).
kubectl get pods -n kube<TAB>Має автодоповнитись до kube-system.
kubectl describe pod cal<TAB>Має автодоповнитись до повної назви Поду Calico.
Чи знали ви?
Середовище іспиту CKA має попередньо встановлене bash completion. Але якщо ви практикуєтесь без нього, ви набудете погані звички (запам’ятовування повних назв ресурсів, ручний набір усього). Завжди практикуйтесь з увімкненим автодоповненням.
Частина 2: Основні аліаси
Розділ «Частина 2: Основні аліаси»2.1 Головний аліас
Розділ «2.1 Головний аліас»# The most important aliasecho 'alias k=kubectl' >> ~/.bashrc
# Enable completion for the alias tooecho 'complete -o default -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrcТепер k get pods працює так само як kubectl get pods, з повним автодоповненням.
2.2 Скорочення типів ресурсів
Розділ «2.2 Скорочення типів ресурсів»kubectl вже підтримує скорочені назви. Запам’ятайте їх:
| Повна назва | Скорочення | Приклад |
|---|---|---|
| pods | po | k get po |
| deployments | deploy | k get deploy |
| services | svc | k get svc |
| namespaces | ns | k get ns |
| nodes | no | k get no |
| configmaps | cm | k get cm |
| secrets | (немає) | k get secrets |
| persistentvolumes | pv | k get pv |
| persistentvolumeclaims | pvc | k get pvc |
| serviceaccounts | sa | k get sa |
| replicasets | rs | k get rs |
| daemonsets | ds | k get ds |
| statefulsets | sts | k get sts |
| ingresses | ing | k get ing |
| networkpolicies | netpol | k get netpol |
| storageclasses | sc | k get sc |
Це не аліаси — вони вбудовані в kubectl. Використовуйте їх.
2.3 Рекомендовані додаткові аліаси
Розділ «2.3 Рекомендовані додаткові аліаси»Додайте до вашого ~/.bashrc:
# Faster common operationsalias 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 shortcutsalias kdp='kubectl describe pod'alias kds='kubectl describe svc'alias kdn='kubectl describe node'
# Logsalias kl='kubectl logs'alias klf='kubectl logs -f'
# Apply/Deletealias ka='kubectl apply -f'alias kd='kubectl delete -f'
# Context and namespacealias kx='kubectl config use-context'alias kn='kubectl config set-context --current --namespace'
# Quick debug podalias krun='kubectl run debug --image=busybox --rm -it --restart=Never --'2.4 Застосування всіх аліасів
Розділ «2.4 Застосування всіх аліасів»source ~/.bashrcЧастина 3: Перемикання контексту та простору імен
Розділ «Частина 3: Перемикання контексту та простору імен»На іспиті CKA використовуються декілька кластерів. Вам доведеться постійно перемикати контексти.
Бойова історія: Помилка на $15,000
DevOps-інженер хотів видалити тестовий простір імен у staging-кластері. Він набрав
kubectl delete ns payment-serviceі натиснув Enter. А потім відчув, як серце завмерло — він був у production-контексті. 47 Подів, що обслуговували реальних клієнтів, зникли. Відновлення тривало 3 години. Рішення? Тепер він налаштувавPS1так, щоб показувати поточний контекст у командному рядку, виділений червоним, коли це production. Контекстна обізнаність — це не опція, це виживання.
3.1 Розуміння контекстів
Розділ «3.1 Розуміння контекстів»# List all contextskubectl config get-contexts
# See current contextkubectl config current-context
# Switch contextkubectl config use-context <context-name>3.2 Швидке перемикання контексту
Розділ «3.2 Швидке перемикання контексту»З аліасом kx:
kx prod<TAB> # Autocompletes to production-contextkx staging<TAB> # Autocompletes to staging-context3.3 Перемикання простору імен
Розділ «3.3 Перемикання простору імен»Замість того, щоб щоразу набирати -n namespace:
# Set default namespace for current contextkn kube-system
# Now all commands default to kube-systemk get po # Shows kube-system pods
# Switch back to defaultkn defaultУвага: Неправильний кластер
Помилка №1 на іспиті — розв’язання задач у неправильному кластері. Кожне питання вказує контекст. Завжди перемикайте контекст першим. Доведіть це до автоматизму:
- Прочитайте питання
- Перемкніть контекст
- Потім розв’язуйте
Частина 4: Змінні середовища
Розділ «Частина 4: Змінні середовища»4.1 Скорочення для Dry-Run
Розділ «4.1 Скорочення для Dry-Run»Ви будете постійно генерувати YAML-шаблони:
export do='--dry-run=client -o yaml'
# Usagek run nginx --image=nginx $do > pod.yamlk create deploy nginx --image=nginx $do > deploy.yamlk expose deploy nginx --port=80 $do > svc.yaml4.2 Примусове видалення (використовуйте обережно)
Розділ «4.2 Примусове видалення (використовуйте обережно)»export now='--force --grace-period=0'
# Usage (when you need instant deletion)k delete po nginx $now4.3 Додавання до .bashrc
Розділ «4.3 Додавання до .bashrc»echo "export do='--dry-run=client -o yaml'" >> ~/.bashrcecho "export now='--force --grace-period=0'" >> ~/.bashrcsource ~/.bashrcЧастина 5: Повне налаштування .bashrc
Розділ «Частина 5: Повне налаштування .bashrc»Ось усе разом. Додайте до вашого ~/.bashrc:
# ============================================# Kubernetes CKA Exam Shell Configuration# ============================================
# kubectl completionsource <(kubectl completion bash)
# Core aliasalias k=kubectlcomplete -o default -F __start_kubectl k
# Get shortcutsalias 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 shortcutsalias kdp='kubectl describe pod'alias kds='kubectl describe svc'alias kdn='kubectl describe node'alias kdd='kubectl describe deploy'
# Logsalias kl='kubectl logs'alias klf='kubectl logs -f'
# Apply/Deletealias ka='kubectl apply -f'alias kd='kubectl delete -f'
# Context and namespacealias kx='kubectl config use-context'alias kn='kubectl config set-context --current --namespace'
# Quick debugalias krun='kubectl run debug --image=busybox --rm -it --restart=Never --'
# Environment variablesexport do='--dry-run=client -o yaml'export now='--force --grace-period=0'
# ============================================Частина 6: Тест швидкості
Розділ «Частина 6: Тест швидкості»Засікайте час на цих командах. Цільовий час у дужках.
Без оптимізації
Розділ «Без оптимізації»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)З оптимізацією
Розділ «З оптимізацією»k get po -A -o wide # (<2 seconds)kdp <TAB> # (<1 second with autocomplete)kx prod<TAB> # (<1 second)Генерація YAML-шаблону
Розділ «Генерація YAML-шаблону»# Withoutkubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml # (6+ seconds)
# Withk run nginx --image=nginx $do > nginx.yaml # (<2 seconds)Чи знали ви?
Розділ «Чи знали ви?»-
Термінал іспиту має попередньо встановлене kubectl completion, але ваших аліасів там не буде. Деякі кандидати запам’ятовують короткий скрипт налаштування аліасів, щоб набрати його на початку іспиту. Це займає 30 секунд і економить значно більше.
-
kubectl explain— ваш найкращий друг. Замість пошуку в документації:Terminal window k explain pod.spec.containersk explain deploy.spec.strategyЦе працює офлайн і швидше за браузер.
-
Ви можете запустити
kubectlз--helpдля будь-якої підкоманди:Terminal window k create --helpk run --helpk expose --helpПриклади у виводі
--helpчасто є саме тим, що вам потрібно.
Типові помилки
Розділ «Типові помилки»| Помилка | Проблема | Рішення |
|---|---|---|
| Не використовувати автодоповнення | Повільно, друкарські помилки | Завжди <TAB> |
Забувати -A для всіх просторів імен | Пропуск ресурсів | За замовчуванням використовуйте -A при пошуку |
| Набирати повні назви ресурсів | Повільно | Використовуйте скорочення: po, svc, deploy |
| Неправильний контекст | Робота в неправильному кластері | Завжди kx першим |
Не використовувати $do | Ручний набір dry-run | Експортуйте змінну |
Тест
Розділ «Тест»-
Що робить ця команда:
k get po -A -o wide?Відповідь
Виводить список усіх Подів у всіх просторах імен з розширеною інформацією (нода, IP тощо). `-A` — скорочення для `--all-namespaces`, `-o wide` показує додаткові стовпці. -
Як швидко згенерувати YAML Деплойменту без його створення?
Відповідь
`k create deploy nginx --image=nginx --dry-run=client -o yaml > deploy.yaml` Або з аліасом: `k create deploy nginx --image=nginx $do > deploy.yaml` -
Що потрібно зробити першим, починаючи нове питання іспиту?
Відповідь
Перемкнутися на правильний контекст. Кожне питання вказує, який кластер використовувати. Робота в неправильному кластері — типова помилка на іспиті. -
Яке скорочення для persistentvolumeclaims?
Відповідь
`pvc` — як у `k get pvc`
Практична вправа
Розділ «Практична вправа»Завдання: Налаштуйте свій термінал і перевірте покращення швидкості.
Підготовка:
# Add all configurations to ~/.bashrc (use the complete setup from Part 5)source ~/.bashrcТест швидкості:
- Засікіть час на отримання списку всіх Подів у всіх просторах імен
- Засікіть час на опис Поду (використовуйте автодоповнення)
- Засікіть час на генерацію YAML Деплойменту
- Засікіть час на перемикання контексту
Критерії успіху:
-
k get po -Aпрацює - Автодоповнення Tab працює для назв Подів
- Змінна
$doвстановлена - Можете перемкнути контекст за <2 секунди
Перевірка:
# Test aliask get no
# Test completion (should show options)k get <TAB><TAB>
# Test variableecho $do # Should output: --dry-run=client -o yaml
# Test YAML generationk run test --image=nginx $doПрактичні вправи
Розділ «Практичні вправи»Вправа 1: Тест швидкості — базові команди (Ціль: 30 секунд кожна)
Розділ «Вправа 1: Тест швидкості — базові команди (Ціль: 30 секунд кожна)»Засікайте час. Якщо будь-яка займає >30 секунд, практикуйтесь до автоматизму.
# 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 хвилина загалом)»# Setup: Create multiple contexts to practicekubectl config set-context practice-1 --cluster=kubernetes --user=kubernetes-adminkubectl config set-context practice-2 --cluster=kubernetes --user=kubernetes-adminkubectl config set-context practice-3 --cluster=kubernetes --user=kubernetes-admin
# TIMED DRILL: Switch between contexts as fast as possible# Start timer now!
kx practice-1kubectl config current-context # Verify
kx practice-2kubectl config current-context # Verify
kx practice-3kubectl config current-context # Verify
kx kubernetes-admin@kubernetes # Back to defaultkubectl config current-context # Verify
# Stop timer. Target: <1 minute for all 4 switches + verificationsВправа 3: Спринт генерації YAML (Ціль: 3 хвилини)
Розділ «Вправа 3: Спринт генерації YAML (Ціль: 3 хвилини)»Згенеруйте всі ці YAML-файли за допомогою змінної $do. Не створюйте ресурси, лише генеруйте файли.
# 1. Podk run nginx --image=nginx $do > pod.yaml
# 2. Deploymentk 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. ConfigMapk create cm my-config --from-literal=key=value $do > cm.yaml
# 6. Secretk create secret generic my-secret --from-literal=password=secret123 $do > secret.yaml
# Verify all files exist and are validls -la *.yamlkubectl apply -f . --dry-run=client
# Cleanuprm -f *.yamlВправа 4: Усунення неполадок — аліаси не працюють
Розділ «Вправа 4: Усунення неполадок — аліаси не працюють»Сценарій: Ваші аліаси перестали працювати. Діагностуйте та виправте.
# Setup: Break the aliasesunalias k 2>/dev/nullunset do
# Test: These should failk get nodes # Command not foundecho $do # Empty
# YOUR TASK: Fix without looking at the solution
# Verify fix worked:k get nodesecho $doРішення
# Option 1: Re-source bashrcsource ~/.bashrc
# Option 2: Manually set (if bashrc is broken)alias k=kubectlcomplete -o default -F __start_kubectl kexport do='--dry-run=client -o yaml'
# Verifyk get nodesecho $doВправа 5: Тест пам’яті на скорочені назви ресурсів
Розділ «Вправа 5: Тест пам’яті на скорочені назви ресурсів»Не підглядаючи в таблицю, напишіть команди зі скороченнями:
# 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 ____Відповіді
k get deployk get dsk get stsk get pvk get pvck get cmk get sak get ingk get netpolk get scВправа 6: Виклик — власний набір аліасів
Розділ «Вправа 6: Виклик — власний набір аліасів»Створіть власні аліаси для підвищення продуктивності для цих сценаріїв:
- Показати логи Поду з мітками часу
- Спостерігати за Подами в поточному просторі імен
- Отримати події, відсортовані за часом
- Зайти в Под через bash
- Прокинути порт на 8080
# 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:
# Timer starts NOW
# Step 1: Set up aliases (type from memory)alias k=kubectlcomplete -o default -F __start_kubectl kexport do='--dry-run=client -o yaml'export now='--force --grace-period=0'
# Step 2: Verify setupk get nodesecho $do
# Step 3: Check available contextskubectl config get-contexts
# Timer stop. Target: <2 minutesНаступний модуль
Розділ «Наступний модуль»Модуль 0.3: Vim для YAML — Необхідне налаштування Vim для ефективного редагування YAML-файлів.