Добро пожаловать в Quark Container.
Этот репозиторий является домом для кода Quark Containers.
Quark Container — это высокопроизводительная безопасная среда выполнения контейнера со следующими функциями:
Срезы производительности — Performance.pdf. Подробные этапы тестирования и результаты приведены здесь.
Quark Container использует классическую архитектуру виртуальной машины Linux, как показано ниже. Он включает в себя гипервизор QVisor и гостевое ядро QKernel. В отличие от обычной конструкции виртуальной машины Linux, в которой стандартный образ ОС, такой как Linux/Windows, может работать на Qemu. QVisor и QKernel тесно связаны. QVisor поддерживает только QKernel.
Высокоуровневый дизайн Quark Container показан ниже. Он обрабатывает запрос приложения-контейнера, выполнив следующие шаги.
Quark Container поддерживает передачу TCP-трафика приложения-контейнера с помощью соединения RDMA, т. е. TSoR. TSoR является поставщиком контейнерной сети в кластере K8S, и существующее контейнерное приложение на основе TCP может передавать данные через RDMA без ЛЮБЫХ модификаций. Поскольку TSoR разгружает рабочую нагрузку стека протоколов TCP/IP на сетевой адаптер RDMA. Он может обеспечить более высокую пропускную способность, низкую задержку и меньшую нагрузку на процессор. Результат теста TSOR — это результат эталонного теста Redis со сравнением Quark + TSoR и RunC + Flannel. TSoR демонстрирует увеличение пропускной способности в 5 раз по сравнению с Flannel. Архитектура TSoR показана ниже. Введение здесь
Quark в первую очередь поддерживает X86-64. Поддержка aarch64 является предварительной и находится в стадии активной разработки. Другая архитектура будет доступна в будущем.
Quark разработан на языке Rust. Сборка требует установки Rust каждую ночь. Пожалуйста, используйте текущую заведомо исправную версию nightly-2023-12-11-x86_64-unknown-linux-gnu
(замените x86_64
на aarch64
для сборки aarch64)
rustup toolchain install nightly-2023-12-11-x86_64-unknown-linux-gnu
rustup default nightly-2023-12-11-x86_64-unknown-linux-gnu
Добавьте компонент ржавчины-src в текущую цепочку инструментов:
rustup component add rust-src
И установите «cargo-xbuild» для кросс-компиляции qkernel.
cargo install cargo-xbuild
Установить библиотеку libcap
sudo apt-get install libcap-dev
Также несколько дополнительных библиотек для компиляции модуля RDMA:
sudo apt-get install build-essential cmake gcc libudev-dev libnl-3-dev
libnl-route-3-dev ninja-build pkg-config valgrind python3-dev cython3
python3-docutils pandoc libclang-dev
А также несколько дополнительных библиотек для компиляции модуля GPU:
(Обратите внимание, что вы можете выполнить следующие команды даже на машине, отличной от nvidia, чтобы получить возможность компилировать модуль графического процессора.)
sudo apt-get install libelf-dev nvidia-driver-535
git clone [email protected]:QuarkContainer/Quark.git
cd Quark
make
make install
make cuda_all
make install
make install
. «quark» содержит код QVisor, а также реализует интерфейс OCI.sudo mkdir /var/log/quark
sudo systemctl restart docker
Пример приложения hello-world docker можно запустить, как показано ниже:
sudo systemctl restart docker
sudo systemctl restart docker.service
docker run --rm --runtime=quark hello-world
Файл конфигурации Quark Container находится по адресу /etc/quark/config.json. Детали конфигурации пока не определены...
Журнал отладки Quark Container помещается в /var/log/quark/quark.log. Его можно включить или отключить с помощью «DebugLevel» в /etc/quark/config.json. Существует 5 возможных значений «DebugLevel», как показано ниже.
Off,
Error,
Warn,
Info,
Debug,
Trace,
Когда журнал включен, например Debug. После запуска образа Docker с помощью Quark Container журналы будут созданы в файле /var/log/quark/quark.log. Дополнительные советы по отладке см. в вики.
Перейдите по этой ссылке, чтобы настроить k8s с использованием Quark-контейнера и поддержки RDMA.
Quark теперь имеет предварительную поддержку aarch64 (все еще находится в активной разработке).
Примечания к новым архитектурам Arm64 :
В более новых архитектурах Arm64 в pstate добавляется бит PAN (Privilege Access Never), который предотвращает доступ ядра (el1) к пользовательской памяти (el0). Полная поддержка находится в стадии незавершенного производства. В качестве временного решения мы просто очистим PAN в qkernel. Для этого вам нужно вручную применить этот патч
~quark/[email protected]
. Чтобы подписаться на список рассылки, отправьте пустое электронное письмо на ~quark/[email protected]
Чтобы узнать больше об использовании списка рассылки, см. этикет списка рассылки.