Принятие облачных архитектур и контейнеризации преобразует способ разработки, развертывания и управления приложениями. Контейнеры предлагают скорость, гибкость и масштабируемость, стимулируя значительное изменение в стратегиях ИТ. Однако реальность для многих организаций заключается в том, что виртуальные машины (ВМ) продолжают играть критическую роль, особенно когда речь идет о устаревших или stateful приложениях. Даже ведущие финансовые учреждения, такие как Goldman Sachs, признают ценность ВМ наряду с контейнеризованными рабочими нагрузками и исследуют способы эффективного управления ими.
Это создает потенциальное разделение: выгоды контейнеризации с одной стороны и необходимость ВМ с другой. KubeVirt устраняет этот разрыв, расширяя мощь Kubernetes на управление виртуальными машинами, предоставляя вам возможность объединить вашу инфраструктуру, обеспечивая более плавный переход к облачным технологиям.
В этой статье мы исследуем, почему KubeVirt является привлекательным решением для организаций, стремящихся оптимизировать операции ИТ и обрести гибкость в гибридной инфраструктурной среде.
Что такое KubeVirt в точности?
KubeVirt – это проект с открытым исходным кодом, который превращает Kubernetes в мощную платформу, способную управлять как контейнерами, так и виртуальными машинами. Простыми словами, KubeVirt превращает Kubernetes в единую систему управления для всей вашей инфраструктуры.
Вот как это работает:
- KubeVirt как расширение: KubeVirt добавляет определения пользовательских ресурсов (CRD) в Kubernetes, вводя новый тип объекта, представляющего виртуальные машины.
- Виртуальные машины как “поды”: Используя KubeVirt, каждая ВМ запускается в специализированном поде, который тесно интегрирует ВМ в экосистему Kubernetes.
- Упрощенное управление ВМ с помощью Kubernetes: Теперь вы можете использовать те же инструменты Kubernetes (
kubectl
и API Kubernetes) и bewt практики для создания, запуска, остановки, миграции и мониторинга ВМ наряду с вашими контейнеризованными рабочими нагрузками.
Думайте о KubeVirt как о возможности для Kubernetes говорить на языке виртуализации, открывая мир возможностей для управления вашей инфраструктурой.
Бизнес-влияние KubeVirt
KubeVirt приносит ощутимые выгоды, выходящие за рамки технического изящества. Приняв KubeVirt, ваша организация может получить следующее:
- Безшовное управление рабочей нагрузкой: Разрушьте стены между вашими приложениями на основе ВМ и контейнеризованными рабочими нагрузками. Управляйте всем с одной платформы, используя те же инструменты и процессы, значительно упрощая операции и уменьшая сложность.
- Повышенная эффективность использования ресурсов: KubeVirt дает вам возможность запускать как традиционные ВМ, так и контейнеры на одном и том же аппаратном обеспечении кластера. Оптимизируйте использование ресурсов, улучшайте плотность инфраструктуры и, возможно, добивайтесь значительных экономических выгод.
- Ускоренная модернизация: Устаревшие приложения, связанные с виртуальными машинами, не должны стать преградой для инноваций. KubeVirt предоставляет постепенный путь к модернизации приложений на вашем собственном темпе. Вы можете контейнеризировать и мигрировать компоненты постепенно, все в одной среде Kubernetes, минимизируя прерывания.
- Инфраструктура, гарантирующая будущее: Инвестируя в KubeVirt, вы выстраиваетесь по облако-ориентированным принципам и делаете Kubernetes основой вашего технологического стека. Это способствует гибкости и мобильности, позволяя вам легко адаптироваться к изменяющимся бизнес-требованиям.
Почему вашей организации стоит обратить внимание?
KubeVirt предоставляет значительную ценность, особенно в следующих областях:
- Команды ИТ и DevOps: KubeVirt упрощает операции, предоставляя единое управление для всех ваших рабочих нагрузок. Он помогает вам оптимизировать рабочие процессы, сократить издержки на инструменты и повысить общую эффективность команды.
- Топ-менеджмент: Получите операционную гибкость, достигните снижения затрат и упростите путь к модернизации инфраструктуры. KubeVirt выстраивает технологические инвестиции в соответствии с долгосрочным успехом бизнеса.
- Смешанные рабочие нагрузки: Если вы управляете как устаревшими приложениями на основе виртуальных машин, так и современными контейнеризированными развертываниями, KubeVirt необходим. Он позволяет избежать зависимости от поставщика, сократить сложность и сохранить полный контроль над вашими выборами инфраструктуры.
Вот некоторые конкретные проблемы, которые решает KubeVirt:
- Недовольны управлением раздельными средами для виртуальных машин и контейнеров? KubeVirt объединяет их, что значительно упрощает управление.
- Ищете гибкость, не жертвуя существующими инвестициями? KubeVirt позволяет вам использовать вашу инфраструктуру виртуальных машин, одновременно модернизируя её.
- Хотите улучшить эффективность затрат и использование ресурсов? KubeVirt помогает консолидировать рабочие нагрузки для лучшего использования.
- Страдаете от сложных миграций устаревших приложений? Модернизируйте постепенно и контролируйте свой темп с помощью KubeVirt.
Начало работы: развертывание и внедрение
Развертывание KubeVirt требует хорошо подготовленной среды Kubernetes. Этот раздел предоставляет подробное руководство, чтобы помочь вам настроить и внедрить KubeVirt в вашу инфраструктуру.
Предварительные требования
Перед началом убедитесь, что выполнены следующие требования:
1. Кластер Kubernetes
Вам нужен кластер Kubernetes (или производное, такое как OpenShift), основанный на одной из трех последних версий Kubernetes, доступных на момент выпуска KubeVirt.
2. Конфигурация API-сервера Kubernetes
API-сервер Kubernetes должен быть настроен с --allow-privileged=true
, чтобы запустить привилегированный DaemonSet KubeVirt.
3. Утилита Kubectl
Убедитесь, что у вас установлена и настроена утилита kubectl
для взаимодействия с вашим кластером.
4. Поддержка контейнерного времени выполнения
KubeVirt поддерживается на следующих контейнерных средах:
Containerd
crio
(сrunv
)
Другие контейнерные среды также должны работать, но упомянутые являются основными целями.
5. Аппаратная виртуализация
Рекомендуется использовать оборудование с поддержкой виртуализации. Вы можете использовать virt-host-validate
, чтобы убедиться, что ваши хосты способны выполнять виртуализированные рабочие нагрузки:
$ virt-host-validate qemu
Сетевые и безопасностные аспекты
-
Конфигурация сети: Задумайтесь о том, как ваши виртуальные машины будут подключаться и взаимодействовать с внешними сетями и остальной средой Kubernetes.
-
Интеграция с AppArmor: На системах с включенным AppArmor вам может потребоваться изменить профили AppArmor, чтобы разрешить выполнение контейнеров с привилегиями KubeVirt. Например:
# vim /etc/apparmor.d/usr.sbin.libvirtd
/usr/libexec/qemu-kvm PUx,
# apparmor_parser -r /etc/apparmor.d/usr.sbin.libvirtd
Установка KubeVirt
Чтобы установить KubeVirt, выполните следующие шаги:
1. Установите оператор KubeVirt
Оператор KubeVirt упрощает установку и управление компонентами KubeVirt. Выполните следующие команды для развертывания последнего выпуска KubeVirt:
# Point at latest release
$ export RELEASE=$(curl https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)
# Deploy the KubeVirt operator
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/$ RELEASE /kubevirt-operator.yaml
# Create the KubeVirt CR (instance deployment request) which triggers the actual installation
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/$ RELEASE /kubevirt-cr.yaml
# Wait until all KubeVirt components are up
$ kubectl -n kubevirt wait kv kubevirt --for condition=Available
2. Настройка для неаппаратной виртуализации
Если аппаратная виртуализация недоступна, включите эмуляцию программного обеспечения, установив значение useEmulation в true в KubeVirt CR:
$ kubectl edit -n kubevirt kubevirt kubevirt
# Add the following to the kubevirt.yaml file
spec
configuration
developerConfiguration
useEmulationtrue
Лучшие практики реализации
Чтобы извлечь максимальную пользу от KubeVirt, следуйте этим лучшим практикам:
1. Проведите оценку рабочей нагрузки
Приоритизируйте ВМ, подходящие для контейнеризации. Начните с менее критичных приложений, чтобы приобрести практический опыт.
2. Оцените сеть и хранилище
Задумайтесь о том, как связать сеть ВМ с вашей существующей сетью Kubernetes и интегрировать решения хранения для постоянных данных, используя плагины Container Storage Interface (CSI).
3. Уделяйте внимание мониторингу и управлению
Используйте инструменты мониторинга Kubernetes или изучите специфические решения KubeVirt, чтобы получить представление о производительности ВМ наряду с вашими контейнерами.
4. Живая миграция
Включите и настройте живую миграцию для перемещения работающих ВМ на другие вычислительные узлы без простоя. Это включает установку фич-гейтов и настройку параметров, специфичных для миграции, в KubeVirt CR:
apiVersion kubevirt.io/v1
kind KubeVirt
metadata
name kubevirt
namespace kubevirt
spec
configuration
developerConfiguration
featureGates
LiveMigration
migrations
parallelMigrationsPerCluster5
parallelOutboundMigrationsPerNode2
bandwidthPerMigration 64Mi
completionTimeoutPerGiB800
progressTimeout150
Пример установки на OpenShift (OKD)
Если вы используете OKD, дополнительными шагами является настройка ограничений контекста безопасности (Security Context Constraints, SCC):
$ oc adm policy add-scc-to-user privileged -n kubevirt -z kubevirt-operator
Пример установки на k3OS
Для k3OS убедитесь, что вы загрузили необходимые модули на всех узлах перед развертыванием KubeVirt:
k3os
modules
kvm
vhost_net
Перезапустите узлы с этой конфигурацией, а затем разверните KubeVirt, как описано выше.
Установка ежедневных версий разработчика
Для последних версий разработчика запустите:
$ LATEST=$(curl -L https://storage.googleapis.com/kubevirt-prow/devel/nightly/release/kubevirt/kubevirt/latest)
$ kubectl apply -f https://storage.googleapis.com/kubevirt-prow/devel/nightly/release/kubevirt/kubevirt/$ LATEST /kubevirt-operator.yaml
$ kubectl apply -f https://storage.googleapis.com/kubevirt-prow/devel/nightly/release/kubevirt/kubevirt/$ LATEST /kubevirt-cr.yaml
Развертывание из исходного кода
Следуя этим шагам и лучшим практикам, вы можете обеспечить плавную и успешную реализацию KubeVirt, предоставляя единое решение для управления инфраструктурой, которое использует как виртуальные машины, так и контейнеры.
Лучшие практики реализации
Следуйте этим лучшим практикам, чтобы получить максимальную отдачу от KubeVirt:
- Проведите оценку нагрузки: Не каждое приложение сразу подходит для KubeVirt. Приоритизируйте ВМ с хорошим потенциалом для контейнеризации. Менее критически важные приложения могут стать отличным способом получить практический опыт при минимизации рисков.
- Оцените сети и хранилище: Тщательно рассмотрите, как связать сетевую инфраструктуру ВМ с вашей существующей сетевой инфраструктурой Kubernetes. Запланируйте интеграцию хранилища для постоянных данных, используя такие решения, как плагины Container Storage Interface (CSI).
- Подчеркните мониторинг и управление: Адаптируйте свои существующие инструменты мониторинга Kubernetes или изучите решения, специфичные для KubeVirt, чтобы получить видимость производительности ВМ наряду с вашими контейнерами.
Заключение
KubeVirt предлагает привлекательный путь для организаций, стремящихся извлечь выгоду из облачных технологий, при этом максимизируя ценность существующих инвестиций в виртуальные машины. Это повышает операционную эффективность, способствует гибкости и ускоряет ваш путь к модернизации.
Source:
https://dzone.com/articles/kubevirt-implementation-who-needs-it-and-why