Использование WebAssembly в Kubernetes: от контейнеров к Wasm
Использование WebAssembly в Kubernetes: от контейнеров к Wasm

WebAssembly(Wasm)Первоначально создан для браузеров,Сейчас существоватьсуществовать серверная часть также становится все более популярной. существуют, мне кажется,Причина, по которой существование WebAssembly становится популярным в облачной экосистеме, заключается в том, что она относительно,включатьМеньший размер、Быстрее、Безопасность Сильный полипортативныйвысший пол

В этой статье я кратко представлю WebAssembly и объясню ее преимущества. Затем в следующей статье мы обсудим, как выполнять модули Wasm с помощью контейнерных инструментов, включая среды выполнения контейнеров низкого уровня, среды выполнения контейнеров высокого уровня и Kubernetes.

Что такое веб-сборка?

WebAssembly — это технология байт-кода общего назначения, позволяющая программам, написанным на различных языках (например, Go、Rust и C/C++) компилируется в байт-код, который может выполняться непосредственно в веб-браузере и на сервере.

WebAssembly был разработан с нуля для решения проблем с производительностью JavaScript. Используя WebAssembly, разработчики могут компилировать код в низкоуровневый двоичный формат, который выполняется в современных веб-браузерах со скоростью, близкой к исходной.

В марте 2019 года Mozilla выпустила системный интерфейс WebAssembly (WASI), спецификацию API, которая определяет стандартный интерфейс между модулями WebAssembly и средой хоста. WASI позволяет модулям Wasm безопасно получать доступ к системным ресурсам, включая сеть, файловую систему и т. д. Это значительно расширяет возможности запуска WebAssembly не только в браузере, но и на сервере.

Преимущества веб-сборки

WebAssembly предлагает несколько существенных преимуществ по сравнению с традиционными контейнерами:

  • быстрый:Wasm модуль обычно запускается в течение миллисекунд существования,Гораздо быстрее, чем традиционный контейнер,Это критически важно для рабочих нагрузок, требующих быстрого запуска, например бессерверных функций.
  • легкий:иконтейнерзеркалопо сравнению с,Wasm модуль обычно занимает меньше места и требует меньше CPU Ресурсы памяти.
  • Безопасность:Wasm модульсуществовать работает в строгой изолированной среде с базовым хостом. Операционная системаизоляция,Уменьшить потенциалсуществоватьиз Безопасностьлазейки。
  • портативный:Wasm модуль может существовать на различных платформах CPU Архитектурно работает безупречно, устраняя необходимость в различных операционных системаи CPU Комбинации, адаптированные для нужд различных контейнеров.

Вы можете проверить эту таблицу для подробного сравнения WebAssembly иконтейнер之间из差异:WebAssembly vs Linux Containerhttps://wasmedge.org/wasm_linux_container/

Запуск модулей Wasm в контейнерах Linux

Простой способ реализовать модули Wasm в экосистеме контейнеров — включить байт-код Wasm в образ контейнера Linux. В частности, операционную систему Linux внутри контейнера можно сократить до компонентов, необходимых для поддержки среды выполнения Wasm. Поскольку модули Wasm хранятся в стандартных контейнерах, они могут легко интегрироваться с любой существующей экосистемой контейнеров.

Упрощенная операционная система Linux имеет меньшую поверхность атаки, чем обычная операционная система Linux. Однако этот подход по-прежнему требует запуска контейнера Linux. Хотя операционная система Linux сокращена, на ее долю по-прежнему приходится 80% размера образа контейнера.

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

Воля Wasm модуль, встроенный в Linux Преимущество контейнеров заключается в том, что они обеспечивают плавную интеграцию с существующими средами, а также возможность Wasm получить выгоду от улучшения производительности. Однако при прямом Запуске модулей Wasm в среде выполнения контейнера с поддержкой По сравнению с Wasm этот метод менее эффективен.

Вообще говоря, время выполнения контейнера можно разделить на два уровня: время выполнения высокого уровня и время выполнения низкого уровня.

  • Среда выполнения контейнера низкого уровня:指из是符合 OCI Стандартная реализация может получить работоспособную файловую систему (rootfs) и файл конфигурации (config.json) для выполнения изолированных процессов. Среда выполнения контейнера низкого уровни прямого управления и запуска контейнера, например runc、crun、youki、gvisor и kata。
  • Расширенная среда выполнения контейнера:Этот компонент отвечает за передачуиуправлятьконтейнерзеркало,Разархивировать зеркало,И Воля передает его низкоуровневой среде выполнения для запуска контейнера. Расширенная среда выполнения контейнера упрощает управление контейнерами, абстрагируя низкоуровневые сложности выполнения.,использовать户能够通过相同из高级运行часуправлять各种Низкий уровень运行час。Containerd и CRI-O две популярные Расширенная среда выполнения контейнера。

мы можемсуществовать Низкий уровеньи Расширенная среда выполнения контейнеравключено в Wasm поддерживать.

Запуск напрямую через среду выполнения контейнера низкого уровня. Wasm модуль, есть несколько доступных опций, таких как crun и youki,Эти параметры имеют встроенную поддержку Wasm.

Запуск через расширенную среду выполнения контейнера Wasm модуль час,CRI-O и containerd Все это хороший выбор. Есть два возможных метода:

  • Во-первых, среда выполнения высокого уровня по-прежнему зависит от среды выполнения низкого уровня и вызывает среду выполнения низкого уровня для выполнения. Wasm модуль。
  • Другой способ containerd Есть программа под названием runwasi подпроект, вы можете разработать containerd-wasm-shim,直接и Wasm время выполнения (например, WasmEdge и Wasmtime)взаимодействовать。так containerd Может существовать, не полагаясь на низкоуровневые среды выполнения. Wasm модуль, но вызывайте его напрямую Wasm время выполнения. Это не только сокращает путь вызова, но и повышает эффективность.

Запуск модулей Wasm в Kubernetes

WebAssembly является движущей силой третьей волны облачных вычислений. Будучи стандартом де-факто в оркестрации контейнеров, Kubernetes продолжает развиваться, чтобы воспользоваться преимуществами, которые дает WebAssembly.

Для запуска рабочих нагрузок Wasm в Kubernetes необходимы два ключевых компонента:

  • использовать Wasm Работу узла управления во время выполнения можно интегрировать с помощью Расширенной. среда выполнения контейнера(нравиться containerd и CRI-O)и支持 Wasm Низкосортное время выполнения (например, crun и youki)Для достижения этой настройки。
  • отображено, чтобы иметь WebAssembly Узел времени выполнения RuntimeClass объект. Класс выполнения иметь дело с Kubernetes В кластере есть несколько проблем во время выполнения. Некоторые узлы могут поддерживать. Wasm время выполнения, в то время как другие узлы могут поддерживать обычное время выполнения контейнера. Вы можете использовать RuntimeClass Воля Wasm Рабочие нагрузки специально запланированы Wasm узел во время выполнения.

быть в Kubernetes включен на узле Wasm Поддерживается, можно использовать Kwasm Operator Автоматизируйте процесс вместо ручной установки с помощью Wasm 运行час库изконтейнер运行час。Kwasm(https://kwasm.sh/) это Kubernetes Оператор, который автоматически создает Kubernetes Узел добавлен WebAssembly поддерживать.Operator использовать kwasm-node-installer(https://github.com/KWasm/kwasm-node-installer) проект по изменению основного Kubernetes узел.

Подвести итог

WebAssembly Обеспечивает эффективный и действенный метод выполнения кода и Kubernetes ноэто强大изконтейнерплатформа оркестровки。Cloud Native WebAssembly существоватьсерверив облакахиспользовать Васм, использовать Kubernetes Подождите, пока инструменты оркестрации развернутся и будут управляться. Wasm приложение. Объединив эти технологии,Мы можем создавать гибкие, высокопроизводительные и масштабируемые облачные приложения. Эта конвергенция открывает инновационные возможности,Может разрабатывать передовую бессерверную архитектуру, решения для периферийных вычислений.,В то же время это обеспечивает совместимость в различных средах.

Исходная ссылка: https://www.cncf.io/blog/2024/03/12/webassembly-on-kubernetes-from-containers-to-wasm-part-01/

boy illustration
40 вопросов для собеседований по SpringBoot, которые необходимо задавать на собеседованиях! При необходимости ответьте на вопросы для собеседования SpringBoot [предлагаемый сборник] [легко понять]
boy illustration
Через два года JVM может быть заменен GraalVM.
boy illustration
Разрешение циклических зависимостей Spring Bean: существует ли неразрешимая циклическая ссылка?
boy illustration
Разница между промежуточным программным обеспечением ASP.NET Core и фильтрами
boy illustration
[Серия Foolish Old Man] Ноябрь 2023 г. Специальная тема Winform Control Элемент управления DataGridView Подробное объяснение
boy illustration
.NET Как загрузить файлы через HttpWebRequest
boy illustration
[Веселый проект Docker] Обновленная версия 2023 года! Создайте эксклюзивный инструмент управления паролями за 10 минут — Vaultwarden
boy illustration
Высокопроизводительная библиотека бревен Golang zap + компонент для резки бревен лесоруба подробное объяснение
boy illustration
Концепция и использование Springboot ConstraintValidator
boy illustration
Новые функции Go 1.23: точная настройка основных библиотек, таких как срезы и синхронизация, значительно улучшающая процесс разработки.
boy illustration
[Весна] Введение и базовое использование AOP в Spring, SpringBoot использует AOP.
boy illustration
Чтобы начать работу с рабочим процессом Flowable, этой статьи достаточно.
boy illustration
Байтовое интервью: как решить проблему с задержкой сообщений MQ?
boy illustration
ASP.NET Core использует функциональные переключатели для управления реализацией доступа по маршрутизации.
boy illustration
[Проблема] Решение Невозможно подключиться к Redis; вложенное исключение — io.lettuce.core.RedisConnectionException.
boy illustration
От теории к практике: проектирование чистой архитектуры в проектах Go
boy illustration
Решение проблемы искажения китайских символов при чтении файлов Net Core.
boy illustration
Реализация легких независимых конвейеров с использованием Brighter
boy illustration
Как удалить и вернуть указанную пару ключ-значение из ассоциативного массива в PHP
boy illustration
Feiniu fnos использует Docker для развертывания учебного пособия по AList
boy illustration
Принципы и практика использования многопоточности в различных версиях .NET.
boy illustration
Как использовать PaddleOCRSharp в рамках .NET
boy illustration
CRUD используется уже два или три года. Как читать исходный код Spring?
boy illustration
Устраните проблему совместимости между версией Spring Boot и Gradle Java: возникла проблема при настройке корневого проекта «demo1» > Не удалось.
boy illustration
Научите вас шаг за шагом, как настроить Nginx.
boy illustration
Это руководство — все, что вам нужно для руководства по автономному развертыванию сервера для проектов Python уровня няни (рекомендуемый сборник).
boy illustration
Не удалось запустить docker.service — Подробное объяснение идеального решения ️
boy illustration
Настройка файлового сервера Samba в системе Linux Centos. Анализ NetBIOS (супер подробно)
boy illustration
Как настроить метод ssh в Git, как получить и отправить код через метод ssh
boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.