Learning Platform
Глоссарий Troubleshooting
Урок 21.03 · 22 мин
Средний
CKADkubectlaliasesvimproductivity

kubectl aliases и productivity hacks

Каждая секунда на экзамене считается. Если вы печатаете kubectl get pods --namespace=production --output=yaml целиком 15 раз за экзамен — это 5 минут потраченных на typing. С правильными aliases и template tricks эти же 5 минут уходят на actual thinking.

В этом уроке — конкретный setup, который выполняется за 60 секунд в начале экзамена и экономит 15-20 минут на typing speed.


.bashrc и история команд: персистентная настройка shell

Setup aliases в начале экзамена

Первое что делаете когда заходите на экзаменационную VM:

# В .bashrc или сразу в shell
alias k=kubectl
export do='--dry-run=client -o yaml'
export now='--grace-period=0 --force'

Что это даёт:

  • k get pods вместо kubectl get pods — 7 символов экономии на каждой команде.
  • k run nginx --image=nginx $do > pod.yaml — генерация template файла за 1 строку.
  • k delete pod nginx $now — мгновенное удаление без graceful shutdown.
TIP

Аналогично можно добавить alias kn='kubectl config set-context --current --namespace' для быстрого переключения namespace: kn target-ns. Но многие предпочитают помнить полную команду — на экзамене стандартный repertoire важнее экзотики.


kubectl autocomplete

Bash autocomplete для kubectl — критично. По умолчанию НЕ настроен в экзаменационной VM:

source <(kubectl completion bash)
complete -F __start_kubectl k

Что работает после этого:

  • k get po<TAB>k get pods
  • k get pod <TAB> → список всех pods для completion
  • k describe pod my-<TAB> → completion имени pod
  • k -n kube-<TAB>k -n kube-system

Без autocomplete — вы печатаете полные имена pods и namespaces. С — выбираете из списка через TAB. Экономия колоссальная.


Vim setup для YAML

YAML очень требователен к отступам. Vim по умолчанию использует tab-based indent, что для YAML — гарантия error. Setup:

# ~/.vimrc
set ts=2 sw=2 et
set paste
set number
  • ts=2 — tabstop, ширина tab = 2 пробела
  • sw=2 — shiftwidth, отступ при auto-indent = 2
  • et — expandtab, заменяет tab на пробелы
  • paste — отключает auto-indent при paste (критично для копирования из docs)
  • number — нумерация строк (видно при ошибке)
WARNING

Без set paste копирование YAML из kubernetes.io/docs приведёт к разрушенным отступам — vim применит свой indent поверх скопированного. Результат — invalid YAML, syntax error при apply.

Внутри vim во время редактирования:

  • :set paste — toggle paste mode перед вставкой
  • :set nopaste — выключить после
  • Esc:wq — сохранить и выйти
  • Esc:q! — выйти без сохранения

Speed tactics: kubectl create generators

Самый мощный приём CKAD — генерация YAML templates через kubectl create ... --dry-run=client -o yaml. Это даёт стартовый файл, который дальше редактируете в vim:

# Pod
k run nginx --image=nginx $do > pod.yaml

# Pod с командой и аргументами
k run nginx --image=nginx --command -- sleep 3600 $do > pod.yaml

# Pod с env переменной
k run nginx --image=nginx --env="KEY=val" $do > pod.yaml

# Deployment
k create deploy web --image=nginx --replicas=3 $do > deploy.yaml

# Service: ClusterIP
k expose deploy web --port=80 --target-port=8080 $do > svc.yaml

# Service: NodePort
k expose deploy web --port=80 --type=NodePort $do > svc-np.yaml

# ConfigMap из literal
k create configmap app-cm --from-literal=KEY=val --from-literal=KEY2=val2 $do > cm.yaml

# ConfigMap из файла
k create configmap app-cm --from-file=config.yaml $do > cm.yaml

# Secret generic
k create secret generic db-pwd --from-literal=password=secret123 $do > secret.yaml

# Secret docker-registry (image pull)
k create secret docker-registry regcred --docker-server=registry.io --docker-username=user --docker-password=pwd $do > regcred.yaml

# Secret tls
k create secret tls my-tls --cert=tls.crt --key=tls.key $do > tls.yaml

# Job
k create job hello --image=busybox -- echo hi $do > job.yaml

# CronJob
k create cronjob hello --schedule="*/5 * * * *" --image=busybox -- echo hi $do > cj.yaml

# Namespace
k create ns production $do > ns.yaml

# ServiceAccount
k create sa my-sa $do > sa.yaml

# Role + RoleBinding
k create role pod-reader --verb=get,list,watch --resource=pods $do > role.yaml
k create rolebinding pod-reader-bind --role=pod-reader --serviceaccount=default:my-sa $do > rb.yaml

# Ingress
k create ingress my-ing --rule="example.com/=svc:80" $do > ing.yaml
TIP

После генерации template — открываете в vim, добавляете специфичные поля (resources, securityContext, volumes), сохраняете, k apply -f file.yaml. Это быстрее чем писать YAML руками с нуля.


kubectl explain для навигации полей

Когда забыли точное имя поля — kubectl explain мгновенно даёт схему:

# Базовое
k explain pod
k explain pod.spec
k explain pod.spec.containers
k explain pod.spec.containers.resources

# Рекурсивно — всё дерево
k explain pod.spec.containers.securityContext --recursive
k explain networkpolicy.spec --recursive

Это быстрее чем kubernetes.io/docs — нет переключения вкладок, нет search, мгновенный ответ от API server.

explain vs docs: когда что использовать
kubectl explainБыстрая навигация по полям YAML. Возвращает: тип, описание, обязательность. Идеально когда знаете концепцию но забыли syntax поля. Латентность — миллисекунды.
kubernetes.io/docsКонцептуальная документация, примеры использования. Tutorial-style контент. Идеально когда нужна готовая копия YAML для нового ресурса (NetworkPolicy templates).
Пример useexplain полезен: забыли что использовать readinessProbe.httpGet или readinessProbe.exec. k explain pod.spec.containers.readinessProbe.
Пример usedocs полезны: нужен NetworkPolicy с egress на CIDR и DNS port — копируете example из docs, адаптируете.

Vim для quick edit

Два workflow для редактирования ресурсов:

Workflow A: dump → edit → apply

k get pod nginx -o yaml > pod.yaml
vim pod.yaml         # редактируете
k apply -f pod.yaml

Workflow B: in-place edit

k edit pod nginx

kubectl edit открывает vim прямо в системе с уже загруженным YAML. Сохраняете — apply автоматический.

WARNING

kubectl edit НЕ работает с immutable полями. Если попытаться изменить metadata.name или spec.selector — apply провалится. В этом случае: dump, удалить старый, применить новый.


Resource shortcuts (короткие имена)

kubectl поддерживает короткие имена ресурсов. На экзамене это must-know:

ДлинноеКороткое
podspo
servicessvc
deploymentsdeploy
replicasetsrs
configmapscm
secrets(нет shortcut)
namespacesns
persistentvolumespv
persistentvolumeclaimspvc
serviceaccountssa
networkpoliciesnetpol
ingressesing
endpointsep
nodesno
eventsev
daemonsetsds
statefulsetssts
horizontalpodautoscalershpa
jobsjob (full)
cronjobscj

Использование: k get po -A, k describe svc my-svc, k get netpol -n target.


Killer combo: расширенные aliases

Многие сдающие добавляют функциональные aliases:

alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgd='kubectl get deployments'
alias kgn='kubectl get nodes'
alias kgns='kubectl get namespaces'
alias kga='kubectl get all'
alias kdp='kubectl describe pod'
alias kds='kubectl describe service'
alias kdd='kubectl describe deployment'
alias kaf='kubectl apply -f'
alias kdel='kubectl delete'
TIP

Не злоупотребляйте. 5-10 aliases — продуктивно. 30 aliases — путаница на стрессе экзамена. Лучше отлично знать стандартные k get, k describe, k apply -f, k delete, и пару productivity.


Полный bootstrap script для экзамена

Скопируйте и выполните в начале экзамена (одной командой):

cat >> ~/.bashrc << 'EOF'
alias k=kubectl
export do='--dry-run=client -o yaml'
export now='--grace-period=0 --force'
source <(kubectl completion bash)
complete -F __start_kubectl k
EOF
source ~/.bashrc

cat > ~/.vimrc << 'EOF'
set ts=2 sw=2 et
set paste
set number
EOF

После этого среда настроена. Тратите 60 секунд — экономите 15+ минут на typing.


Killer-моменты productivity

  • alias k=kubectl — обязательно. Без него теряете 5+ минут на typing за экзамен.
  • $do env variable для --dry-run=client -o yaml — самый частый pattern.
  • source <(kubectl completion bash); complete -F __start_kubectl k — autocomplete для alias.
  • set paste в vimrc — иначе ломаются copy-paste из docs.
  • kubectl create ... $do > file.yaml — генерация template быстрее чем писать YAML с нуля.
  • kubectl explain ... --recursive — быстрее чем docs для schema.

Проверка знанийKnowledge check
Зачем нужно `complete -F __start_kubectl k` после `source <(kubectl completion bash)`?
ОтветAnswer
kubectl completion bash настраивает autocomplete для команды 'kubectl'. Но мы используем alias k=kubectl. По умолчанию bash не переносит completion на alias. complete -F __start_kubectl k явно регистрирует функцию completion для команды k. После этого k get po<TAB> работает так же как kubectl get po<TAB>. Это must-have setup на экзамене.
Проверка знанийKnowledge check
Сгенерировать YAML template для Deployment web с 3 replicas, image nginx, БЕЗ применения. Команда?
ОтветAnswer
k create deploy web --image=nginx --replicas=3 --dry-run=client -o yaml > deploy.yaml. Или с alias: k create deploy web --image=nginx --replicas=3 $do > deploy.yaml. Далее открываете deploy.yaml в vim, добавляете нужные поля (resources, securityContext, volumes), применяете k apply -f deploy.yaml. Это в 3-5 раз быстрее чем писать YAML руками.
Проверка знанийKnowledge check
Что делает `set paste` в vimrc и почему критично на экзамене?
ОтветAnswer
set paste отключает auto-indent при вставке текста в vim. Без него: копируете YAML с kubernetes.io, paste в vim — vim применяет свой indent поверх существующего, ломая YAML. Например, 2-пробельный отступ становится 4-пробельным после второй строки. Результат — invalid YAML, ошибка при kubectl apply. С set paste vim просто вставляет текст as-is, сохраняя оригинальные отступы.
Проверка знанийKnowledge check
Нужно создать Secret типа docker-registry для image pull из private registry. Команда генерации YAML без apply?
ОтветAnswer
k create secret docker-registry regcred --docker-server=registry.example.com --docker-username=user --docker-password=pwd [email protected] --dry-run=client -o yaml > regcred.yaml. Затем в Pod spec добавить imagePullSecrets с name: regcred. Без $do — secret создаётся сразу. С $do — генерируется YAML файл для дальнейшего применения.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 5. Какие aliases/env variables — must-have setup в начале экзамена?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5