diff --git a/.github/workflows/build-kata-static-tarball-amd64.yaml b/.github/workflows/build-kata-static-tarball-amd64.yaml index faec28373c..6974d4962c 100644 --- a/.github/workflows/build-kata-static-tarball-amd64.yaml +++ b/.github/workflows/build-kata-static-tarball-amd64.yaml @@ -48,6 +48,7 @@ jobs: - qemu - qemu-snp-experimental - qemu-tdx-experimental + - stratovirt - rootfs-image - rootfs-image-tdx - rootfs-initrd diff --git a/.github/workflows/build-kata-static-tarball-arm64.yaml b/.github/workflows/build-kata-static-tarball-arm64.yaml index 89e019e6f7..c5b9775a32 100644 --- a/.github/workflows/build-kata-static-tarball-arm64.yaml +++ b/.github/workflows/build-kata-static-tarball-arm64.yaml @@ -33,6 +33,7 @@ jobs: - kernel-dragonball-experimental - nydus - qemu + - stratovirt - rootfs-image - rootfs-initrd - shim-v2 diff --git a/tools/packaging/kata-deploy/examples/nginx-deployment-stratovirt.yaml b/tools/packaging/kata-deploy/examples/nginx-deployment-stratovirt.yaml new file mode 100644 index 0000000000..41f9a8a403 --- /dev/null +++ b/tools/packaging/kata-deploy/examples/nginx-deployment-stratovirt.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment-stratovirt +spec: + selector: + matchLabels: + app: nginx + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + runtimeClassName: kata-stratovirt + containers: + - name: nginx + image: nginx:1.14 + ports: + - containerPort: 80 diff --git a/tools/packaging/kata-deploy/examples/test-deploy-kata-stratovirt.yaml b/tools/packaging/kata-deploy/examples/test-deploy-kata-stratovirt.yaml new file mode 100644 index 0000000000..dcb3517ce1 --- /dev/null +++ b/tools/packaging/kata-deploy/examples/test-deploy-kata-stratovirt.yaml @@ -0,0 +1,42 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + run: php-apache-kata-stratovirt + name: php-apache-kata-stratovirt +spec: + replicas: 1 + selector: + matchLabels: + run: php-apache-kata-stratovirt + template: + metadata: + labels: + run: php-apache-kata-stratovirt + spec: + runtimeClassName: kata-stratovirt + containers: + - image: k8s.gcr.io/hpa-example + imagePullPolicy: Always + name: php-apache + ports: + - containerPort: 80 + protocol: TCP + resources: + requests: + cpu: 200m + restartPolicy: Always +--- +apiVersion: v1 +kind: Service +metadata: + name: php-apache-kata-stratovirt +spec: + ports: + - port: 80 + protocol: TCP + targetPort: 80 + selector: + run: php-apache-kata-stratovirt + sessionAffinity: None + type: ClusterIP diff --git a/tools/packaging/kata-deploy/kata-cleanup/base/kata-cleanup.yaml b/tools/packaging/kata-deploy/kata-cleanup/base/kata-cleanup.yaml index 7cb8756891..8b5695f8ee 100644 --- a/tools/packaging/kata-deploy/kata-cleanup/base/kata-cleanup.yaml +++ b/tools/packaging/kata-deploy/kata-cleanup/base/kata-cleanup.yaml @@ -30,7 +30,7 @@ spec: - name: DEBUG value: "false" - name: SHIMS - value: "clh dragonball fc qemu-nvidia-gpu qemu-sev qemu-snp qemu-tdx qemu" + value: "clh dragonball fc qemu-nvidia-gpu qemu-sev qemu-snp qemu-tdx qemu stratovirt" - name: DEFAULT_SHIM value: "qemu" - name: CREATE_RUNTIMECLASSES diff --git a/tools/packaging/kata-deploy/kata-deploy/base/kata-deploy.yaml b/tools/packaging/kata-deploy/kata-deploy/base/kata-deploy.yaml index 8dde8962e7..8cd692f0ec 100644 --- a/tools/packaging/kata-deploy/kata-deploy/base/kata-deploy.yaml +++ b/tools/packaging/kata-deploy/kata-deploy/base/kata-deploy.yaml @@ -32,7 +32,7 @@ spec: - name: DEBUG value: "false" - name: SHIMS - value: "clh dragonball fc qemu qemu-nvidia-gpu qemu-sev qemu-snp qemu-tdx" + value: "clh dragonball fc qemu qemu-nvidia-gpu qemu-sev qemu-snp qemu-tdx stratovirt" - name: DEFAULT_SHIM value: "qemu" - name: CREATE_RUNTIMECLASSES diff --git a/tools/packaging/kata-deploy/local-build/Makefile b/tools/packaging/kata-deploy/local-build/Makefile index db9218ac22..0d64cd4cb7 100644 --- a/tools/packaging/kata-deploy/local-build/Makefile +++ b/tools/packaging/kata-deploy/local-build/Makefile @@ -35,6 +35,7 @@ all: serial-targets \ qemu-snp-experimental-tarball \ qemu-tarball \ qemu-tdx-experimental-tarball \ + stratovirt-tarball \ shim-v2-tarball \ tdvf-tarball \ virtiofsd-tarball @@ -115,6 +116,9 @@ qemu-tarball: qemu-tdx-experimental-tarball: ${MAKE} $@-build +stratovirt-tarball: + ${MAKE} $@-build + rootfs-image-tarball: ${MAKE} $@-build diff --git a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh index fcbade0113..cb93fd1a15 100755 --- a/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh +++ b/tools/packaging/kata-deploy/local-build/kata-deploy-binaries.sh @@ -30,6 +30,7 @@ readonly kernel_builder="${static_build_dir}/kernel/build.sh" readonly ovmf_builder="${static_build_dir}/ovmf/build.sh" readonly qemu_builder="${static_build_dir}/qemu/build-static-qemu.sh" readonly qemu_experimental_builder="${static_build_dir}/qemu/build-static-qemu-experimental.sh" +readonly stratovirt_builder="${static_build_dir}/stratovirt/build-static-stratovirt.sh" readonly shimv2_builder="${static_build_dir}/shim-v2/build.sh" readonly virtiofsd_builder="${static_build_dir}/virtiofsd/build.sh" readonly nydus_builder="${static_build_dir}/nydus/build.sh" @@ -104,6 +105,7 @@ options: qemu qemu-snp-experimental qemu-tdx-experimental + stratovirt rootfs-image rootfs-image-tdx rootfs-initrd @@ -515,6 +517,28 @@ install_clh_glibc() { install_clh_helper "gnu" "${features}" "-glibc" } +# Install static stratovirt asset +install_stratovirt() { + local stratovirt_version=$(get_from_kata_deps "assets.hypervisor.stratovirt.version") + + latest_artefact="${stratovirt_version}" + latest_builder_image="" + + install_cached_tarball_component \ + "stratovirt" \ + "${latest_artefact}" \ + "${latest_builder_image}" \ + "${final_tarball_name}" \ + "${final_tarball_path}" \ + && return 0 + + info "build static stratovirt" + "${stratovirt_builder}" + info "Install static stratovirt" + mkdir -p "${destdir}/opt/kata/bin/" + sudo install -D --owner root --group root --mode 0744 static-stratovirt/stratovirt "${destdir}/opt/kata/bin/stratovirt" +} + # Install static virtiofsd asset install_virtiofsd() { latest_artefact="$(get_from_kata_deps "externals.virtiofsd.version")-$(get_from_kata_deps "externals.virtiofsd.toolchain")" @@ -742,6 +766,7 @@ handle_build() { install_qemu install_qemu_snp_experimental install_qemu_tdx_experimental + install_stratovirt install_runk install_shimv2 install_tdvf @@ -791,6 +816,8 @@ handle_build() { qemu-tdx-experimental) install_qemu_tdx_experimental ;; + stratovirt) install_stratovirt ;; + rootfs-image) install_image ;; rootfs-image-tdx) install_image_tdx ;; @@ -871,6 +898,7 @@ main() { log-parser-rs nydus qemu + stratovirt rootfs-image rootfs-initrd rootfs-initrd-mariner diff --git a/tools/packaging/kata-deploy/runtimeclasses/kata-runtimeClasses.yaml b/tools/packaging/kata-deploy/runtimeclasses/kata-runtimeClasses.yaml index e67cafe106..ae3c8c8e5c 100644 --- a/tools/packaging/kata-deploy/runtimeclasses/kata-runtimeClasses.yaml +++ b/tools/packaging/kata-deploy/runtimeclasses/kata-runtimeClasses.yaml @@ -102,3 +102,16 @@ overhead: scheduling: nodeSelector: katacontainers.io/kata-runtime: "true" +--- +kind: RuntimeClass +apiVersion: node.k8s.io/v1 +metadata: + name: kata-stratovirt +handler: kata-stratovirt +overhead: + podFixed: + memory: "130Mi" + cpu: "250m" +scheduling: + nodeSelector: + katacontainers.io/kata-runtime: "true" diff --git a/tools/packaging/kata-deploy/runtimeclasses/kata-stratovirt.yaml b/tools/packaging/kata-deploy/runtimeclasses/kata-stratovirt.yaml new file mode 100644 index 0000000000..ea27046d9c --- /dev/null +++ b/tools/packaging/kata-deploy/runtimeclasses/kata-stratovirt.yaml @@ -0,0 +1,13 @@ +--- +kind: RuntimeClass +apiVersion: node.k8s.io/v1 +metadata: + name: kata-stratovirt +handler: kata-stratovirt +overhead: + podFixed: + memory: "130Mi" + cpu: "250m" +scheduling: + nodeSelector: + katacontainers.io/kata-runtime: "true" diff --git a/tools/packaging/static-build/stratovirt/build-static-stratovirt.sh b/tools/packaging/static-build/stratovirt/build-static-stratovirt.sh new file mode 100755 index 0000000000..be02366046 --- /dev/null +++ b/tools/packaging/static-build/stratovirt/build-static-stratovirt.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2023 Huawei Technologies Co.,Ltd. +# +# SPDX-License-Identifier: Apache-2.0 + +set -o errexit +set -o nounset +set -o pipefail + +ARCH=$(uname -m) + +# Currently, StratoVirt only support x86_64 and aarch64. +[ "${ARCH}" != "x86_64" ] && [ "${ARCH}" != "aarch64" ] && exit + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${script_dir}/../../scripts/lib.sh" + +info "Get stratovirt information from runtime versions.yaml" +stratovirt_url="${stratovirt_url:-}" +[ -n "$stratovirt_url" ] || stratovirt_url=$(get_from_kata_deps "assets.hypervisor.stratovirt.url") +[ -n "$stratovirt_url" ] || die "failed to get stratovirt url" + +stratovirt_version="${stratovirt_version:-}" +[ -n "$stratovirt_version" ] || stratovirt_version=$(get_from_kata_deps "assets.hypervisor.stratovirt.version") +[ -n "$stratovirt_version" ] || die "failed to get stratovirt version" + +pull_stratovirt_released_binary() { + file_name="stratovirt-static-${stratovirt_version##*v}-${ARCH}" + download_url="${stratovirt_url}/releases/download/${stratovirt_version}/${file_name}.tar.gz" + + curl -L ${download_url} -o ${file_name}.tar.gz + mkdir -p static-stratovirt + tar zxvf ${file_name}.tar.gz -C static-stratovirt +} + +pull_stratovirt_released_binary + diff --git a/versions.yaml b/versions.yaml index cf650b7adc..5dc0084c9a 100644 --- a/versions.yaml +++ b/versions.yaml @@ -115,6 +115,11 @@ assets: url: "https://github.com/AMDESE/qemu" tag: "3b6a2b6b7466f6dea53243900b7516c3f29027b7" + stratovirt: + description: "StratoVirt is an lightweight opensource VMM" + url: "https://github.com/openeuler-mirror/stratovirt" + version: "v2.3.0" + image: description: | Root filesystem disk image used to boot the guest virtual