中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

K3s + Sysbox:讓(rang)容器擁有“虛擬機的靈(ling)魂”

K3s 二進制文件集成了運行生產級、符合 CNCF 標準的 Kubernetes 集群所需的全部組件,包括 containerd、runc、kubelet 等。在本文中,我們將介紹 containerd 如何與 OCI runtime 通信,并探討如何在 K3s 中添加另一個容器運行時 —— Sysbox,以及它在運行系(xi)統級(ji) Pod 時的應(ying)用場(chang)景。

Containerd 與 Runc 的關系

首先,讓我們簡要了解一下 containerd 是如何與 runc 協作的。containerd 是一個常駐(zhu)的(de)守護進程,主要(yao)負責以下任務:

  • 鏡像管理:從鏡像倉庫拉取并存儲鏡像。
  • 容器管理:管理容器生命周期(創建、啟動、停止、刪除)。
  • 快照管理:通過 snapshotter 管理容器文件系統層。
  • 運行時管理:將容器創建的任務委托給兼容 OCI 的運行時(如 runc)。

當你在 Kubernetes 中創建 Pod 時,kubelet 會通過 containerd 實現的 CRI 插件 向 containerd 發送請求,要求創建 Pod sandbox(RunPodSandbox)并創建容器(CreateContainer)。containerd 隨后會啟動一個 shim 進程,該進(jin)程在 containerd 與 OCI runtime(如 runc)之間充當中間層(ceng)。

shim 的存在有一個關鍵作用:即(ji)便(bian) containerd 守護(hu)進程崩潰或(huo)重啟,容器(qi)依然(ran)可以繼續運行。

在啟動過程中,shim 會生成 OCI runtime 所需的 bundle(包括 config.json 和 rootfs 路徑),然后調用 runc 二進制文件。runc 讀取 config.json,配置容器的 namespace 和(he) cgroup,最(zui)后啟動容器進程。

runc 是直接與 Linux 內核交(jiao)互的組件——它負責(ze)配置 cgroup、namespace、seccomp、權(quan)限和掛(gua)載(zai)。當容(rong)器創(chuang)建完(wan)成后,runc 就會退出,shim 則(ze)繼續負責(ze)容(rong)器生(sheng)命(ming)周期與 I/O 的管理。

Sysbox Runtime 簡介

是由 Nestybox 創建的開源新一代容器運行時。與傳統的 runc 不同,Sysbox 專為運行 “系統容器(system containers)” 而設計。它利用 Linux 用戶命名空間(user namespaces) 以及(ji)其他內核特性,為容器提(ti)供更(geng)接近輕(qing)量虛(xu)擬機的(de)行為。

這意味著,你可以在一個 Pod 中運行 Docker、Systemd、containerd,甚至 K3s 本身——而無需使(shi)用(yong)特權模式(privileged mode)。

簡(jian)而言(yan)之,Sysbox 填補了應(ying)用容(rong)器與虛擬機之間的空白。它(ta)的典型應(ying)用場景包括:

  • 在 Kubernetes 中運行 Kubernetes(K8s-in-K8s)。
  • 構建需要完整操作系統環境的 CI/CD 流水線。
  • 提供具備虛擬機隔離級別但速度接近容器的開發環境。

目前,Sysbox 官方僅支持 CRI-O
CRI-O 原生支持 Linux 用戶命名空間,這是 Sysbox 運行的基礎。
雖然 containerd 自 v2.0 起也(ye)加入了 user namespace 支持(chi),但此前 sysbox-runc 存(cun)在(zai)一個 bug,導(dao)致(zhi)與 containerd 不兼容。

Sysbox-runc 與 Containerd 的集成

經過排查這個問題之后,我們發現問題的根源在于 containerd 無法執行 sysbox-runc 的一個子命令 features,導致(zhi)出現以下錯(cuo)誤(wu):

level=debug msg="failed to introspect features of runtime \"sysbox-runc\"" error="failed to unmarshal Features (*anypb.Any): type with url : not found"

由于無法正確檢測到 Sysbox 的功能特性,containerd 認為 sysbox-runc 不支持 user namespace,進而導致容器創建失敗。該問題現已在 sysbox-runc 倉庫(ku)中修復,使得 containerd 能夠(gou)正(zheng)確地與 sysbox-runc 協(xie)作運(yun)行。

在 K3s 中運行 Sysbox-runc

若(ruo)要(yao)(yao)在(zai)(zai) K3s 中(zhong)使用(yong) sysbox-runc,你需要(yao)(yao)首先擁有一個已運(yun)行的(de) K3s 集群。然后安裝最(zui)新版(ban)本的(de) Sysbox。但(dan)由于 containerd 支持修復(fu)尚未合(he)并到 Sysbox 主倉庫(ku)(僅在(zai)(zai) sysbox-runc 中(zhong)),因此需要(yao)(yao)從源碼構建最(zui)新版(ban)。

1. 安裝 Docker

在構建 Sysbox 之前,請(qing)確保系統中已安裝 Docker。

2. 克隆倉庫并準備代碼

git clone --recursive //github.com/nestybox/sysbox.git

cd sysbox/sysbox-runc
git pull origin main
cd ..

make IMAGE_BASE_DISTRO=ubuntu IMAGE_BASE_RELEASE=jammy sysbox-static

構建完成后,你可以將生成的二進制文件復制到 /usr/bin,或(huo)者直接(jie)在同(tong)一臺運行(xing) containerd 的機器上(shang)執(zhi)行(xing):

make install

3. 啟動 Sysbox

sysbox

4. 創建 Sysbox RuntimeClass

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: sysbox-runc
handler: sysbox-runc

5. 在 containerd 中添加 Sysbox 運行時配置

創建文件 /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl

[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.sysbox-runc]
  runtime_type = "io.containerd.runc.v2"

[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.sysbox-runc.options]
  SystemdCgroup = false
  BinaryName="/usr/bin/sysbox-runc"

6. 使用 Sysbox 運行 Pod

apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
spec:
  runtimeClassName: sysbox-runc
  hostUsers: false
  containers:
    - name: ubuntu2204
      image: ubuntu:22.04
      command: ["sleep", "40000000000"]
  restartPolicy: Never

總結

Sysbox 為 Kubernetes 帶來了新的能力:它允許在容器中運行系統級工作負載,具備強隔離性,同時不依賴特權模式。結合 K3s 使用后,它可以實現以下(xia)創新場景(jing):

  • 在 Kubernetes 中運行 Kubernetes(如 )。
  • 為開發者提供安全、輕量的類似于虛擬機的沙箱。
  • 在 Pod 中運行系統守護進程或嵌套的容器引擎。

雖然目前 Sysbox 官方僅支持 CRI-O,但隨著 sysbox-runc 的修復,它已經可以與 containerd 正常配合(he)使用,從而實現與 K3s 的(de)集成。

這也標(biao)志著容器生態的發展方向(xiang)正在從傳(chuan)統的“應用(yong)容器”,逐步邁向(xiang)更(geng)加靈(ling)活、具備(bei)系統級能(neng)力的“系統容器”。

如果你(ni)正在使(shi)用(yong) K3s,并希望在 Pod 中探索系統(tong)級工作負載,Sysbox 無疑(yi)是一個值得(de)(de)嘗試的方案,它讓你(ni)在保(bao)持原(yuan)生 Kubernetes 工作流的同時(shi),獲得(de)(de)接近虛(xu)擬(ni)機的隔(ge)離體(ti)驗。

posted @ 2025-10-28 15:11  k3s中文社區  閱讀(112)  評論(0)    收藏  舉報