为安全容器配置资源
安全容器运行于虚拟化隔离的轻量级虚拟机内,因此资源的配置应分为两部分:对轻量级虚拟机的资源配置,即Host资源配置;对虚拟机内容器的配置,即Guest容器资源配置。以下资源配置均分为这两部分。
资源共享
由于安全容器运行于虚拟化隔离的轻量虚拟机内,故无法访问Host上某些namespace下的资源,因此启动时不支持--net host,--ipc host,--pid host,--uts host。
当启动一个Pod时,同一个Pod中的所有容器默认共享同一个net namespace和ipc namespace。如果同一个Pod中的容器需要共享pid namespace,则可以通过Kubernetes进行配置,Kubernetes 1.11版本该值为默认关闭。
限制资源
对资源的限制建议在configuration.toml中进行配置。 常用的字段的有:
- default_vcpus :指定每个SB/VM的默认vCPU数量
- default_maxvcpus :指定每个SB/VM的默认最大vCPU数量
- default_root_ports :指定每个SB/VM的默认Root Ports数量
- default_bridges :指定每个SB/VM的默认bridges数量
- default_memory :指定每个SB/VM的默认内存大小,默认为1024 MiB
- memory_slots :指定每个SB/VM的内存插槽数量,默认为10
热插拔限制内存资源
内存热插拔对于容器在部署时内存动态分配来说是一项关键特性。由于安全容器是运行在虚拟机当中的,所以这一项特性需要VMM和guest kernel两方面的支持。目前kata在arm64上默认使用的QEMU和guest kernel都是支持这一特性的。除了VMM和guest kernel,内存热插拔还取决于依赖着固件的ACPI。在x86上,由于ACPI可以隐式地随固件一起启动,所以可以直接用QEMU去启动一个打开了ACPI的虚拟机。不过在arm64上的话,在使用内存热插拔之前就需要手动去安装UEFI ROM。
$ pushd $GOPATH/src/github.com/kata-containers/tests
$ sudo .ci/aarch64/install_rom_aarch64.sh #仅限ubuntu
$ popd