--- title: Привет, Minikube content_type: tutorial weight: 5 menu: main: title: "Начало" weight: 10 post: >

Готовы приступить к делу? Создайте простой кластер Kubernetes и запустите в нём тестовое приложение.

card: name: tutorials weight: 10 --- Это руководство демонстрирует, как запустить простое приложение в Kubernetes с помощью minikube. Для этого используется образ контейнера с NGINX, который выводит обратно текст всех запросов. ## {{% heading "objectives" %}} * Развернуть простое приложение в minikube. * Запустить приложение. * Посмотреть логи приложения. ## {{% heading "prerequisites" %}} Руководство подразумевает, что вы уже настроили `minikube`. См. документацию [minikube start](https://minikube.sigs.k8s.io/docs/start/) для инструкций по его установке. Вам также потребуется установить `kubectl`. См. [Установку и настройку kubectl](/ru/docs/tasks/tools/install-kubectl/) для инструкций по его установке. ## Создание кластера minikube ```shell minikube start ``` ## Запуск панели (dashboard) Откройте панель Kubernetes. Это можно сделать двумя способами: {{< tabs name="dashboard" >}} {{% tab name="Запуск в браузере" %}} Откройте **новый** терминал и запустите: ```shell # Запустите в новом терминале и не закрывайте его. minikube dashboard ``` Теперь можно вернуться к терминалу, где вы запускали `minikube start`. {{< note >}} Команда `dashboard` активирует дополнение dashboard и открывает прокси в веб-браузере по умолчанию. В этой панели можно создавать такие Kubernetes-ресурсы, как Deployment и Service. Если вы работаете в окружении с правами root, см. вкладку «Копирование URL для запуска». По умолчанию панель доступна только из внутренней виртуальной сети Kubernetes. Команда `dashboard` создаёт временный прокси, чтобы панель была доступна извне внутренней виртуальной сети Kubernetes. Чтобы остановить работу прокси, выполните `Ctrl+C` для завершения процесса. Когда команда завершит работу, панель останется запущенной внутри кластера Kubernetes. Вы можете снова выполнить команду `dashboard`, чтобы создать новую прокси для доступа к панели. {{< /note >}} {{% /tab %}} {{% tab name="Копирование URL для запуска" %}} Если вы не хотите, чтобы minikube запускал веб-браузер, выполните команду `dashboard` с флагом `--url`. В этом случае `minikube` выведет URL, который вы можете открыть в любом браузере. Откройте **новый** терминал и запустите: ```shell # Запустите в новом терминале и не закрывайте его. minikube dashboard --url ``` Теперь можно вернуться к терминалу, где вы запускали `minikube start`. {{% /tab %}} {{< /tabs >}} ## Создание деплоймента [*Под*](/docs/concepts/workloads/pods/pod/) Kubernetes — это группа из одного или более контейнеров, связанных друг с другом для удобного администрирования и организации сети. В данном руководстве под включает в себя один контейнер. Деплоймент ([*Deployment*](/docs/concepts/workloads/controllers/deployment/)) в Kubernetes проверяет здоровье пода и перезагружает контейнер пода в случае, если он прекратил работу. Деплойменты — рекомендуемый способ создания и масштабирования подов. 1. Используйте команду `kubectl create` для создания деплоймента, который будет управлять подом. Под запустит контейнер с указанным Docker-образом. ```shell # Запуск тестового образа контейнера с веб-сервером kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080 ``` 1. Посмотреть информацию о Deployment: ```shell kubectl get deployments ``` Вывод будет примерно следующим: ```shell NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-node 1 1 1 1 1m ``` 1. Посмотреть информацию о поде: ```shell kubectl get pods ``` Вывод будет примерно следующим: ```shell NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m ``` 1. Посмотреть события кластера: ```shell kubectl get events ``` 1. Посмотреть конфигурацию `kubectl`: ```shell kubectl config view ``` {{< note >}} Больше информации о командах `kubectl` см. в [обзоре kubectl](/ru/docs/reference/kubectl/). {{< /note >}} ## Создание сервиса По умолчанию под доступен только при обращении по его внутреннему IP-адресу внутри кластера Kubernetes. Чтобы сделать контейнер `hello-node` доступным вне виртуальной сети Kubernetes, необходимо представить под как сервис [*Service*](/docs/concepts/services-networking/service/) Kubernetes. 1. Сделать под доступным для публичного интернета можно с помощью команды `kubectl expose`: ```shell kubectl expose deployment hello-node --type=LoadBalancer --port=8080 ``` Флаг `--type=LoadBalancer` показывает, что сервис должен быть виден вне кластера. Код приложения в тестовом образе прослушивает только TCP-порт 8080. Если вы сделали приложение доступным по другому порту командой `kubectl expose`, клиенты не смогут подключиться к этому порту. 2. Посмотреть только что созданный сервис: ```shell kubectl get services ``` Вывод будет примерно следующим: ```shell NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 443/TCP 23m ``` Для облачных провайдеров, поддерживающих балансировщики нагрузки, для доступа к сервису будет предоставлен внешний IP адрес. В Minikube тип `LoadBalancer` делает сервис доступным при обращении с помощью команды `minikube service`. 3. Выполните следующую команду: ```shell minikube service hello-node ``` Откроется окно браузера, в котором запущено ваше приложение и выводится его ответ. ## Активация дополнений В minikube есть набор встроенных дополнений ({{< glossary_tooltip text="addons" term_id="addons" >}}), которые могут быть включены, выключены и открыты в локальном окружении Kubernetes. 1. Отобразить текущие поддерживаемые дополнения: ```shell minikube addons list ``` Вывод будет примерно следующим: ``` addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled heapster: 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 ``` 2. Включить дополнение, например, `metrics-server`: ```shell minikube addons enable metrics-server ``` Вывод: ```shell metrics-server was successfully enabled ``` 3. Посмотреть Pod и Service, которые вы только что создали: ```shell kubectl get pod,svc -n kube-system ``` Вывод будет примерно следующим: ```shell 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 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 8083/TCP,8086/TCP 26s ``` 4. Отключить `metrics-server`: ```shell minikube addons disable metrics-server ``` Вывод будет примерно следующим: ``` metrics-server was successfully disabled ``` ## Очистка Теперь вы можете освободить ресурсы, созданные в кластере: ```shell kubectl delete service hello-node kubectl delete deployment hello-node ``` Остановите кластер minikube: ```shell minikube stop ``` Удалите виртуальную машину minikube (опционально): ```shell minikube delete ``` Если вы планируете использовать minikube в дальнейшем, чтобы больше узнать про Kubernetes, удалять инструмент не нужно. ## {{% heading "whatsnext" %}} * Руководство по _[деплою первого приложения в Kubernetes с kubectl](/ru/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/)_. * Больше об [объектах Deployment](/docs/concepts/workloads/controllers/deployment/). * Больше о [развёртывании приложения](/docs/user-guide/deploying-applications/). * Больше об [объектах Service](/docs/concepts/services-networking/service/).