Привет, Minikube
Это руководство покажет вам, как запустить простое Hello World Node.js приложение на Kubernetes используя Minikube и Katacoda. Katacoda предоставляет бесплатную, встроенную в браузер Kubernetes среду.
Заметка: Вы также можете следовать этому руководству, если вы установили Minikube locally.
Цели
- Разверните hello world приложение в Minikube.
- Запустите приложение.
- Посмотрите логи приложения.
Подготовка к работе
Для этого примера создан образ контейнера, собранный на основе следующих файлов:
var http = require('http');
var handleRequest = function(request, response) {
console.log('Получен запрос на URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD [ "node", "server.js" ]
Чтобы получить больше информации по запуску команды docker build
, ознакомьтесь с документацией по Docker.
Создание кластера Minikube
-
Нажмите Запуск Терминала
Заметка: Если у вас локально установлен Minikube, выполнитеminikube start
. -
Откройте веб-панель Kubernetes в браузере:
minikube dashboard
-
Только для окружения Katacoda: В верхней части панели нажмите знак "плюс", а затем на Select port to view on Host 1 (Выберите порт для отображения на хосте 1).
-
Только для окружения Katacoda: введите
30000
, а затем нажмите Display Port (Показать порт).
Создание Deployment
Под Kubernetes - это группа из одного или более контейнеров, связанных друг с другом с целью адмистрирования и организации сети. В данном руководстве под включает в себя один контейнер. Deployment в Kubernetes проверяет здоровье пода и перезагружает контейнер пода в случае его отказа. Deployment-ы являются рекоммендуемым способом организации создания и масштабирования подов.
-
Используйте команду
kubectl create
для создание деплоймента для управления подом. Под запускает контейнер на основе предоставленного Docker образа.kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
-
Посмотреть информацию о Deployment:
kubectl get deployments
Вывод:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-node 1 1 1 1 1m
-
Посмотреть информацию о поде:
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
можно найти по ссылке обзор kubectl.
Создание сервиса
По-умолчанию под доступен только при обращении по его внутреннему IP адресу внутри кластера Kubernetes. Чтобы сделать контейнер hello-node
доступным вне виртульной сети Kubernetes, необходимо представить под как сервис Kubernetes.
-
Сделать под доступным для публичной сети Интернет можно с помощью команды
kubectl expose
:kubectl expose deployment hello-node --type=LoadBalancer --port=8080
Флаг
--type=LoadBalancer
показывает, что сервис должен быть виден вне кластера. -
Посмотреть только что созданный сервис:
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
-
Только для окружения Katacoda: Нажмите на знак "Плюс", затем нажмите Select port to view on Host 1.
-
Только для окружения Katacoda: Введите
30369
(порт указан рядом с8080
в выводе сервиса), затем нажмите ???.Откроется окно браузера, в котором запущено ваше приложение и будет отображено сообщение "Hello World".
Добавление дополнений
В Minikube есть набор встроенных дополнений, которые могут быть включены, выключены и открыты в локальном окружении Kubernetes.
-
Отобразить текущие поддерживаемые дополнения:
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
-
Включить дополнение, например,
metrics-server
:minikube addons enable metrics-server
Вывод:
metrics-server was successfully 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
: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
Что дальше
- Больше об объектах деплоймента.
- Больше о развёртывании приложения.
- Больше об объектах сервиса.