Если вы еще только осваиваете контейнеры и кластеры Kubernetes и ищете простой способ настроить для них тестовую инфраструктуру, то вам может пригодиться VMware Workstation Pro или Workstation Player, в которых начиная с 16 версии появилась поддержка контейнеров.
Механизм работы с контейнерами в Workstation похож на тот, что присутствует в vSphere with Tanzu. Для запуска контейнеров в Workstation используются легковесные ВМ CXR (Container Runtime for ESXi) внутри которых установлена Photon OS с containerd. Каждый контейнер запускается внутри отдельной ВМ, что, с одной стороны, требует дополнительных вычислительных ресурсов на хосте Workstation по сравнению с одной "большой" ВМ, с другой, обеспечивает лучшую изоляцию запускаемых приложений друг от друга, а также позволяет упростить настройку сети для контейнеров, поскольку каждая ВМ имеет уникальный адрес в виртуальной сети.
Помимо запуска контейнеров, вместе с Workstation идет Open Source инструмент Kind, который позволяет создавать кластеры Kubernetes внутри контейнеров.
В этой статье мы рассмотрим шаги по базовой настройке Kubernetes поверх Workstation, а также затронем вопросы по настройке сети для Pod'ов.
Подготовка VMware Workstation
После установки VMware Workstation откройте коммандную строку CMD, перейдите в папку C:\Program Files (x86)\VMware\VMware Workstation\bin и выполните:
vctl system start
vctl kind
После выполнения команд в профиле пользователя будет создана папка %userprofile%\.vctl, куда будет загружен шаблон CRX и утилиты vctl и kind для работы с контейнерами.
По умолчанию vctl создает ВМ с 2 ядрами и 1 ГБ ОЗУ для запуска контейнеров и ВМ с 2 ядрами и 2 ГБ ОЗУ для ВМ под Kubernetes. Изменить настройки ВМ можно с помощью команды vctl system config. Например, после выполнения команды vctl system config --k8s-cpus 4 --k8s-mem 4g все создаваемые ВМ под K8s будут использовать по 4 ядра и по 4 ГБ ОЗУ.
Параметры ВМ можно также задать, отредактировав файл %userprofile%\.vctl\config.yaml. В этом же файле указывается к какой VMnet сети будут подключаться ВМ для контейнеров. В текущей версии Workstation для подключения контейнеров может использоваться только сеть с настроенными сервисами DHCP и NAT. По умолчанию такой сетью является VMnet8. При установке VMware Workstation автоматически выбирается для VMnet8 подсеть класса C из диапазона 192.168.0.0 - 192.168.255.255 и поднимает службу VMware NAT Server, отвечающую за трансляцию адресов и передачу трафика между виртуальной и физической сетями.
Запуск контейнеров
Создать контейнер можно с помощью команды vctl. Формат и дополнительные опции команды похожи на хорошо знакомый всем docker.
Для создания обычного контейнера с nginx выполните:
vctl run -n web-server -d nginx
Также как и в Docker поддерживается монтирование Persistent Volumes с хоста с помощью ключа -v, передача переменных окружение через -e, и маппинг портов с помощью -p.
Для просмотра списка контейнеров используется команда vctl ps -a, для удаления vctl rm -f <имя_контейнера>.
Создание кластера Kubernetes
Для создания кластера используется команда kind create cluster. В качестве доп.параметров при выполнении команды можно указать путь к конфигурационному файлу и имя кластера. Для примера опишем кластер Kubernetes, состоящий из одной master node и одной worker node в config.yaml.
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
apiServerPort: 6443
nodes:
- role: control-plane
- role: worker
Для создания кластера выполните команду:
kind create cluster --config C:\config.yaml --name k8s
Выполнив vctl ps и kind get kubeconfig --name <имя_кластера> можно увидеть, что Workstation создал две отдельные ВМ под master и worker node и прописал параметры для подключения к кластеру Kubernetes в файле %userprofile%\.kube\config.
Описание дополнительных параметров для настройки кластера через Kind приведено в документе https://kind.sigs.k8s.io/docs/user/configuration/
Взаимодействие с кластером Kubernetes может выполниться с помощью утилиты kubectl или через REST API при подключении на https://localhost:6443 или IP адрес хоста Workstation.
Для проверки работоспособности кластера Kubernetes создадим простой yaml файл и опишем конфигурацию Pod.
#pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers:
- name: web
image: vmwarecna/nginx:latest
ports:
- containerPort: 80
hostPort: 8080
Создадим Pod:
kubectl apply -f C:\pod.yaml
Проверим, что Pod запущен и работает:
kubectl get pods
kubectl describe pod/web
Поскольку в yaml файле мы прописали port forwarding, то доступ к приложению в Pod можно получить, если подключиться на IP адрес ВМ worker node (для нашего приложения используется порт 8080).
Узнать IP адрес ВМ можно с помощью команды vctl ps или через kubectl.
kubectl get nodes
kubectl describe node/k8s-worker
Публикация Pod'а во внешнюю сеть
Поскольку worker node'ы подключаются к виртуальной сети VMnet8, то для публикации приложения во внешний мир нужно настроить правила NAT трансляции в Workstation. Отредактировать настройки NAT можно из консоли Workstation: Edit -> Virtual Network Editor -> VMnet8 -> NAT Settings -> Port Forwarding -> Add...
Если вы используете Workstation Player и у вас нет Virtual Network Editor, то настройки NAT можно изменить с помощью утилиты vmrun.exe из папки "C:\Program Files (x86)\VMware\VMware Workstation" в формате vmrun setPortForwarding <VMNET_NAME> <PROTOCOL> <HOST_PORT> <VM_IP> <VM_PORT>, например:
vmrun setPortForwarding vmnet8 TCP 8080 192.168.159.133 8080
Сами настройки NAT на хосте хранятся в двух местах. В файле "C:\ProgramData\VMware\vmnetnat.conf" в разделе [incomingtcp] в формате <HOST_PORT> = <VM_IP>:<VM_PORT>.
Пример скрипта PowerShell для добавление записи:
$FileName = "C:\ProgramData\VMware\vmnetnat.conf"
$HostPort = "8080"
$VMIpVMPort = "192.168.159.133:8080"
(Get-Content $FileName) -replace "\[incomingtcp\]", "$&`n$HostPort = $VMIpVMPort" | Set-Content $FileName
И в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\VMware, Inc.\VMnetLib\VMnetConfig\vmnet8\NAT\TCPForward
В формате:
Name: <HOST_PORT>
Data: <VM_IP>:<VM_PORT>
Пример скрипта PowerShell для добавления записи:
New-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\VMware, Inc.\VMnetLib\VMnetConfig\vmnet8\NAT\TCPForward" -Name "8080" -Value "192.168.159.133:8080"
Если вы меняете параметры напрямую, то не забудьте перезапустить службу VMware NAT Service:
Restart-Service -Name "VMware NAT Service"
После этого Pod станет доступен по сети при обращении на IP адрес хоста Workstation (не забудьте настроить Windows Firewall).
Удаление кластера Kubernetes
После завершения работы вы можете удалить кластер Kubernetes и остановить vctl с помощью команд:
kind delete cluster --name <ИМЯ_КЛАСТЕРА>
vctl system stop
0 коммент.:
Отправить комментарий