平台與維運 2026 年 6 月 28 日

2026-06-28 — SPO v1.0.0 穩定八項 K8s CRD API;Jaeger v2.18.0 ClickHouse 後端壓縮率達 8.6 倍

primary=https://www.cncf.io/blog/2026/06/26/security-profiles-operator-v1-stable-apis-security-hardened-and-shaping-upstream-kubernetes/ primary=https://github.com/kubernetes-sigs/security-profiles-operator/releases primary=https://www.cncf.io/blog/2026/06/23/building-jaegers-clickhouse-backend-8-6x-compression-on-10-million-spans/ primary=https://github.com/jaegertracing/jaeger/blob/v2.18.0/docs/adr/008-clickhouse-storage-schema.md

Kubernetes Security Profiles Operator 正式發布 v1.0.0,八項 CRD API 全面升級穩定

CNCF Blog · 2026-06-26

背景

Security Profiles Operator(SPO)是 Kubernetes SIG 維護的叢集附加元件,讓管理員以宣告式 Custom Resource 的方式管理 Linux 核心安全機制——seccomp、SELinux 與 AppArmor——而無需手動維護各節點上的 profile 檔案。歷經六年開發,v1.0.0 於 2026 年 6 月正式發布,是該專案首個穩定版本,作者為 Red Hat 的 Sascha Grunert。

在此之前,SPO 的所有 CRD API 均處於 v1alpha1v1alpha2v1beta1 狀態,其中 SeccompProfilev1beta1 已穩定運行超過四年。API 不穩定性是阻礙大規模生產採用的最主要障礙之一,此次畢業解決了長期懸而未決的問題。

核心改動

v1.0.0 將全部八個 CRD API 升至 v1,並加入轉換 webhook 提供零停機遷移路徑——舊版 API 請求會透明地轉換為 v1 格式儲存,現有資源無需同步刪除重建。API 結構本身也進行了多項修正:

  • 無號整數改為有號整數,符合 Kubernetes API 慣例
  • enum 值統一採用 PascalCase(logsLogsRUNNINGRunning
  • 布林欄位改為指標類型,支援三態語意(true / false / unset)
  • SPOD spec 欄位重組為子結構,SecurityProfileNodeStatus 欄位移至 Spec/Status 分區
  • AppArmorProfile 新增至 ProfileBinding 的可接受 kinds
  • 所有欄位補全 +optional+required 標記與驗證 marker

規格細節

v1.0.0 發布前,SPO 接受了第三方安全稽核,審計結果為零個嚴重漏洞。稽核確認寫入主機的檔案路徑來自物件 metadata 而非使用者可控的 spec 欄位,CLI 指令以引數陣列形式組建,無 shell 注入攻擊面,且預設 RBAC 不向非管理員使用者授予多餘權限。

根據稽核發現,v1.0.0 新增了下列防護措施:

  • 新增 enableRawSelinuxProfiles 欄位至 SPOD 設定,允許叢集管理員完全關閉原始 SELinux CIL policy 支援
  • ValidatingAdmissionWebhook 在協調前拒絕無效的原始 policy,取代原先讓錯誤在 reconciliation 階段才浮現的行為
  • AppArmor 模板參數透過嚴格正則表達式進行輸入驗證,防範 ReDoS 攻擊
  • 原始 policy 大小上限設定為 500 KB,eBPF 錄製器加入路徑長度與檔案數量上限以防止 OOM

此版本同步推出 spoc CLI 工具,提供 amd64、arm64 及 ppc64le 架構的二進位檔。對應的 Kubernetes Enhancement Proposal 為 KEP-6061,預期部分功能將進入 Kubernetes 上游。

影響範圍

v1beta1 升級的使用者需參考官方遷移指南(doc/migration-guide-v1.md),其中涵蓋欄位重組與類型變更的對應說明。轉換 webhook 可自動處理 API 版本差異,但管理員仍需確認叢集中的自動化工具與 CI/CD pipeline 已更新至使用 v1 API。新安裝者可直接透過 OperatorHub 取得 v1.0.0

原始來源:CNCF Blog — Security Profiles Operator v1GitHub Releases


Jaeger v2.18.0 整合 ClickHouse 後端:一千萬筆 span 壓縮率達 8.6 倍

CNCF Blog · 2026-06-23

原本的問題

Jaeger 是 CNCF 旗下的分散式追蹤平台,長期以 Elasticsearch、Cassandra 等通用資料庫作為後端儲存。這些行導向(row-oriented)資料庫對追蹤資料中高度重複的欄位(服務名稱、操作名稱、狀態碼)壓縮效益有限,且執行服務效能監控(SPM)聚合查詢時吞吐量不足。

Jaeger v2.18.0 在 Meta 工程師 Mahad Zaryab 主導下,新增 ClickHouse 作為實驗性後端。ClickHouse 的列導向(columnar)儲存引擎天然適合重複性高的追蹤資料,並可直接在 span 資料上執行 SPM 聚合,毋需額外部署指標管線。

採用的方法

設計決策記錄於 ADR-008docs/adr/008-clickhouse-storage-schema.md)。方案以單一 spans 表為唯一寫入目標,衍生表全部由 materialized view 自動維護,包含 services、operations、trace_id_timestamps、attribute_metadata 與 dependencies 五張派生表。

主索引鍵排序順序選擇 (service_name, name, toDateTime(start_time)),以搜尋查詢為優先——Jaeger 最主要的互動是「依服務與操作名稱搜尋 span」,此設計讓搜尋成為直接主鍵查詢。代價是依 trace ID 取回完整 trace 的速度略慢,改以 Bloom filter 索引跳過不相關 granule 補償。資料表按 toDate(start_time) 進行每日分區,支援時間範圍查詢的 partition pruning。

屬性(attributes)採用 Nested 欄位按類型分欄儲存,取代 Map 類型或平行陣列:

  • bool_attributes Nested(key String, value Bool)
  • int_attributes Nested(key String, value Int64)
  • double_attributes Nested(key String, value Float64)
  • str_attributes Nested(key String, value String)
  • complex_attributes Nested(key String, value String)(用於 Bytes、Slice、Map)

Nested 欄位在壓縮率與過濾效能上均優於 Map 類型,且型別語意更清晰。另有 attribute_metadata 表記錄每個 (attribute_key, type, level) 三元組,讓 UI 搜尋查詢能快速解析屬性類型而不需全表掃描。

實際效果

在一千萬筆 span 的基準測試中,spans 表資料量從 6 GiB 壓縮至約 722 MiB,壓縮率達 8.6 倍。索引配置如下:

欄位索引類型用途
trace_idbloom_filter(granularity 1)高基數 trace ID 針查
durationminmax(granularity 1)持續時間範圍過濾

查詢延遲方面,trace 取回約 100 ms,多數搜尋查詢低於 50 ms,複雜過濾查詢約 140 ms;寫入吞吐量可達每秒 50,000+ 筆 span。快速啟動方式:

docker compose -f docker-compose/clickhouse/docker-compose.yml up -d
go run ./cmd/jaeger \
  --config cmd/jaeger/config-clickhouse.yaml \
  --feature-gates=storage.clickhouse

目前 ClickHouse 後端標記為實驗性(experimental),需明確啟用 feature gate,支援 ClickHouse 25.x,schema 在未來版本仍可能出現 breaking change。

原始來源:CNCF Blog — Jaeger ClickHouse BackendADR-008


End of article
0
Would love your thoughts, please comment.x
()
x