--- #title: Hello Minikube title: Привіт Minikube content_template: templates/tutorial weight: 5 menu: main: #title: "Get Started" title: "Початок роботи" weight: 10 #post: > #

Ready to get your hands dirty? Build a simple Kubernetes cluster that runs "Hello World" for Node.js.

post: >

Готові попрацювати? Створимо простий Kubernetes кластер для запуску Node.js застосунку "Hello World".

card: #name: tutorials name: навчальні матеріали weight: 10 --- {{% capture overview %}} З цього навчального матеріалу ви дізнаєтесь, як запустити у Kubernetes простий Hello World застосунок на Node.js за допомогою [Minikube](/docs/setup/learning-environment/minikube) і Katacoda. Katacoda надає безплатне Kubernetes середовище, що доступне у вашому браузері. {{< note >}} Також ви можете навчатись за цим матеріалом, якщо встановили [Minikube локально](/docs/tasks/tools/install-minikube/). {{< /note >}} {{% /capture %}} {{% capture objectives %}} * Розгорнути Hello World застосунок у Minikube. * Запустити застосунок. * Переглянути логи застосунку. {{% /capture %}} {{% capture prerequisites %}} У цьому навчальному матеріалі ми використовуємо образ контейнера, зібраний із наступних файлів: {{< codenew language="js" file="minikube/server.js" >}} {{< codenew language="conf" file="minikube/Dockerfile" >}} Більше інформації про команду `docker build` ви знайдете у [документації Docker](https://docs.docker.com/engine/reference/commandline/build/). {{% /capture %}} {{% capture lessoncontent %}} ## Створення Minikube кластера 1. Натисніть кнопку **Запуск термінала** {{< kat-button >}} {{< note >}}Якщо Minikube встановлений локально, виконайте команду `minikube start`.{{< /note >}} 2. Відкрийте Kubernetes дашборд у браузері: ```shell minikube dashboard ``` 3. Тільки для Katacoda: у верхній частині вікна термінала натисніть знак плюс, а потім -- **Select port to view on Host 1**. 4. Тільки для Katacoda: введіть `30000`, а потім натисніть **Display Port**. ## Створення Deployment [*Pod*](/docs/concepts/workloads/pods/pod/) у Kubernetes -- це група з одного або декількох контейнерів, що об'єднані разом з метою адміністрування і роботи у мережі. У цьому навчальному матеріалі Pod має лише один контейнер. Kubernetes [*Deployment*](/docs/concepts/workloads/controllers/deployment/) перевіряє стан Pod'а і перезапускає контейнер Pod'а, якщо контейнер перестає працювати. Створювати і масштабувати Pod'и рекомендується за допомогою Deployment'ів. 1. За допомогою команди `kubectl create` створіть Deployment, який керуватиме Pod'ом. Pod запускає контейнер на основі наданого Docker образу. ```shell kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node ``` 2. Перегляньте інформацію про запущений Deployment: ```shell kubectl get deployments ``` У виводі ви побачите подібну інформацію: ``` NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 1m ``` 3. Перегляньте інформацію про запущені Pod'и: ```shell kubectl get pods ``` У виводі ви побачите подібну інформацію: ``` NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m ``` 4. Перегляньте події кластера: ```shell kubectl get events ``` 5. Перегляньте конфігурацію `kubectl`: ```shell kubectl config view ``` {{< note >}}Більше про команди `kubectl` ви можете дізнатися зі статті [Загальна інформація про kubectl](/docs/user-guide/kubectl-overview/).{{< /note >}} ## Створення Service За умовчанням, Pod доступний лише за внутрішньою IP-адресою у межах Kubernetes кластера. Для того, щоб контейнер `hello-node` став доступний за межами віртуальної мережі Kubernetes, Pod необхідно відкрити як Kubernetes [*Service*](/docs/concepts/services-networking/service/). 1. Відкрийте Pod для публічного доступу з інтернету за допомогою команди `kubectl expose`: ```shell kubectl expose deployment hello-node --type=LoadBalancer --port=8080 ``` Прапорець `--type=LoadBalancer` вказує, що ви хочете відкрити доступ до Service за межами кластера. 2. Перегляньте інформацію про Service, який ви щойно створили: ```shell kubectl get services ``` У виводі ви побачите подібну інформацію: ``` 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 ``` Для хмарних провайдерів, що підтримують балансування навантаження, доступ до Service надається через зовнішню IP-адресу. Для Minikube, тип `LoadBalancer` робить Service доступним ззовні за допомогою команди `minikube service`. 3. Виконайте наступну команду: ```shell minikube service hello-node ``` 4. Тільки для Katacoda: натисніть знак плюс, а потім -- **Select port to view on Host 1**. 5. Тільки для Katacoda: запишіть п'ятизначний номер порту, що відображається напроти `8080` у виводі сервісу. Номер цього порту генерується довільно і тому може бути іншим у вашому випадку. Введіть номер порту у призначене для цього текстове поле і натисніть Display Port. У нашому прикладі номер порту `30369`. Це відкриє вікно браузера, в якому запущений ваш застосунок, і покаже повідомлення "Hello World". ## Увімкнення розширень Minikube має ряд вбудованих {{< glossary_tooltip text="розширень" term_id="addons" >}}, які можна увімкнути, вимкнути і відкрити у локальному Kubernetes оточенні. 1. Перегляньте перелік підтримуваних розширень: ```shell 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 ``` 2. Увімкніть розширення, наприклад `metrics-server`: ```shell minikube addons enable metrics-server ``` У виводі ви побачите подібну інформацію: ``` metrics-server was successfully enabled ``` 3. Перегляньте інформацію про Pod і Service, які ви щойно створили: ```shell 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 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 ``` {{% /capture %}} {{% capture whatsnext %}} * Дізнайтеся більше про [об'єкти Deployment](/docs/concepts/workloads/controllers/deployment/). * Дізнайтеся більше про [розгортання застосунків](/docs/user-guide/deploying-applications/). * Дізнайтеся більше про [об'єкти Service](/docs/concepts/services-networking/service/). {{% /capture %}}