Cấu hình runtime-rs và Kernel chuyên biệt cho Kata Containers
Chúng ta cần cài đặt runtime-rs (Kata 2.x) thay vì runtime cũ để tận dụng hiệu năng Rust và khả năng mở rộng cho các workload AI.
Trước tiên, hãy thêm repository chính thức của Kata Containers và cài đặt các thành phần cốt lõi bao gồm runtime, shim và agent.
sudo apt-get update
sudo apt-get install -y qemu-system-x86 virtiofsd kata-runtime kata-containerd
Kết quả: Các gói phần mềm được cài đặt thành công, không có lỗi phụ thuộc.
Bây giờ, hãy cấu hình file chính của containerd để sử dụng runtime-rs làm mặc định cho các container yêu cầu bảo mật cao.
Đường dẫn file: /etc/containerd/config.toml
Nội dung hoàn chỉnh (chú ý phần [plugins."io.containerd.grpc.v1.cri".runtimes.kata]):
version = 2
root = "/var/lib/containerd"
state = "/run/containerd"
disabled_plugins = []
oom_score = 0
imports = []
[grpc]
address = "/run/containerd/containerd.sock"
uid = 0
gid = 0
[debug]
level = "info"
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".runtimes]
[plugins."io.containerd.grpc.v1.cri".runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".runtimes.kata]
runtime_type = "io.containerd.kata.v2"
pod_annotations = ["io.katacontainers.config"]
pod_annotations = ["io.katacontainers.sandbox"]
Kết quả: Containerd được cấu hình để nhận diện runtime "kata" bên cạnh "runc" thông thường.
Khởi động lại containerd để áp dụng cấu hình mới.
sudo systemctl restart containerd
Kết quả: Dịch vụ containerd chạy lại mà không báo lỗi (check bằng `systemctl status containerd`).
Để tối ưu cho AI, chúng ta cần tùy chỉnh kernel của Kata để hỗ trợ các thiết bị GPU và tăng tốc độ I/O.
Đường dẫn file: /usr/share/containers/cri-o/conf/99-kata.conf (hoặc tùy thuộc vào distro, thường là /etc/kata-containers/kata-containers.conf). Ở đây chúng ta dùng cấu hình runtime-rs chuẩn.
Tạo file cấu hình tùy chỉnh: /etc/kata-containers/kata-containers.conf
[hypervisor]
kernel_params = "systemd.unified_cgroup_hierarchy=1"
machine_type = "q35"
block_driver = "virtio-blk"
virtio_fs_cache = "always"
virtio_fs_cache_size = "0"
virtio_fs_cache_threshold = "0"
[agent]
kernel = "/usr/lib/kata-containers/kernel/vmlinuz-5.15.0-kata1"
image = "/usr/lib/kata-containers/fs/filesystem.img"
Chú ý: Nếu kernel path khác trên hệ thống của bạn, hãy điều chỉnh đường dẫn trong [agent].
Kết quả: Runtime sẽ khởi động vMachine với kernel hỗ trợ cgroup v2 và driver block tối ưu cho throughput dữ liệu lớn của AI.
Verify: Kiểm tra xem runtime-rs đã được nhận diện chưa.
crictl info | grep -A 5 "runtimes"
Kết quả mong đợi: Trong output, bạn thấy key "kata" với runtime_type là "io.containerd.kata.v2".
Tối ưu hóa hiệu năng khởi động vMachine cho mô hình AI
Thiết lập shared memory và tài nguyên CPU
Các mô hình AI thường cần khởi tạo matrix lớn trong RAM. Kata Containers sử dụng shared memory giữa host và guest, cần cấu hình chính xác để tránh OOM hoặc chậm khởi động.
Chỉnh sửa file cấu hình của containerd để tăng shared memory cho sandbox Kata.
Đường dẫn file: /etc/containerd/config.toml (thêm hoặc chỉnh sửa phần [plugins."io.containerd.grpc.v1.cri"])
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".runtimes.kata]
runtime_type = "io.containerd.kata.v2"
privileged_without_host_devices = false
# Tăng shared memory mặc định cho AI workloads
sandbox_mounts = ["/dev/shm"]
# Cấu hình CPU pinning để giảm latency
cpu_manager_policy = "static"
Kết quả: Sandbox Kata sẽ được cấp quyền truy cập vào /dev/shm của host với kích thước lớn hơn mặc định.
Để giảm thời gian boot vMachine, chúng ta sử dụng tính năng "hotplug" và tối ưu hóa boot sequence bằng cách disable các dịch vụ không cần thiết trong guest OS của Kata.
Tạo file override cho systemd trong guest: /etc/kata-containers/systemd.d/99-disable-services.conf
[Service]
ExecStartPre=-/usr/bin/systemctl disable bluetooth.service
ExecStartPre=-/usr/bin/systemctl disable NetworkManager.service
ExecStartPre=-/usr/bin/systemctl disable udisks2.service
ExecStartPre=-/usr/bin/systemctl disable cups.service
Chú ý: File này sẽ được mount vào guest OS khi khởi tạo vMachine. Bạn cần đảm bảo runtime-rs của bạn hỗ trợ mount file config systemd (thường hỗ trợ từ version 2.4+).
Kết quả: Thời gian khởi động container giảm đáng kể (mục tiêu < 1 giây) do giảm số lượng service cần load trong guest.
Cấu hình GPU passthrough (NVIDIA)
Đối với workload AI, việc passthrough card GPU trực tiếp vào vMachine là bắt buộc. Kata hỗ trợ điều này thông qua NVIDIA Container Toolkit và plugin runtime.
Đầu tiên, cài đặt NVIDIA Container Toolkit trên host.
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit.gpg
curl -s https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
Kết quả: Toolkit được cài đặt, các driver GPU host đã sẵn sàng để passthrough.
Cấu hình containerd để sử dụng runtime NVIDIA với Kata.
Đường dẫn file: /etc/containerd/config.toml (Thêm runtime "nvidia-kata")
[plugins."io.containerd.grpc.v1.cri".runtimes]
[plugins."io.containerd.grpc.v1.cri".runtimes.nvidia-kata]
runtime_type = "io.containerd.kata.v2"
privileged_without_host_devices = false
pod_annotations = ["io.katacontainers.config"]
# Chỉ định runtime handler cho NVIDIA
runtime_handler = "nvidia"
Khởi động lại containerd.
sudo systemctl restart containerd
Kết quả: Runtime mới "nvidia-kata" xuất hiện trong danh sách runtimes.
Verify: Chạy một container thử nghiệm với GPU.
crictl run --runtime=nvidia-kata --gpus=all --privileged \
--name gpu-test \
--image nvidia/cuda:11.6.0-base-ubuntu20.04 \
--cmd nvidia-smi
Kết quả mong đợi: Output hiển thị thông tin GPU (NVIDIA-SMI) bên trong container, chứng tỏ GPU passthrough thành công qua Kata vMachine.
Cài đặt plugin Kata cho Kubernetes và kiểm tra trạng thái Node
Deploy Kata Runtime Class
Kubernetes cần biết cách gọi runtime Kata thông qua RuntimeClass. Đây là cầu nối giữa Pod spec và containerd runtime.
Tạo file YAML định nghĩa RuntimeClass cho Kata.
Đường dẫn file: /tmp/kata-runtimeclass.yaml
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: kata
handler: kata
scheduling:
nodeSelector:
katacontainers.io/runtime: "true"
Áp dụng vào cluster.
kubectl apply -f /tmp/kata-runtimeclass.yaml
Kết quả: RuntimeClass "kata" được tạo thành công.
Cấu hình Kubelet sử dụng Kata
Kubelet cần được cấu hình để hiểu về containerd runtime và các runtime class đã định nghĩa.
Chỉnh sửa file kubelet config: /etc/kubelet/kubelet-config.yaml (hoặc tùy distro).
Nội dung cần thêm/chỉnh sửa:
containerRuntime: "remote"
runtimeRequestTimeout: "15m"
# Đảm bảo kubelet biết về containerd socket
containerRuntimeEndpoint: "unix:///run/containerd/containerd.sock"
# Cấu hình runtime class mapping (tùy chọn nếu dùng CRI plugin mặc định)
runtimeClassMappings:
- runtimeClass:
name: kata
runtime:
path: ""
Khởi động lại kubelet.
sudo systemctl restart kubelet
Kết quả: Kubelet chạy lại và nhận diện được runtime class "kata".
Verify Trạng thái Node và Pod
Để đảm bảo node đã sẵn sàng cho Kata, kiểm tra label và taints (nếu có).
kubectl describe node | grep -A 5 "Allocated resources"
kubectl get runtimeclass
Kết quả mong đợi: Node hiển thị trạng thái Ready và RuntimeClass "kata" xuất hiện trong danh sách.
Chạy một Pod thử nghiệm sử dụng runtime Kata để xác nhận toàn bộ pipeline hoạt động.
Đường dẫn file: /tmp/test-kata-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: kata-secure-ai-test
spec:
runtimeClassName: kata
containers:
- name: busybox
image: busybox:1.34
command: ["sleep", "3600"]
resources:
limits:
memory: "512Mi"
cpu: "500m"
Deploy pod.
kubectl apply -f /tmp/test-kata-pod.yaml
Kiểm tra pod đang chạy và xác minh nó chạy trên vMachine.
kubectl get pods -o wide
kubectl exec -it kata-secure-ai-test -- cat /proc/1/comm
Kết quả mong đợi:
1. Pod trạng thái "Running".
2. Output của `cat /proc/1/comm` trả về "kata-agent" hoặc "init" (tùy phiên bản), chứng tỏ container đang chạy bên trong vMachine của Kata, không phải trực tiếp trên kernel host.
Verify bảo mật: Thử truy cập /proc từ bên trong pod để đảm bảo các thiết bị host không bị lộ.
kubectl exec -it kata-secure-ai-test -- ls /proc/device
Kết quả mong đợi: Danh sách thiết bị bị giới hạn (chỉ có virtio, không có host devices như /dev/sda, /dev/nvidia0 trừ khi passthrough).
Điều hướng series:
Mục lục: Series: Xây dựng nền tảng Secure AI Sandbox với Kata Containers, gVisor và Policy Engine
« Phần 1: Chuẩn bị môi trường và kiến trúc nền tảng Secure AI Sandbox
Phần 3: Tích hợp gVisor để chạy các thư viện AI không tin cậy »