Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Виртуальные машины в Kubernetes: как и (главное...

Виртуальные машины в Kubernetes: как и (главное) зачем?

Обычно виртуальные машины используются в качестве нод кластера Kubernetes, но что если их поменять местами? И начать использовать платформу Kubernetes для запуска виртуальных машин наряду с обычными контейнерами. Машинами с различными операционными системами, еще и на отличающихся архитектурах. В каких случаях это может быть полезно? На каких технологиях это будет работать и как виртуальные машины будут интегрированы в экосистему Kubernetes?

Спикер расскажет возможные решения для запуска тестовых стендов с виртуальными машинами. А также покажет возможную интеграцию с сервисами из мира Kubernetes. И наконец про трансформацию платформы тестирования в Yandex Cloud.

Спикер: Руслан Гайнанов, тимлид DevOps-команды в ИТ-Холдинге Т1

Запись доклада - https://youtu.be/SKVzJXjpyrY?si=kg3adnKFfwNEP7ub

Ruslan Gainanov

February 26, 2025
Tweet

More Decks by Ruslan Gainanov

Other Decks in Programming

Transcript

  1. Руслан Гайнанов • Тимлид команды DevOps в дивизионе продуктовой разработки

    ГК Иннотех (входит в Т1) • Занимаюсь разработкой сервисов для автоматизации разработки и внедрения продуктов компании
  2. 1. Описание проекта и задачи 2. Способы решения 3. Подробнее

    про подход 4. Выводы по решению 5. Возникшие трудности и выход Содержание
  3. Предпосылки — новый продукт «Осмакс» — система распространения и обновления

    программного обеспечения, а также массового автоматизированного управления конфигурациями парка устройств в гетерогенной среде Система управления конфигурациями «Осмакс» https://infra.inno.tech/osmax
  4. 1 2 3 Запускать приложения как systemd-службы Поставлять приложения в

    виде deb/rpm-пакетов Работать с настройками ОС: диски, устройства, пользователи Основные требования к ПО и стендам
  5. 1 2 3 Запускать приложения как systemd-службы Поставлять приложения в

    виде deb/rpm-пакетов Работать с настройками ОС: диски, устройства, пользователи Основные требования к ПО и стендам 4 5 6 Вообще без ОС (удаленная установка ОС) Отечественные ОС (Astra, RED и т.п.) Доступ по RDP/VNC/ssh
  6. KVM - QEMU • KVM — это модуль ядра Linux,

    ​обеспечивающий доступ к аппаратной виртуализации на базе Intel VT и AMD SVM • QEMU — эмулятор аппаратного обеспечения различных платформ, позволяющий запускать различные гостевые операционные системы • QEMU-KVM — qemu-system, запущенный с kvm в качестве ускорителя
  7. libvirt • libvirt — open-source проект, который занимается разработкой набора

    инструментов и драйверов для управления гипервизорами • Предоставляет интерфейс взаимодействия через набор XML-файлов плюс возможность автоматизации через API
  8. Инструменты для управления ВМ через libvirt • the-hard-way: API (libvirt)

    • bash: virsh, virt-install • ansible: community.libvirt • vagrant: libvirt • terraform: libvirt • kubernetes: kubevirt, virtlet, virtink
  9. Инструменты для управления ВМ через libvirt • the-hard-way: API (libvirt)

    • bash: virsh, virt-install • ansible: community.libvirt • vagrant: libvirt • terraform: libvirt • kubernetes: kubevirt, virtlet, virtink
  10. Два мира — один стек NA KubeCon 2019 — KubeVirt

    Deep Dive (video) • Logging, Metrics, Monitoring • Knowledge • Scheduling, Storage, Network
  11. apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm spec: template: spec:

    domain: ... networks: ... volumes: - name: containerdisk containerDisk: image: quay.io/kubevirt/cirros-container-disk-demo kubectl apply -f VM.yaml
  12. $ kubectl get pods NAME READY STATUS virt-launcher-testvm-jbkbg 2/2 Running

    VM → VMI → Pod с QEMU KubeVirt VM KubeVirt VMI create create KubeVirt POD KVM + QEMU Container
  13. $ kubectl exec virt-launcher-testvm-jbkbg -- sh $ virsh list Id

    Name State 1 default_testvm running $ virsh dumpxml default_testvm <domain type='qemu' id='1'> <name>default_testvm</name> <uuid>5a9fc181-957e-5c32-9e5a-2de5e9673531</uuid> <memory unit='KiB'>524288</memory> <currentMemory unit='KiB'>524288</currentMemory> <vcpu placement='static'>1</vcpu> ... </domain> ВМ внутри контейнера в Pod’е
  14. 2 Где и как хранить образы? данные? бэкапы? Как подключиться

    к ней? 3 4 Как интегрировать ВМ с сервисами Kubernetes? Как управлять ресурсами? доступами? Мы запустили ВМ в Kubernetes! И это всё? 1
  15. $ virtctl console testvm $ kubectl virt console testvm $

    virtctl ssh testvm $ virtctl vnc testvm Подключение к ВМ
  16. apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm spec: running: false

    template: metadata: labels: kubevirt.io/domain: testvm spec: ... networks: - name: default pod: {} ... Подключение к ВМ через LoadBalancer. ssh apiVersion: v1 kind: Service metadata: name: testvm-ssh spec: ports: - port: 22 protocol: TCP targetPort: 22 selector: kubevirt.io/domain: testvm type: LoadBalancer
  17. $ virtctl port-forward vm/win10 udp/3389 tcp/3389 Подключение к ВМ через

    port-forward и RDP client virtctl port- forward proxy Your computer Pod VM
  18. Подключение к ВМ через noVNC wavezhang/virtVNC — централизованный дашборд для

    подключения через браузер к запущенным ВМ (KubeVirt)
  19. Подробнее про устройство и настройку сети 1. Режимы сети 2.

    Типы интерфейсов 3. Тесты производительности KubeVirt — внутреннее устройство и сеть (обзор и видео доклада)
  20. David Vosse (KubeVirt VM Image Usage Patterns) There are a

    million ways to use and manipulate VM images with KubeVirt. That’s by design Как управлять образами ВМ в KubeVirt?
  21. 2 Есть скрипты для первичной автонастройки (cloud-init) Временное хранение данных

    (до перезапуска) 3 4 Подходит для тестовых сценариев Можно использовать существующий ContainerRegistry Ephemeral Volume 1
  22. # VM Spec spec: template: spec: volumes: - containerDisk: image:

    registry.example.com/vm/fedora25 # Dockerfile FROM scratch ADD --chown=107:107 fedora25.qcow2 /disk/ Ephemeral Volume. containerDisk. Build & Push
  23. Persistent Volume 1. Долгосрочное хранение данных 2. Позволяет выполнять миграции

    ВМ (LiveMigration) 3. Работает через дополнительный оператор и CRD: DataVolume (DV) DV PVC Pod create mount
  24. apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: dv-cirros spec: source: http:

    url: "https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img" –– << из S3 pvc: accessModes: - ReadWriteOnce resources: requests: storage: "128Mi" Создание Data Volumes(DV)
  25. apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: testvm-dv spec: template: spec:

    ... volumes: - name: dvdisk dataVolume: name: dv-cirros ––––––––––––––– << имя DV # PVs NAME CAPACITY ACCESS MODES STATUS CLAIM pvc-..-4f918b1618a7 128Mi RWO Bound default/dv-cirros Подключение Data Volumes (DV) к VM
  26. Используется Kubernetes Scheduler • requests • nodeSelector • affinity and

    anti-affinity • taints and tolerations Можно задать архитектуру, загрузчик (BIOS/UEFI), модель материнской платы, ЦП Есть поддержка NUMA, SRV-IOV, PCI-Passthrough (GPU, USB) 1 2 3 Что есть для управления ресурсами ВМ
  27. Использование GPU VK Kubernetes Conf 2024 • Запуск ПО с

    GPU в ВМ через KubeVirt • NVIDIA Container Runtime • NVIDIA GPU Operator
  28. Как ограничить использование ВМ? 1. RBAC 2. NetworkPolicy 3. Webhooks

    (admission/mutation) Через стандартные механизмы Kubernetes: Client VM Kube-API
  29. Мониторинг 1. метрики формата Prometheus 2. есть grafana dashboard: –

    cpu – memory – io – network 3. есть runbooks по алертам 4. node-exporter внутри ВМ
  30. Логирование 1. Логи ВМ не получить через kubectl logs 2.

    Но можно через fluent-bit из journald или файла логов
  31. Трассировка и Istio Есть, при использовании сети pod’ов (pod network

    masquerade) apiVersion: kubevirt.io/v1 kind: VirtualMachineInstance metadata: annotations: sidecar.istio.io/inject: "true"
  32. KubeVirt • Виртуалки и контейнеры в одной платформе • Накопленные

    знания будут использованы • Поддержка со стороны сообщества Pros:
  33. KubeVirt • Виртуалки и контейнеры в одной платформе • Накопленные

    знания будут использованы • Поддержка со стороны сообщества Pros: • Документация оставляет желать лучшего • Поведение при больших нагрузках неизвестно • Оverhead в виде контроллеров Cons:
  34. 2 Способ развертывания — как у заказчика Kubernetes не резиновый:

    под виртуалки сейчас ресурсов нет 3 4 На полноценный запуск потребуется 1–2 месяца: Разработчику нужно знать Kubernetes Оценка реализуемости 1 • подготовка образов ВМ • расширение и настройка кластера • доработка CI • настройка доступов • обучение и документация
  35. 2 Способ развертывания — как у заказчика Kubernetes не резиновый:

    под виртуалки сейчас ресурсов нет 3 4 На полноценный запуск потребуется 1–2 месяца: Разработчику нужно знать Kubernetes Оценка реализуемости 1 • подготовка образов ВМ • расширение и настройка кластера • доработка CI • настройка доступов • обучение и документация
  36. • Есть все нужные образы ОС • Запустили тестовые стенды

    меньше, чем за месяц • Terraform + Ansible = «запуск по клику» • Неограниченное масштабирование Pros: Yandex Cloud
  37. • Есть все нужные образы ОС • Запустили тестовые стенды

    меньше, чем за месяц • Terraform + Ansible = «запуск по клику» • Неограниченное масштабирование Pros: • Трудно предсказать затраты • Нагрузка на внешний канал связи • Нет установки ОС по сети (PXE), из ISO-образов Cons: Yandex Cloud
  38. Контакты Гайнанов Руслан Тимлид команды DevOps в дивизионе продуктовой разработки

    ГК Иннотех Виртуальные машины в Kubernetes: как и (главное) зачем?