Привет, Minikube
Это руководство демонстрирует, как запустить простое приложение в Kubernetes с помощью minikube. Для этого используется образ контейнера с NGINX, который выводит обратно текст всех запросов.
Цели
- Развернуть простое приложение в minikube.
- Запустить приложение.
- Посмотреть логи приложения.
Подготовка к работе
Руководство подразумевает, что вы уже настроили minikube.
См. шаг 1 в документации minikube start для инструкций по его установке.
Примечание
Выполните только инструкции из шага 1 «Установка». Остальные шаги описаны на этой странице.Вам также потребуется установить kubectl.
См. Установку инструментов для инструкций по его установке.
Создание кластера minikube
minikube start
Примечание
Командаminikube start создаёт кластер с одним узлом. Этот узел одновременно выполняет функции управляющего слоя и рабочего узла. В отличие от него, во многих production-кластерах Kubernetes узлы управляющего слоя обычно изолированы от рабочих узлов с помощью
ограничений (taints) или полностью скрыты от пользователя.
Проверка состояния кластера minikube
Проверьте состояние кластера minikube, чтобы убедиться, что все компоненты работают.
minikube status
В выводе команды все компоненты должны иметь состояние Running или Configured, как в примере ниже:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Запуск панели (dashboard)
Откройте панель Kubernetes. Это можно сделать двумя способами:
Откройте новый терминал и запустите:
# Запустите в новом терминале и не закрывайте его.
minikube dashboard
Теперь можно вернуться к терминалу, где вы запускали minikube start.
Примечание
<p>Команда <code>dashboard</code> активирует дополнение dashboard и открывает прокси в веб-браузере по умолчанию.
В этой панели можно создавать такие Kubernetes-ресурсы, как Deployment и Service.
Чтобы узнать, как получить URL панели, не запуская браузер непосредственно из терминала, см. вкладку «Копирование URL для запуска».
По умолчанию панель доступна только из внутренней виртуальной сети Kubernetes.
Команда dashboard создаёт временный прокси, чтобы панель была доступна извне внутренней виртуальной сети Kubernetes.
Чтобы остановить работу прокси, выполните Ctrl+C для завершения процесса.
Когда команда завершит работу, панель останется запущенной внутри кластера Kubernetes.
Вы можете снова выполнить команду dashboard, чтобы создать новую прокси для доступа к панели.
Если вы не хотите, чтобы minikube запускал веб-браузер, выполните команду dashboard с флагом
--url. В этом случае minikube выведет URL, который вы можете открыть в любом браузере.
Откройте новый терминал и запустите:
# Запустите в новом терминале и не закрывайте его.
minikube dashboard --url
Теперь можно открыть этот URL и вернуться к терминалу, где вы запускали minikube start.
Создание деплоймента
Под Kubernetes — это группа из одного или более контейнеров, связанных друг с другом для удобного администрирования и организации сети. В данном руководстве под включает в себя один контейнер. Деплоймент (Deployment) в Kubernetes проверяет здоровье пода и перезагружает контейнер пода в случае, если он прекратил работу. Деплойменты — рекомендуемый способ создания и масштабирования подов.
-
Используйте команду
kubectl createдля создания деплоймента, который будет управлять подом. Под запустит контейнер с указанным Docker-образом.# Запуск тестового образа контейнера с веб-сервером kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.53 -- /agnhost netexec --http-port=8080 -
Посмотреть информацию о Deployment:
kubectl get deploymentsВывод будет примерно следующим:
NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 1m(Может потребоваться некоторое время, прежде чем под станет доступен. Если вы видите «0/1», повторите попытку через несколько секунд.)
-
Посмотреть информацию о поде:
kubectl get podsВывод будет примерно следующим:
NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m -
Посмотреть события кластера:
kubectl get events -
Посмотреть конфигурацию
kubectl:kubectl config view -
Посмотреть логи приложения для контейнера в поде (замените имя пода на полученное с помощью
kubectl get pods).Примечание
Заменитеhello-node-5f76cf6ccf-br9b5в командеkubectl logsна имя пода из вывода командыkubectl get pods.kubectl logs hello-node-5f76cf6ccf-br9b5Вывод будет примерно следующим:
I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080 I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081
Создание сервиса
По умолчанию под доступен только при обращении по его внутреннему IP-адресу внутри кластера Kubernetes. Чтобы сделать контейнер hello-node доступным вне виртуальной сети Kubernetes, необходимо представить под как сервис Service Kubernetes.
Предупреждение
В контейнере agnhost есть конечная точка/shell, которая полезна для
отладки, но открывать к ней доступ из публичного интернета опасно. Не запускайте этот контейнер
в кластере, доступном из интернета, или в production-кластере.
-
Сделать под доступным для публичного интернета можно с помощью команды
kubectl expose:kubectl expose deployment hello-node --type=LoadBalancer --port=8080Флаг
--type=LoadBalancerпоказывает, что сервис должен быть виден вне кластера.Код приложения в тестовом образе прослушивает только TCP-порт 8080. Если вы сделали приложение доступным по другому порту командой
kubectl expose, клиенты не смогут подключиться к этому порту. -
Посмотреть только что созданный сервис:
kubectl get servicesВывод будет примерно следующим:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23mДля облачных провайдеров, поддерживающих балансировщики нагрузки, для доступа к сервису будет предоставлен внешний IP адрес. В Minikube тип
LoadBalancerделает сервис доступным при обращении с помощью командыminikube service. -
Выполните следующую команду:
minikube service hello-nodeОткроется окно браузера, в котором запущено ваше приложение и выводится его ответ.
Активация дополнений
В minikube есть набор встроенных дополнений (addons), которые могут быть включены, выключены и открыты в локальном окружении Kubernetes.
-
Отобразить текущие поддерживаемые дополнения:
minikube addons listВывод будет примерно следующим:
addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled helm-tiller: disabled ingress: disabled ingress-dns: disabled logviewer: disabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled storage-provisioner-gluster: disabled -
Включить дополнение, например,
metrics-server:minikube addons enable metrics-serverВывод будет примерно следующим:
The 'metrics-server' addon is enabled -
Увидеть под и сервис, созданные при установке этого дополнения:
kubectl get pod,svc -n kube-systemВывод будет примерно следующим:
NAME READY STATUS RESTARTS AGE pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m pod/metrics-server-67fb648c5 1/1 Running 0 26s pod/etcd-minikube 1/1 Running 0 34m pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-apiserver-minikube 1/1 Running 0 34m pod/kube-controller-manager-minikube 1/1 Running 0 34m pod/kube-proxy-rnlps 1/1 Running 0 34m pod/kube-scheduler-minikube 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s -
Проверить вывод
metrics-server:kubectl top podsВывод будет примерно следующим:
NAME CPU(cores) MEMORY(bytes) hello-node-ccf4b9788-4jn97 1m 6MiЕсли появится следующее сообщение, подождите и повторите попытку:
error: Metrics API not available -
Отключить
metrics-server:minikube addons disable metrics-serverВывод будет примерно следующим:
metrics-server was successfully disabled
Очистка
Теперь вы можете освободить ресурсы, созданные в кластере:
kubectl delete service hello-node
kubectl delete deployment hello-node
Остановите кластер minikube:
minikube stop
Удалите виртуальную машину minikube (опционально):
# Необязательно
minikube delete
Если вы планируете использовать minikube в дальнейшем, чтобы больше узнать про Kubernetes, удалять инструмент не нужно.
Заключение
На этой странице рассмотрены основные шаги создания и запуска кластера minikube. Теперь вы готовы развёртывать приложения.
Что дальше
- Руководство по деплою первого приложения в Kubernetes с kubectl.
- Больше об объектах Deployment.
- Больше о развёртывании приложения.
- Больше об объектах Service.