Развертывание локального кластера Kubernetes с использованием minikube
Для локального тестирования приложений, размещаемых в кластере Kubernetes, наиболее простым вариантом будет установить minikube. Minikube это кластер Kubernetes, состоящий из одной ноды. Установка minikube очень проста и доступна под Linux, MacOS и Windows
Установка minikube
Ниже будет описана последовательность шагов по установке minikube под Windows.
Сначала необходимо скачать и установить Oracle Virtual Box отсюда
Далее скачиваем и запускаем запускаем прямую ссылку на установщик с github
После установки необходимо выполнить настройку minikube, указав:
Используемый драйвер виртуальной машины
minikube config set vm-driver virtualbox
Количество оперативной памяти, доступной кластеру
minikube config set memory 8G
Количество ядер процессора, доступных кластеру
minikube config set cpus 6
Запуск minikube
Для запуска minikube используем команду
minikube start
Microsoft Windows [Version 10.0.22631.4602]
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
C:\Windows\System32>minikube start
* minikube v1.28.0 на Microsoft Windows 11 Home Single Language 10.0.22631 Build 22631
* Используется драйвер virtualbox на основе существующего профиля
* Запускается control plane узел minikube в кластере minikube
* minikube 1.34.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.34.0
* To disable this notice, run: 'minikube config set WantUpdateNotification false'
* Перезагружается существующий virtualbox VM для "minikube" ...
! This VM is having trouble accessing https://registry.k8s.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* Подготавливается Kubernetes v1.25.3 на Docker 20.10.20 ...
- kubelet.authentication-token-webhook=true
- kubelet.authorization-mode=Webhook
- scheduler.bind-address=0.0.0.0
- controller-manager.bind-address=0.0.0.0
- Используется образ gcr.io/k8s-minikube/storage-provisioner:v5
- Используется образ docker.io/kubernetesui/dashboard:v2.7.0
- Используется образ docker.io/kubernetesui/metrics-scraper:v1.0.8
* Компоненты Kubernetes проверяются ...
* Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
* Включенные дополнения: storage-provisioner, default-storageclass, dashboard
* Готово! kubectl настроен для использования кластера "minikube" и "default" пространства имён по умолчанию
C:\Windows\System32>
Для остановки minikube запускаем
minikube stop
Для очистки кластера (удаление всех нэймспейсов и конфигураций) выполняем
minikube delete
Использование виртуальной машины Hyper-V вместо Oracle
Известны случаи, когда после очередных обновлений Windows кластер под управлением Oracle Virtual Box переставал работать и не помогала даже полная очистка с удалением Virtual Box и minikube.
Если такое произойдет, то вместо Oracle Virtual Box можно использовать встроенную в Windows машину виртуализации Hyper-V. Чтобы ее активировать нужно в консоли дать команду:
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
Но, проблема в том, что Hyper-V не включена в домашние версии Windows. Для ее решения (добавления Hyper-V в Windows и ее активации) нужно запустить следующий скрипт:
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause
Также надо убедиться, что виртуализация включена на уровне BIOS.
После установки Hyper-V ее надо задействовать в качестве драйвера для minikube:
minikube config set driver hyperv
Использование встроенной web-консоли
Minikube поставляется с набором встроенных расширений, одно из которых представляет из себя web-консоль управления кластером. Для запуска консоли необходимо запустить команду
minikube dashboard
Через консоль мы можем просматривать содержимое существующих пространств kubernetes (нэймспейсов)

Пересоздавать поды

Заходить в консоль пода и выполнять команды внутри контейнеров

Скачивать и просматривать файлы логов с пода

Редактировать конфигурации deployment-ов и прочие манифесты

Использование kubectl
Все действия, доступные из Web консоли, также можно осуществить из приложения kubectl.
Есть два варианта его использования:
- Команда minikube kubectl
- Команда kubectl, которая требует отдельной установки kubectl
Первый вариант использует kubectl, встроенный в minikube. Для второго варианта kubectl должен отдельно присутствовать на хосте (например, в составе Docker Descktop). Для установки kubectl нужно загрузить и запустить последнюю версию по этой ссылке. Далее, путь к бинарному файлу прописать в переменной PATH.
Примеры команд kubectl
Развертываем deployment или другие конфигурации
C:\Windows\System32>kubectl apply -f C:\Work\Projects\SampleOsApp\service-back\os\service-back\kubernetes\service\app_deployment.yaml -n myproject
deployment.apps/service-back-0.01 configured
Просматриваем список нэймспейсов
C:\Windows\System32>kubectl get namespaces
NAME STATUS AGE
default Active 44d
istio-system Active 44d
kube-node-lease Active 44d
kube-public Active 44d
kube-system Active 44d
kubernetes-dashboard Active 44d
monitoring Active 44d
myproject Active 44d
Просматриваем список подов в нэймспейсе
C:\Windows\System32>kubectl get pods -n myproject
NAME READY STATUS RESTARTS AGE
service-back-0.01-95d8d464d-xbn2f 2/2 Running 0 3m22s
service-facade-0.01-76c66cdcfb-mstb2 2/2 Running 8 (22h ago) 2d23h
service-facade-0.01-load-generator-78cqh 0/1 Error 0 25h
Копируем файл из контейнера пода на локальный компьютер
C:\Windows\System32>kubectl -n myproject cp service-back-0.01-95d8d464d-xbn2f:/opt/app/log/application.log /Work/application.log
Defaulted container "service-back" out of: service-back, logging-app
tar: Removing leading `/' from member names
Установка Istio
Сервисная сетка Istio значительно расширяет стандартные возможности Kubernetes. При ее использовании появляется гораздо больше средств конфигурирования распределенной среды за счет таких конфигов как Virtual Service, Destination Rule, Gateway и прочих. С их помощью мы можем более гибко управлять внешним и внутренним трафиком, использовать телеметрию, переповторы, автоматические выключатели, канареечное тестирование.
Установка Istio в локальный кластер minikube проста. Для этого достаточно скачать и запустить установочный файл istioctl отсюда
Далее выполняем команду (при запущенном кластере minikube)
istioctl install --set profile=demo
После выполнения будет установлен istio с профилем demo, который включает в себя прокси сервера ingress и egress для контроля входящего и исходящего трафика. Чтобы убедиться, что istio корректно установлен, зайдем к консоль minikube и откроем содержимое пространства istio-system

Заходим в консоль ноды minikube
Для более глубокого погружения в работу kubernetes мы можем зайти в консоль единственной ноды кластера minikube. Это можно сделать через интерфейс VirtualBox (имя и пароль по умолчанию docker/tcuser)

или с помощью команды
minikube ssh
Далее, можно просмотреть запущенные процессы, файловую систему, найти файлы куда пишутся логи с подов и.т.д.