Навчальні матеріали

Edit This Page

Привіт Minikube

З цього навчального матеріалу ви дізнаєтесь, як запустити у Kubernetes простий Hello World застосунок на Node.js за допомогою Minikube і Katacoda. Katacoda надає безплатне Kubernetes середовище, що доступне у вашому браузері.

Примітка: Також ви можете навчатись за цим матеріалом, якщо встановили Minikube локально.

Цілі

  • Розгорнути Hello World застосунок у Minikube.
  • Запустити застосунок.
  • Переглянути логи застосунку.

Перш ніж ви розпочнете

У цьому навчальному матеріалі ми використовуємо образ контейнера, зібраний із наступних файлів:

minikube/server.js
var http = require('http');

var handleRequest = function(request, response) { console.log('Received request for URL: ' + request.url); response.writeHead(200); response.end('Hello World!'); }; var www = http.createServer(handleRequest); www.listen(8080);

minikube/Dockerfile
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD [ "node", "server.js" ]

Більше інформації про команду docker build ви знайдете у документації Docker.

Створення Minikube кластера

  1. Натисніть кнопку Запуск термінала

<!--<blockquote class="note">
Примітка: If you installed Minikube locally, run minikube start.
-->
Примітка: Якщо Minikube встановлений локально, виконайте команду minikube start.
  1. Відкрийте Kubernetes дашборд у браузері:

    minikube dashboard
    
  1. Тільки для Katacoda: у верхній частині вікна термінала натисніть знак плюс, а потім – Select port to view on Host 1.
  1. Тільки для Katacoda: введіть 30000, а потім натисніть Display Port.

Створення Deployment

Pod у Kubernetes – це група з одного або декількох контейнерів, що об’єднані разом з метою адміністрування і роботи у мережі. У цьому навчальному матеріалі Pod має лише один контейнер. Kubernetes Deployment перевіряє стан Pod’а і перезапускає контейнер Pod’а, якщо контейнер перестає працювати. Створювати і масштабувати Pod’и рекомендується за допомогою Deployment’ів.

  1. За допомогою команди kubectl create створіть Deployment, який керуватиме Pod’ом. Pod запускає контейнер на основі наданого Docker образу.

    kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
    
  1. Перегляньте інформацію про запущений Deployment:

    kubectl get deployments
    

    У виводі ви побачите подібну інформацію:

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    hello-node   1/1     1            1           1m
    
  1. Перегляньте інформацію про запущені Pod’и:

    kubectl get pods
    

    У виводі ви побачите подібну інформацію:

    NAME                          READY     STATUS    RESTARTS   AGE
    hello-node-5f76cf6ccf-br9b5   1/1       Running   0          1m
    
  1. Перегляньте події кластера:

    kubectl get events
    
  1. Перегляньте конфігурацію kubectl:

    kubectl config view
    
    Примітка: Більше про команди kubectl ви можете дізнатися зі статті Загальна інформація про kubectl.

    Створення Service

    За умовчанням, Pod доступний лише за внутрішньою IP-адресою у межах Kubernetes кластера. Для того, щоб контейнер hello-node став доступний за межами віртуальної мережі Kubernetes, Pod необхідно відкрити як Kubernetes Service.

    1. Відкрийте Pod для публічного доступу з інтернету за допомогою команди kubectl expose:

      kubectl expose deployment hello-node --type=LoadBalancer --port=8080
      

      Прапорець --type=LoadBalancer вказує, що ви хочете відкрити доступ до Service за межами кластера.

    1. Перегляньте інформацію про Service, який ви щойно створили:

      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
      

      Для хмарних провайдерів, що підтримують балансування навантаження, доступ до Service надається через зовнішню IP-адресу. Для Minikube, тип LoadBalancer робить Service доступним ззовні за допомогою команди minikube service.

    1. Виконайте наступну команду:

      minikube service hello-node
      
    1. Тільки для Katacoda: натисніть знак плюс, а потім – Select port to view on Host 1.
    1. Тільки для Katacoda: запишіть п’ятизначний номер порту, що відображається напроти 8080 у виводі сервісу. Номер цього порту генерується довільно і тому може бути іншим у вашому випадку. Введіть номер порту у призначене для цього текстове поле і натисніть Display Port. У нашому прикладі номер порту 30369.

      Це відкриє вікно браузера, в якому запущений ваш застосунок, і покаже повідомлення “Hello World”.

    Увімкнення розширень

    Minikube має ряд вбудованих розширеньResources that extend the functionality of Kubernetes. , які можна увімкнути, вимкнути і відкрити у локальному Kubernetes оточенні.

    1. Перегляньте перелік підтримуваних розширень:

      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
      
    1. Увімкніть розширення, наприклад metrics-server:

      minikube addons enable metrics-server
      

      У виводі ви побачите подібну інформацію:

      metrics-server was successfully enabled
      
    1. Перегляньте інформацію про Pod і Service, які ви щойно створили:

      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
      
    1. Вимкніть 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
    

    Що далі

    Ваша думка