~xdavidwu/cskloudv3-thesis

cskloudv3-thesis/Sections/5.Evaluation.tex -rw-r--r-- 16.0 KiB
b4127bf2Pinghao Wu appendix: survey: describe design 4 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
\chapter{實驗與評估}
\label{ch:evaluation}

本章節敘述本研究設計之 CSKloud 平台在系計中內部的小規模實驗場景,以及對平台成效的評估。

\section{實驗環境}

\begin{table}[htb]
    \centering
    \caption{CSKloud v3 內部實驗環境}
    \setlength{\tabcolsep}{5pt}
    \begin{tabular}{l || c | c}
        & Control plane & Worker nodes \\
        \hline\hline
        節點數量 & 3 & 3 \\ \hline
        CPU & \makecell{Intel(R) Xeon(R) CPU E5-2630 v3 \\ @ 2.40GHz, 4 vCPUs} & \makecell{Intel(R) Xeon(R) CPU E5-2630 v3 \\ @ 2.40GHz, 4 vCPUs} \\ \hline
        記憶體 & 8 GiB & 8 GiB \\ \hline
        虛擬化平台 & \multicolumn{2}{c}{VMware ESXi 6.7} \\ \hline
        作業系統版本 & \multicolumn{2}{c}{Debian GNU/Linux 12 (bookworm)} \\ \hline
        Kubernetes 版本 & \multicolumn{2}{c}{1.30.3} \\ \hline
        叢集建構方式 & \multicolumn{2}{c}{kubeadm, stacked etcd topology} \\
    \end{tabular}
\end{table}

實驗採用系計中標準的測試環境,並且依照一般使用慣例配置虛擬機,由於硬體資源短少,並非比照正式環境規模建構。未來實際上線時需將 worker nodes 大幅擴建才得以滿足系上的需求,根據上線後的實際熱門程度也需持續調整,甚至可以考慮將 worker nodes 轉為實體機的方式建構。

\begin{table}[htb]
    \centering
    \caption{CSKloud v3 實驗身份組與配額初步規劃}
    \label{tab:quota}
    \begin{tabular}{l || c | c | c | c}
         & CPU & 記憶體 & 永久儲存空間 & Ephemeral storage \\
        \hline\hline
        學生 & 0.5 / 1 & 1 / 2 GiB & 8 GiB & 1 / 10 GiB \\ \hline
        教授、助理 & 1 / 2 & 2 / 4 GiB & 16 GiB & 1 / 10 GiB \\ \hline
        單一容器預設佔有量 & 0.1 / 0.15 & 128 / 192 MiB & N/A & 50 / 256 MiB \\ \hline
        kubectl shell 佔有量 & 0.05 / 0.1 & 64 / 128 MiB & N/A & 8 / 512 MiB \\
    \end{tabular}
\end{table}\ref{tab:quota} 內部份項目以 / 分隔的兩個數值分別代表 request 量與 limit 量。Kubernetes 在運算資源的分配分為 request 與 limit 兩種,代表排程主要的參考值以及實際運行的限制值,允許工作負載在資源的取用上有爆發的可能。我們的主要服務場景為網頁服務架設,網頁服務的運算資源消耗與當下的流量大小高度相關,屬於具備爆發性的工作負載,因此我們也採納 request 與 limit 機制使得資源運用更有彈性。而表中的 ephemeral storage 意指容器在永久儲存空間外的資料寫入,包含運行紀錄以及容器內的其餘檔案系統空間的使用,這個類型一般不太容易預估,因此我們給予較寬鬆的限制,另外因為其使用量典型為持續累積(如容器無法主動刪除其運行紀錄),超過 limit 時 Kubernetes 會將容器重啟,為減少對使用者的影響,通常 limit 相對之下特別高。

單一容器預設佔有量以及 \ref{sec:kubectl-shell} kubectl shell 的佔有量也將影響使用者體驗,其中尤其是 kubectl shell 的佔有量,為了避免影響使用者權益,我們希望將他壓低,但又不應降到令使用者感到卡頓。另外在使用者不自行估計限制的情況下,單一容器預設佔有量除了影響能同時運行的容器數量,也影響到能夠運行的工作負載種類,在此方面最敏感的是記憶體,部份使用較多記憶體的程式可能會因為不足而異常中止,導致無法順利運行。對於這兩組佔有量的評估也是實驗要點之一。

對於配額的規劃在實驗階段與正式上線也將有所誤差,尤其對於 CPU 在測試環境用的是系計中的二線老舊硬體,改為正式用的一線新硬體時,配合效能的改變,應能再減少其配額量至一半左右。

\section{使用者問卷調查}

對於一個通用的雲端運算平台,由於各個使用者的使用情境及習慣不盡相同,為了準確的評估平台的效用,需要實行問卷調查以了解實際使用狀況。我們將問卷分為兩大部分,第一部份以 Post Study System Usability Questionnaire (PSSUQ)\cite{lewis2002psychometric} 分析整體平台的使用體驗,而第二部份再對平台的特定功能設計予以評估,並且加上對 Kubernetes 熟悉程度的自評,以了解受試者特性。問卷項目見\ref{ch:survey-items}。

PSSUQ 是常見針對軟體系統的標準問卷調查,根據歷史發展分為三個版本\cite{lewis2019measuring}。本研究採取的是第三版,共十六個項目(問卷中的第一至十六項),其中除了整體滿意度外,可分為三大類:System Usefulness(SysUse,第一至六項)、Information Quality(InfoQual,第七至十二項) 與 Interface Quality(IntQual,第十三至十五項)。每個項目包含一個敘述,受試者評估敘述對自身體驗的符合程度,回答一到七分的指標,兩端分別代表 ``Strongly Agree" 與 ``Strongly Disagree",並且附帶一 ``Not Applicable" (NA) 選項使受試者能夠選擇不參與特定項目的評比,減緩受試者的壓力。

第二部份(第十七至二十四項)沿用 PSSUQ 針對敘述賦予非強制性的一到七分指標形式,針對平台產品擴充,評估各項資源配額的設計,包含單一容器預設值以及 kubectl 頁面設定值,另外附加如局部功能與相似產品的比較敘述等的有效性評估。問卷採用 Google 表單,要求登入 Google 帳號以防止重複填寫,但不收集帳號資訊,以匿名方式進行。

\begin{table}[htb]
    \centering
    \small
    \setlength{\tabcolsep}{1.97pt}
    \caption{問卷調查結果}
    \label{tab:survey-result}
    % cat *.csv  | grep 2024 | cut -d ',' -f 2-25 | tr -d '"' | sed 's/,/ \& /g;s/&  &/\& \\scriptsize NA \&/g;s/$/ \\\\/;s/^/\& /;=' | wl-copy
    \begin{tabular}{l || c c c c c c | c c c c c c | c c c | c | c c c c c c c c c}
        & Q1 & Q2 & Q3 & Q4 & Q5 & Q6 & Q7 & Q8 & Q9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 & 20 & 21 & 22 & 23 & 24 \\
        \hline\hline
1 & 3 & 4 & 2 & 3 & 2 & 3 & 3 & 2 & 2 & 2 & 2 & 2 & 2 & 2 & 3 & 2 & 2 & 1 & 2 & 3 & 4 & 4 & 2 & 3 \\
2 & 2 & 3 & 2 & 2 & 2 & 2 & 3 & 3 & 3 & 4 & 3 & 3 & 2 & 4 & 5 & 3 & 3 & 5 & 3 & 2 & 5 & 6 & 3 & 4 \\
3 & 1 & 1 & \scriptsize NA & 1 & 1 & \scriptsize NA & 1 & 1 & 1 & 1 & 2 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 2 & 2 & 2 & 2 & 1 & 4 \\
4 & 2 & 2 & 1 & 2 & 2 & 3 & 2 & 2 & 2 & 2 & 1 & 2 & 2 & 1 & 2 & 2 & 2 & 1 & 2 & 2 & 3 & 3 & 2 & 3 \\
5 & 2 & 1 & 2 & 2 & 3 & 2 & 2 & 4 & 1 & 2 & 1 & 1 & 1 & 1 & 1 & 1 & 2 & 1 & 3 & 1 & 2 & 4 & 3 & 7 \\
        \hline
        \scriptsize 平均 & \scriptsize 2.00 & \scriptsize 2.20 & \scriptsize 1.75 & \scriptsize 2.00 & \scriptsize 2.00 & \scriptsize 2.50 & \scriptsize 2.20 & \scriptsize 2.40 & \scriptsize 1.80 & \scriptsize 2.20 & \scriptsize 1.80 & \scriptsize 1.80 & \scriptsize 1.60 & \scriptsize 1.80 & \scriptsize 2.40 & \scriptsize 1.80 & \scriptsize 2.00 & \scriptsize 1.80 & \scriptsize 2.40 & \scriptsize 2.00 & \scriptsize 3.20 & \scriptsize 3.80 & \scriptsize 2.20 & \scriptsize 4.20 \\ \hline
        \scriptsize 類別 & \multicolumn{6}{c|}{\footnotesize SysUse 2.08} & \multicolumn{6}{c|}{\footnotesize InfoQual 2.03} & \multicolumn{3}{c|}{\footnotesize IntQual 1.93} & & & & & & & & & \\ \hline
        \scriptsize 總體 & \multicolumn{16}{c|}{PSSUQ Overall 2.02} & & & & & & & &
    \end{tabular}
\end{table}\ref{tab:survey-result} 為本次問卷調查結果。七分指標中四分為中性,越低代表越同意項目敘述。除了第二十四項為受試者對自身於 Kubernetes 的熟悉程度自評外,其餘皆是對平台正面的敘述,由統計可得知,各項評比皆偏向正面,受試者對於平台大致是滿意的。若轉為百分制\footnote{轉換方式:由七分指標減一後,等比例放大至百分指標,再以一百減之改以高分為正向。},PSSUQ 方面整體達到了約 83 分。 % TODO finalize 後補 PSSUQ 三類分析

在第二部份的分析,項目十七顯示受試者對於平台對容器的預設資源限制持正面態度。項目十八對於 kubectl 頁面的互動效能,雖然大部分受試者相當同意足夠使用,然而有一個受試者給予了負面的回饋。對此我們推測可能是使用時受到系統層面穩定性因素影響,例如叢集節點所使用的虛擬機,其所在的實體機器上其他虛擬機的行為影響,或者近期系計中測試環境有觀測到資料儲存系統效能的不穩定狀況,皆有可能突發影響到效能。由於環境硬體上的差異,我們規劃在往後硬體資源充足時,改用正式規格硬體再來深究此情況。

雖然對平台整體的評比皆為正向,項目二十一與二十二分別顯示出了網頁界面以及其 kubectl 功能,在有其他方案的情況下仍有改善的空間。對於網頁界面,未來我們可持續新增網頁平台擅長的視覺化與互動功能,例如在 Kubernetes 下多數 resources 間有所關聯,或許可以開發透過點擊等互動方式,讓使用者在 resources 的相互關係間探索。而對於 kubectl 頁面,推測主要是 shell 環境因素,導致使用者較傾向自行安裝 kubectl 以在自己熟悉、經過客製化的 shell 環境使用。雖然立場上 kubectl 頁面僅是輔助功能,但若要使其更受歡迎,可以從擴充其容器內的常用指令、shell 的功能性下手。

% 或許可以寫對 Kubernetes 熟悉度自評分群分析 但樣本太少

\section{質性分析}

\subsection{Sparkles}

本研究實做的 CSKloud 平台中,網頁界面除了針對平台的整合外,其核心 Sparkles 作為一個 Kubernetes 客戶端開發設計,並且適用於非 CSKloud 的場景。我們將 Sparkles 獨立討論,與其他常見的 Kubernetes 客戶端比較,結果如表 \ref{tab:sparkles-comparison}\begin{table}[htb]
    \centering
    \caption{Sparkles 與常見 Kubernetes 客戶端比較}
    \label{tab:sparkles-comparison}
    \begin{tabular}{l || c | c | c | c}
        & Sparkles & kubectl & k9s & \hspace{1em}Lens\hspace{1em} \\
        \hline\hline
        界面形式 & 網頁 & CLI & TUI & GUI \\ \hline
        使用者安裝設定 & 不需 & 需要 & 需要 & 需要 \\ \hline
        配額細項追蹤 &&&&\\ \hline
        \makecell[l]{ServiceAccount \\ tokens 管理} && 流程較手動 &&\\ \hline
        \makecell[l]{YAML 編輯器 \\ 欄位提示補全} &&&&\\ \hline
        內建 Helm 功能 & \makecell{限內建 \\ Repository} && 無安裝、更新 &\\ \hline
        Port forwarding &&&&\\ \hline
        多叢集管理 &&&&\\ \hline
        開放原始碼 & 是 (MIT) & 是 (Apache-2.0) & 是 (Apache-2.0) &\\
    \end{tabular}
\end{table}\ref{tab:sparkles-comparison} 中的配額細項追蹤如 \ref{sec:quota} 所述,Kubernetes API 設計上只帶有總用量資訊,對於其中如每個容器的分別用量細項並沒有額外紀錄。為了讓使用者了解細項用量分佈,Sparkles 重現了 Kubernetes 內部計算用量的部份邏輯,以補足這些資訊。調查中的其他客戶端皆沒有類似功能,只有顯示 Kubernetes API 紀錄的總用量。

ServiceAccount tokens 功能管理則是指 \ref{sec:tokens-mgmt} 中,綁定 Secret 作為 tokens 撤銷手段以及效期、註記功能。kubectl 的界面較接近 Kubernetes API 設計,流程步驟需要分開處理,先以一個指令創立 Secret,再由另一個指令自 ServiceAccount 簽發綁定該 Secret 的 tokens,而 ServiceAccount 本身的創立以及授權也是另外處理。Lens 尚未整合上述 Kubernetes 1.22 後的簽發流程,但與此相似的是先前的單一無效期 token 機制。在 Kubernetes 1.22 前,創立 ServiceAccount 會自動產生一個對應的 Secret,內含一個無效期的永久 token。Lens 在 ServiceAccount 本身的呈現頁面可以自動產生含該 token 的連線設定檔。舊的無效期機制在現今的 Kubernetes 版本雖然留有手段能夠手動觸發,但因資訊安全因素已不建議使用。

Helm 功能在 Sparkles 上如 \ref{sec:helm} 所述,因技術限制僅能使用自行建立的單一 Helm Repository。k9s 沒有實做需要執行 Helm 模板的功能,只有達成顯示歷史、回滾、解除安裝等操作。Lens 則是有完整的功能。

Port forwarding 是指將容器或者 Service 的網路存取點,透過 Kubernetes API 內的代理功能轉發,在本地端提供存取,常用在除錯場景。Sparkles 由於網頁技術無法進行底層網路操作,無法達成,CSKloud 使用者需改用其他客戶端。未來若衍生出對此功能的強烈需求,可以考慮透過瀏覽器擴充程式,跳脫網頁技術框架另外實做。

多叢集管理意指在同個實例下,能夠切換連線設定組操作多個叢集。Sparkles 並未實做此功能,但能夠對不同叢集部屬專屬的實例,在不同網址下同時運作。CSKloud 的單一叢集設計場景則是沒有此需求。

在開放原始碼方面,Lens 原本採取 MIT 授權條款釋出,但約 2023 年九月時轉為專有軟體,不再提供原始碼存取。

\subsection{CSKloud v3}

\begin{table}[htb]
    \centering
    \caption{平台歷代架構比較}
    \label{tab:comparison}
    \begin{tabular}{l || c | c | c }
        & CScloud & CScloud with PEKOS & CSKloud v3 \\
        \hline\hline
        多租戶模型 & \multicolumn{3}{c}{單叢集、Namespace-based} \\ \hline
        租戶開通 & \makecell{Operator pattern、 \\ 手動觸發} & 網頁程式邏輯 & \makecell{Operator pattern、 \\ 自動觸發} \\ \hline
        租戶資訊來源 & LDAP & OIDC & OIDC \\ \hline
        租戶身份驗證 & \makecell{規劃為 \\ ServiceAccount} & OIDC & \makecell{OIDC、 \\ ServiceAccount} \\ \hline
        \makecell[l]{租戶直接存取 \\ K8s API} & 規劃 &&\\ \hline
        \makecell[l]{Admission \\ control 加固} && \makecell{Open Policy Agent \\ (webhooks)} & \makecell{標準 K8s 內建、 \\ CEL} \\ \hline
        平台安全性 &&&\\ \hline
        網頁界面架構 & 未定 & 單體式、伺服器渲染 & SPA \\ \hline
        界面功能性 & 未定 &&\\ \hline
        產品定位 & PaaS、網頁代管 & PaaS、網頁代管 & KaaS、網頁代管為主 \\ \hline
        原始碼模型 & 閉源 & 閉源 & Open-core \\
    \end{tabular}
\end{table}

CSKloud 發展至今,包含其前身 CScloud 的歷史,已經是第三代。CSKloud 除了以現代技術重構系統,以及大規模地補足平台功能外,在架構面也有不少改良變更,除了融合 CScloud 一二代的優缺點以外,也有些自己的突破,整體統合比較如表 \ref{tab:comparison}。

對於租戶開通,CSKloud 採取一代的 operator pattern 概念,比起純粹由網頁界面登入時執行流程,多了些管理上的介入空間,使管理者可以透過修改 resources 達到例外處理。Operator pattern 也有助於未來將其通用化實做使用者以外的租戶形式。比起一代,CSKloud 進一步將資料來源與驗證手段統合,實做全自動開通流程,使其仍然具有二代簡便、自動的優勢。對於身份驗證,CSKloud 則是將二代 OIDC 的安全與易用性,輔以一代 ServiceAccount 在自動化情景的簡便,提供使用者兩個不同面向的選擇。

在平台加固的部份,CSKloud 透過 Kubernetes 內建的 admission controller 以降低開發成本,以及避免自行實做邏輯後續跟隨 Kubernetes 演變而需修改的維護成本。二代採用的基於 Open Policy Agent 的 webhooks admission control 邏輯開發雖然富有彈性,然而開發與維護成本太高,在 CSKloud 中被棄用。在少數無法避免需自訂邏輯的部份,CSKloud 引入了 CEL,雖然彈性不如 webhooks 但已經足夠,並且有架構單純的優勢。

最後,CSKloud 對於網頁界面的 open-core 策略則有助於進一步開發客群,獲得更廣泛的使用者回饋,並且也可以借助開源社群來降低部份維護成本。