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.
Аналогично можно добавить 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 podsk get pod <TAB>→ список всех pods для completionk describe pod my-<TAB>→ completion имени podk -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 = 2et— expandtab, заменяет tab на пробелыpaste— отключает auto-indent при paste (критично для копирования из docs)number— нумерация строк (видно при ошибке)
Без 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
После генерации 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.
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 автоматический.
kubectl edit НЕ работает с immutable полями. Если попытаться изменить metadata.name или spec.selector — apply провалится. В этом случае: dump, удалить старый, применить новый.
Resource shortcuts (короткие имена)
kubectl поддерживает короткие имена ресурсов. На экзамене это must-know:
| Длинное | Короткое |
|---|---|
| pods | po |
| services | svc |
| deployments | deploy |
| replicasets | rs |
| configmaps | cm |
| secrets | (нет shortcut) |
| namespaces | ns |
| persistentvolumes | pv |
| persistentvolumeclaims | pvc |
| serviceaccounts | sa |
| networkpolicies | netpol |
| ingresses | ing |
| endpoints | ep |
| nodes | no |
| events | ev |
| daemonsets | ds |
| statefulsets | sts |
| horizontalpodautoscalers | hpa |
| jobs | job (full) |
| cronjobs | cj |
Использование: 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'
Не злоупотребляйте. 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 за экзамен.$doenv 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.