Цей навчальний посібник показує, як запустити демонстраційний застосунок у Kubernetes за допомогою minikube. Навчальний посібник надає образ контейнера, який за допомогою NGINX повертає у відповідь усі отримані запити.
Цей навчальний посібник передбачає, що ви вже налаштували minikube. Інструкції щодо встановлення дивіться в Кроці 1 на сторінці minikube start.
Вам також потрібно встановити kubectl. Інструкції щодо встановлення дивіться в розділі Встановлення інструментів.
minikube start
minikube start створює кластер з одним вузлом. Цей вузол виконує роль і панелі управління, і робочого вузла. Це відрізняється від багатьох промислових кластерів Kubernetes, де вузли панелі управління зазвичай ізольовані від робочих вузлів за допомогою taint або повністю невидимі для користувача.
Перевірте стан кластера minikube, щоб переконатися, що всі компоненти працюють.
minikube status
Вивід наведеної вище команди має показувати всі компоненти у стані Running або Configured, як у прикладі виводу нижче:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Відкрийте інформаційну панель Kubernetes. Це можна зробити двома різними способами:
Відкрийте новий термінал і виконайте:
# Запустіть новий термінал та залиште його працювати.
minikube dashboard
Тепер поверніться до термінала, де ви запустили minikube start.
<p>Команда <code>dashboard</code> вмикає надбудову інформаційної панелі та відкриває проксі в типовому вебоглядачі. Ви можете створювати в інформаційній панелі ресурси Kubernetes, такі як Deployment і Service.</p>
Щоб дізнатися, як уникнути безпосереднього запуску вебоглядача з термінала й отримати URL вебінтерфейсу інформаційної панелі, дивіться вкладку «Скопіювати та вставити URL».
Типово інформаційна панель доступна лише з внутрішньої віртуальної мережі Kubernetes. Команда dashboard створює тимчасовий проксі, щоб інформаційна панель стала доступною ззовні віртуальної мережі Kubernetes.
Щоб зупинити проксі, натисніть Ctrl+C для виходу з процесу. Після завершення команди інформаційна панель продовжує працювати в кластері Kubernetes. Ви можете знову виконати команду dashboard, щоб створити інший проксі для доступу до інформаційної панелі.
Якщо ви не хочете, щоб minikube відкривав вебоглядач за вас, виконайте підкоманду dashboard з прапорцем --url. minikube виведе URL, який ви можете відкрити у вебоглядачі на свій вибір.
Відкрийте новий термінал і виконайте:
# Запустіть новий термінал та залиште його працювати.
minikube dashboard --url
Тепер ви можете скористатися цим URL і повернутися до термінала, де ви запустили minikube start.
Pod у Kubernetes — це група з одного або декількох контейнерів, що обʼєднані разом з метою адміністрування і роботи в мережі. У цьому навчальному посібнику Pod має лише один контейнер. Kubernetes Deployment перевіряє стан вашого Podʼа і перезапускає контейнер Podʼа, якщо контейнер перестає працювати. Створювати і масштабувати Podʼи рекомендується за допомогою Deploymentʼів.
За допомогою команди kubectl create створіть Deployment, який керуватиме Podʼом. Pod запускає контейнер на основі наданого образу 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
(Може знадобитися деякий час, поки Pod стане доступним. Якщо ви бачите «0/1», спробуйте ще раз за кілька секунд.)
Перегляньте інформацію про Pod:
kubectl get pods
У виводі ви побачите подібну інформацію:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
Перегляньте події кластера:
kubectl get events
Перегляньте конфігурацію kubectl:
kubectl config view
Перегляньте логи застосунку для контейнера в Podʼі (замініть імʼя Podʼа на те, яке ви отримали з kubectl get pods).
hello-node-5f76cf6ccf-br9b5 у команді kubectl logs на імʼя Podʼа з виводу команди 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
kubectl ви можете дізнатися зі статті Інструмент командного рядка (kubectl).
Типово Pod доступний лише за внутрішньою IP-адресою в межах кластера Kubernetes. Для того, щоб контейнер hello-node став доступний за межами віртуальної мережі Kubernetes, Pod необхідно відкрити як Service Kubernetes.
/shell, яка корисна для налагодження, але її небезпечно відкривати для доступу з публічного інтернету. Не запускайте його в кластері, доступному з інтернету, або в промисловому кластері.
Відкрийте Pod для публічного доступу з інтернету за допомогою команди kubectl expose:
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
Прапорець --type=LoadBalancer вказує, що ви хочете відкрити доступ до Service за межами кластера.
Код застосунку в тестовому образі прослуховує лише TCP-порт 8080. Якби ви використали kubectl expose, щоб відкрити інший порт, клієнти не змогли б підʼєднатися до цього іншого порту.
Перегляньте інформацію про створений вами 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.
Виконайте наступну команду:
minikube service hello-node
Це відкриє вікно вебоглядача, яке обслуговує ваш застосунок і показує його відповідь.
Інструмент minikube містить набір вбудованих надбудов, які можна увімкнути, вимкнути і відкрити в локальному середовищі 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
Перегляньте 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
Перевірте вивід 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. Тепер ви готові розгортати застосунки.