Вы просматриваете документацию для Kubernetes версии: v1.27
Kubernetes v1.27 документация больше не поддерживается. Версия, которую вы сейчас просматриваете, является статической. Для актуальной документации см. последнюю версию.
Привет, Minikube
Это руководство покажет вам, как запустить простое Hello World Node.js приложение на Kubernetes используя Minikube и Katacoda. Katacoda предоставляет бесплатную, встроенную в браузер Kubernetes среду.
Цели
- Разверните 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=registry.k8s.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
Что дальше
- Больше об объектах деплоймента.
- Больше о развёртывании приложения.
- Больше об объектах сервиса.