Контекст и конфигурация
Отображение всех доступных контекстов:
kubectl config get-contexts
Переключение на контекст:
kubectl config use-context my-cluster-name
Отображение текущего контекста:
kubectl config current-context
Информация о кластере:
kubectl cluster-info
Проверка прав доступа (может ли пользователь создавать pods, deployments и т.д.):
kubectl auth can-i create pods --namespace=default
Namespace
Создание namespace:
kubectl create namespace my-namespace
Список namespace:
kubectl get namespaces
Установка namespace по умолчанию для kubectl:
kubectl config set-context --current --namespace=my-namespace
Удаление namespace (удаляет все ресурсы в namespace!):
kubectl delete namespace my-namespace
Pods
Создание pod из файла:
kubectl apply -f pod.yaml
Создание pod из образа напрямую:
kubectl run nginx --image=nginx
Получение списка всех pods:
kubectl get pods
Получение списка pods с подробной информацией:
kubectl get pods -o wide
Получение списка pods во всех namespaces:
kubectl get pods --all-namespaces
Детальная информация о pod:
kubectl describe pod my-pod
Удаление pod:
kubectl delete pod my-pod
Удаление всех pods в namespace:
kubectl delete pods --all
Выполнение команды внутри контейнера:
kubectl exec -it my-pod -- /bin/bash
Выполнение команды в конкретном контейнере multi-container pod:
kubectl exec -it my-pod -c my-container -- /bin/bash
Deployment
Создание deployment:
kubectl apply -f deployment.yaml
Получение списка deployments:
kubectl get deployments
Информация о deployment:
kubectl describe deployment my-deployment
Обновление deployment (если изменился файл):
kubectl apply -f deployment.yaml
Редактирование deployment напрямую:
kubectl edit deployment my-deployment
Удаление deployment:
kubectl delete deployment my-deployment
Перезапуск deployment (при проблемах или для применения новых переменных):
kubectl rollout restart deployment my-deployment
История обновлений deployment:
kubectl rollout history deployment my-deployment
Откат к предыдущей версии deployment:
kubectl rollout undo deployment my-deployment
Откат к конкретной версии:
kubectl rollout undo deployment my-deployment --to-revision=2
Services
Создание service:
kubectl apply -f service.yaml
Получение списка services:
kubectl get services
Информация о service:
kubectl describe service my-service
Удаление service:
kubectl delete service my-service
Быстрое создание service для deployment:
kubectl expose deployment my-deployment --port=80 --target-port=8080
Список всех endpoints (для проверки подключенных pods к service):
kubectl get endpoints
ConfigMaps и Secrets
Создание configmap из файла:
kubectl apply -f configmap.yaml
Создание configmap из пары ключ-значение:
kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
Создание configmap из файла(ов):
kubectl create configmap my-config --from-file=config-file.properties
Получение списка configmaps:
kubectl get configmaps
Просмотр содержимого configmap:
kubectl describe configmap my-config
Создание secret из файла:
kubectl apply -f secret.yaml
Создание secret типа generic:
kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=secret
Создание secret из файла(ов):
kubectl create secret generic my-secret --from-file=./secret-file.txt
Получение списка secrets:
kubectl get secrets
Просмотр метаданных secret (содержимое не будет расшифровано):
kubectl describe secret my-secret
Расшифровка и просмотр содержимого Secret:
kubectl get secret my-secret -o jsonpath='{.data.username}' | base64 --decode
Логи и отладка
Просмотр логов pod:
kubectl logs my-pod
Просмотр логов конкретного контейнера в pod:
kubectl logs my-pod -c my-container
Просмотр логов с возможностью следить за обновлениями:
kubectl logs -f my-pod
Просмотр логов с ограничением по времени:
kubectl logs --since=1h my-pod
Просмотр логов завершившегося pod:
kubectl logs my-pod --previous
Отладочный pod с базовыми инструментами:
kubectl run debug --rm -it --image=busybox -- sh
Определение причины отказа pod:
kubectl describe pod my-pod
kubectl get events --sort-by=.metadata.creationTimestamp
Порты и проксирование
Проброс порта из pod на локальную машину:
kubectl port-forward my-pod 8080:80
Проброс порта из service на локальную машину:
kubectl port-forward service/my-service 8080:80
Проброс порта из deployment на локальную машину:
kubectl port-forward deployment/my-deployment 8080:80
Запуск kubectl в режиме прокси (дает доступ к API Kubernetes):
kubectl proxy --port=8080
Использование API через прокси:
curl http://localhost:8080/api/v1/namespaces/default/pods/
Ресурсы
Просмотр всех ресурсов в namespace:
kubectl get all
Просмотр всех ресурсов во всех namespaces:
kubectl get all --all-namespaces
Удаление всех ресурсов в namespace (pods, services, deployments, etc.):
kubectl delete all --all
Просмотр потребления ресурсов pods:
kubectl top pods
Просмотр потребления ресурсов узлов:
kubectl top nodes
Просмотр quota и limits:
kubectl describe resourcequotas
kubectl describe limitranges
Масштабирование
Масштабирование deployment до 3 реплик:
kubectl scale deployment my-deployment --replicas=3
Автоматическое масштабирование на основе CPU (создает HorizontalPodAutoscaler):
kubectl autoscale deployment my-deployment --min=2 --max=5 --cpu-percent=80
Просмотр статуса HorizontalPodAutoscaler:
kubectl get hpa
Kustomize
Предварительный просмотр ресурсов, которые будут созданы:
kubectl kustomize ./my-kustomize-dir
Применение kustomize overlay:
kubectl apply -k ./my-kustomize-dir
Удаление ресурсов, созданных через kustomize:
kubectl delete -k ./my-kustomize-dir
Helm
Добавление репозитория Helm:
helm repo add [name] [url]
Обновление репозиториев:
helm repo update
Поиск chart в репозитории:
helm search repo [keyword]
Установка chart:
helm install [release-name] [chart]
Установка chart с переопределенными значениями:
helm install [release-name] [chart] --values=my-values.yaml
Список установленных релизов:
helm list
Обновление релиза:
helm upgrade [release-name] [chart]
Удаление релиза:
helm uninstall [release-name]
Операции с узлами
Список узлов кластера:
kubectl get nodes
Подробная информация об узле:
kubectl describe node [node-name]
Пометка узла как неиспользуемого (pods не будут размещаться на этом узле):
kubectl cordon [node-name]
Возвращение узла в нормальное состояние:
kubectl uncordon [node-name]
Слив нагрузки с узла (выселение pods):
kubectl drain [node-name] --ignore-daemonsets
Полезные дополнительные команды
Проверка статуса компонентов кластера:
kubectl get componentstatuses
Генерация YAML файла на основе образа (без запуска):
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
Генерация YAML файла для deployment (без запуска):
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
Вывод MetricServer (если установлен):
kubectl top pods --all-namespaces
Временное изменение образа в deployment (без редактирования YAML):
kubectl set image deployment/my-deployment my-container=new-image:tag