Шпаргалка по командам Kubernetes

Контекст и конфигурация

Отображение всех доступных контекстов:

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