При работе с Kubernetes очень важно знать хотя бы основные команды. В этой статье вы найдете команды, которые чаще всего требуются при работе с кластером. Зная эти команды, вы сможете избавиться от необходимости писать файлы определений для простых объектов и создавать объекты с помощью этих файлов. Вместо этого вы можете использовать команды и видеть, как объекты создаются за доли секунды.
В этой статье вы увидите не только команды для получения сведений об объектах, но и команды для их создания. Статья посвящена исключительно командам, а не их описанию. Если вы хотите подробно изучить каждую команду, вы можете посетить официальную документацию здесь.
Эта статья станет для вас шпаргалкой по основным объектам в кластере Kubernetes.
Предварительные требования
- Базовое понимание Kubernetes
- Кластер Kubernetes с как минимум 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на инстансах AWS Ubuntu EC2.
Что мы увидим?
- Важные команды
- Информация о кластере
- Информация о конфигурации
- Пространство имён
- Pod
- Развертывания
- Службы
- Управление объектами из файлов .yaml/.yml
Важные команды
Информация о кластере
Вывод информации о версии клиента и сервера
kubectl version
Вывод списка поддерживаемых ресурсов API на сервере
kubectl api-resources
Вывод списка поддерживаемых версий API на сервере в формате «группа/версия»
kubectl api-versions
Вывести информацию о кластере
kubectl cluster-info
Получить список узлов в кластере
kubectl get nodes
Получить информацию о главном узле
kubectl get nodes master -o wide
Получить подробную информацию о главных узлах
kubectl describe nodes master
Информация о конфигурации
Отобразить объединенные настройки kubeconfig
kubectl config view
Просмотреть текущий контекст
kubectl config current-context
Установить контекст, где kubernetes-admin@kubernetes — это имя контекста
kubectl config use-context kubernetes-admin@kubernetes
Отобразить кластеры, определенные в kubeconfig
kubectl config get-clusters
Описать один или несколько контекстов
kubectl config get-contexts
Пространства имён
Получить все пространства имён
kubectl get namespaces
Получить информацию о пространстве имён в формате yaml
kubectl get namespaces -o yaml
Описать пространство имён по умолчанию
kubectl describe namespace default
Создать новое пространство имен
kubectl create namespace my-namespace
Удалить пространство имен
kubectl delete namespace my-namespace
Поды
Получить поды из текущего пространства имен
kubectl get pods
Получить поды из всех пространств имен
kubectl get pods --all-namespaces
Получить поды из указанного пространства имен
kubectl get pods -namespace=my-namespace
Создать под
kubectl run my-pod-1 --image=nginx:latest --dry-run
посмотреть, как будет обработан под
kubectl run my-pod-1 --image=nginx:latest --dry-run=client
Создать под в указанном пространстве имен
kubectl run my-pod-2 --image=nginx:latest --namespace=my-namespace
Создать под с меткой
kubectl run nginx --image=nginx -l --labels=app=test
Получить все поды с выводом меток
kubectl get pods --show-labels
Получить поды с расширенным/широким выводом
kubectl get pods -o wide
Вывести список подов в отсортированном порядке
kubectl get pods --sort-by=.metadata.name
Получить логи пода
kubectl logs my-pod-1
Получить поды в указанном пространстве имен с расширенным/полным выводом
kubectl get pods my-pod-2 --namespace=my-namespace -o wide
Получить журналы пода в указанном пространстве имен
kubectl logs my-pod-2 --namespace=my-namespace
Описать под
kubectl describe pod my-pod-1
Описать под в указанном пространстве имен
kubectl describe pods my-pod-1 --namespace=my-namespace
Удалить под из текущего пространства имен
kubectl delete pod my-pod-1
Удалить под из указанного пространства имен
kubectl delete pods my-pod-1 --namespace=my-namespace
Развертывания
Получить список развертываний из текущего пространства имен
kubectl get deployments
Получить список развертываний из указанного пространства имен
kubectl get deployments --namespace=my-namespace
Создать развертывание
kubectl create deployment my-deployment-1 --image=nginx
Получить указанное развертывание
kubectl get deployment my-deployment-1
Получить указанное развертывание с его метками
kubectl get deployment my-deployment-1 --show-labels
Описать указанное развертывание
kubectl describe deployments my-deployment-1
Получить подробную информацию о развертывании в формате YAML
kubectl get deployment my-deployment-1 -o yaml
Изменить образ в существующем развертывании
kubectl set image deployment my-deployment-1 nginx=nginx:1.16.1
Просмотреть историю развертываний
kubectl rollout history deployment my-deployment-1
Отменить предыдущее развертывание
kubectl rollout undo deployment my-deployment-1
Вернуться к определенной версии в истории развертываний
kubectl rollout undo deployment my-deployment-1 --to-revision=2
Показать статус развертывания
kubectl rollout status deployment my-deployment-1
Перезапустить ресурс
kubectl rollout restart deployment my-deployment-1
Масштабировать развертывание до 3
kubectl scale --replicas=3 deployment my-deployment-1
Масштабировать с текущего количества до желаемого
kubectl scale --current-replicas=3 --replicas=5 deployment my-deployment-1
Это создаст HPA (Horizontal Pod Autoscaler)
kubectl autoscale deployment my-deployment-1 --min=2 --max=10
Сервисы
Сначала создайте под с меткой app=myapp.
Затем:
Создайте под с меткой
kubectl run my-pod --image=nginx --labels=app=myapp
Создайте сервис типа NodePort, который будет использовать метки пода в качестве селектора, но нам нужно указать тип, поэтому сначала создайте файл определения, а затем создайте сервис
kubectl expose pod my-pod --port=80 --name nginx-service --type=NodePort --dry-run=client -o yaml
Создайте сервис, который будет иметь тип NodePort, но у него не будет селектора my-app
kubectl create service nodeport nginx --tcp=80:80 --node-port=30080 --dry-run=client -o yaml
Получить сервисы из текущего контекста
kubectl get service
Получить подробную информацию о сервисах
kubectl get service -o wide
Получить сервисы с метками
kubectl get service --show-labels
Получить сервисы из всех пространств имен
kubectl get services --all-namespaces
Описать сервис, чтобы узнать о нем больше
kubectl describe service nginx-service
Получить конкретный сервис
kubectl get service nginx-service
Удалить сервис
kubectl delete service nginx-service
Управление объектами из файлов .yaml/.yml
Сначала создайте файл определения для под
Создать файл определения для под
kubectl run mypod --image=nginx --dry-run=client -o yaml > my-pod.yml
Создать объект
kubectl create -f my-pod.yml
Удалить объект
kubectl delete -f my-pod.yml
Заключение
В этой статье мы рассмотрели важные команды, необходимые при работе с Kubernetes. Команды в Kubernetes не ограничиваются только этими командами, но эти команды являются «обязательными к знанию» командами.