雲端與容器基礎
以三選一題型學習實現容器的命名空間與 cgroups、映像檔的層與寫入時複製、Dockerfile 的指令(RUN、CMD、ENTRYPOINT、COPY)、建置快取與指令順序、連接埠的公開、磁碟區與繫結掛載、標籤與摘要、多階段建置、Kubernetes 的 Pod、Deployment、Service、Ingress、Secret、調和與滾動更新、readiness/liveness 探測、自動擴展的計算、requests 與 limits、共同責任模型、可用區域、無伺服器、儲存的種類、隨需計費與預留方案的損益兩平點、資料傳輸費用、IaC、不可變基礎設施、藍綠部署與金絲雀部署,以及可觀測性。
雲端與容器基礎的重點
如今許多 Web 服務與企業內部系統,都以封裝在容器中的應用程式形式在雲端上運作。容器是在共用主機作業系統核心的同時隔離行程的機制,以 Docker 建置映像檔,再以 Kubernetes 這類平台把容器配置到許多機器上、維持數量並進行更新。
本單元從命名空間與 cgroups、映像檔的層與寫入時複製、Dockerfile 的指令與建置快取、連接埠的公開、磁碟區與繫結掛載、標籤與摘要、多階段建置開始,介紹 Kubernetes 的 Pod、Deployment、Service、Ingress、Secret、期望狀態的宣告與調和、滾動更新的計算、readiness 探測與 liveness 探測、HorizontalPodAutoscaler 的計算,以及 requests、limits 與 Pod 的配置。接著確認雲端的共同責任模型、區域與可用區域、無伺服器與冷啟動、區塊、檔案與物件儲存、隨需計費的費用與預留方案的損益兩平點、資料傳輸費用、IaC 與不可變基礎設施、藍綠部署與金絲雀部署、成品只建置一次的想法、以環境變數提供設定,以及可觀測性。計算題的數值,包括錯誤選項的數值,都已用 Python 計算確認。價格全部是虛構的數值。超管理器、容器與虛擬機器的差異在「作業系統與硬體」,IaaS、PaaS、SaaS、水平擴展、冗餘化、即時遷移與CDN在「系統架構與可靠度設計」,負載平衡器與工作階段在「Web技術基礎」,CI/CD在「軟體開發與專案管理」,SLA在「IT服務管理與系統稽核」,Shell 與環境變數則在「Linux與命令列基礎」單元中介紹。
雲端與容器基礎的題目列表(40題)
- 在實現 Linux 容器技術的核心功能中,命名空間(namespaces)與 cgroups(控制群組)的角色組合,下列何者正確?
- 在 Linux 主機上使用 Docker,從以與主機不同的發行版為基礎的映像檔啟動容器,並在其中執行 uname -r(顯示核心版次的指令)與 cat /etc/os-release(顯示發行版資訊的指令)。關於結果的說明,下列何者正確?
- 關於容器映像檔與容器的關係,下列何者正確?
- 在從某映像檔啟動的容器內,修改了映像檔中所含的設定檔 /etc/app.conf。在 Docker 一般的儲存機制(overlay2 等)下發生的事,下列何者正確?
- 為了解開500 MB的封存檔 data.tar.gz,以上面的 Dockerfile 建置映像檔。雖然解開後在同一個 RUN 中刪除了封存檔,映像檔仍然大了一個封存檔的大小。原因與對策的組合,下列何者最適當?
- 有5個映像檔,都在同一個基礎映像檔(120 MB)之上各疊加30 MB的專屬層。不考慮層的壓縮與中繼資料的容量。把這5個映像檔全部拉取(pull)到1台伺服器時,映像檔使用的磁碟容量為下列何者?
- 在上面的 Dockerfile 中,以 docker build 建置映像檔時執行的指令,與以 docker run 啟動容器時執行的指令,其組合下列何者正確?
- 以 docker run pinger example.com 啟動由上面的 Dockerfile 建置的映像檔 pinger。在容器內執行的指令為下列何者?
- 以上面的指令,從在連接埠80等待連線的 Web 伺服器映像檔 nginx 啟動容器。主機的IP位址為 192.0.2.10,且沒有防火牆等限制。從同一網路中另一台PC的瀏覽器連線到這個 Web 伺服器的URL,下列何者正確?
- 上面的 Dockerfile(B),是把在 COPY . . 之後放 RUN npm ci 的 Dockerfile(A),改成只先複製相依套件檔案的順序。npm ci 需要120秒、npm run build 需要30秒、COPY . . 需要2秒,其他指令的時間可忽略。每天20次只修改 src 底下的原始碼(不修改 package.json 與 package-lock.json)後重新建置映像檔。在可使用上次建置的快取時,以每天建置時間的合計來看,B 比 A 少的時間為下列何者?
- 在 Docker 中,關於為了保留容器寫入的資料而使用的具名磁碟區(named volume)與繫結掛載(bind mount),下列何者正確?
- 指定 registry.example.com/team/web:1.4 來拉取(pull)映像檔。這個指定中各部分意義的組合,下列何者正確?
- scratch 是不含任何檔案的空映像檔。以上面的多階段建置 Dockerfile 建置的最終映像檔所包含的內容,下列何者正確?
- 在 Kubernetes 中,作為部署與管理的最小單位,把1個以上的容器組合在一起並讓它們共用同一IP位址與磁碟區的是下列何者?
- 在 Kubernetes 中,指定 replicas: 3 的 Deployment 有3個 Pod 在執行。以 kubectl delete pod 刪除其中1個 Pod 時發生的事,下列何者正確?
- 在 Kubernetes 的 Deployment 中,把 Pod 範本中的容器映像檔改成新版本。在預設的更新方式(RollingUpdate)下發生的事,下列何者正確?
- 在 replicas: 10 的 Deployment 中,把滾動更新的設定設為 maxSurge: 25%、maxUnavailable: 25%。更新途中 Pod 總數的上限與可用 Pod 數的下限,其組合下列何者正確?
- 在 Kubernetes 中,Pod 每次重新建立時IP位址都會改變。讓其他應用程式能以不變的名稱與位址,連線到以標籤選出的多個 Pod 並分散負載的資源,是下列何者?
- 在 Kubernetes 叢集中,希望把到達同一個主機名稱的 HTTPS 要求中,路徑以 /api 開頭的分配給 api 的 Service,其他的分配給 web 的 Service。適合用來訂定這個分配規則的資源是下列何者?
- 把資料庫的密碼存放在 Kubernetes 的 Secret 中。關於 Secret 的說明,下列何者正確?
- 某個 Web 應用程式在啟動後到讀取完快取的約60秒內無法處理要求,這段期間對 /ready 回傳503。在 Pod 的容器加上上面的設定時,其效果下列何者正確?
- 在 Kubernetes 上的 Web 應用程式中,讓 liveness 探測的檢查處理連相依的資料庫能否連線都一併檢查。這個設定可能發生的問題,下列何者最適當?
- 在 Kubernetes 的 HorizontalPodAutoscaler 中,把 Pod 的CPU使用率目標設為70%,Pod 數的範圍設為1~10。目前5個 Pod 的平均CPU使用率為30%。以 ⌈目前數量 × 目前使用率 ÷ 目標使用率⌉(⌈ ⌉ 為無條件進位)求所需 Pod 數時,所需的 Pod 數為下列何者?
- 在 Pod 的容器做了上面設定的 Deployment 中,有4個 Pod 在執行,每個 Pod 都使用400m(0.4核心)的CPU。HorizontalPodAutoscaler 的CPU使用率目標為60%,所需 Pod 數以 ⌈目前數量 × 目前使用率 ÷ 目標使用率⌉ 求得。所需的 Pod 數為下列何者?
- 在 Kubernetes 中,關於為容器設定的資源 requests 與 limits,下列何者正確?
- 有一個可分配資源為CPU 4核心、記憶體 8 GiB 的節點。各 Pod 的容器設定了 requests 為CPU 500m、記憶體 1.5 GiB,limits 為CPU 1核心、記憶體 2 GiB。沒有其他 Pod 與系統預留。這個節點最多可放置的 Pod 數為下列何者?
- 使用雲端的託管資料庫服務(由業者營運資料庫軟體的服務)。依共同責任模型的想法,一般仍屬於使用者責任的是下列何者?
- 在雲端中,把 Web 伺服器與資料庫的複本分散放在同一區域(region)內的多個可用區域的主要目的,下列何者適當?
- 在無伺服器函式(FaaS)中,有時只有一段時間沒被呼叫的函式的第一次呼叫,回應會慢數百毫秒到數秒。關於這個現象的說明,下列何者正確?
- 把雲端儲存用於以下3種用途:①作為磁碟連接到虛擬機器並建立檔案系統,放置資料庫的資料檔;②從多台伺服器同時掛載,作為共用目錄使用;③透過 HTTP 的 API 指定鍵(名稱)讀寫大量圖片,且不預先決定容量而持續增加。適合①~③的儲存種類組合,下列何者適當?
- 使用每小時40日圓(虛構單價)、只依使用時間計費的虛擬機器。平常讓2台在1個月(30天)內持續運作,平日的20天每天只有6小時配合負載追加4台。1個月的費用為下列何者?
- 某虛擬機器以只付使用時間的隨需計費為每小時50日圓;以事先承諾使用1年的預留方案,則不論使用時間多少,1年為262,800日圓(兩者皆為虛構價格)。以1年為8,760小時,1年的使用時間超過某個時數時,預留方案會比較便宜。該時數為下列何者?
- 許多公有雲在資料傳輸費用上的一般作法,下列何者符合?
- 以宣告式的 IaC(基礎設施即程式碼)工具,套用定義了網路與2台虛擬機器組成的檔案,建立了環境。緊接著在不做任何變更的情況下再次套用同一個檔案,此時發生的事,下列何者適當?
- 依不可變基礎設施的想法,更新正式環境伺服器軟體的方法,下列何者適當?
- 準備2套與正式環境組成相同的環境,一套維持執行目前的版本,另一套放入新版本並確認後,一次切換負載平衡器的導向目標。若有問題,就把導向目標切回,立即回到原本的版本。這種發布方法是下列何者?
- 在每小時接收12,000件要求的服務中,以金絲雀部署發布新版本,只把5%的要求送到新版本。新版本有使所收要求的3%失敗的缺陷,1小時後發現並把所有要求切回原本的版本。這1小時內因缺陷而失敗的要求件數為下列何者?
- 以 CI/CD 管線建置的容器映像檔,在預備(staging)環境中測試並合格了。把這個映像檔發布到正式環境的方法,下列何者最適當?
- 如上所示,不把資料庫的連線目標寫進映像檔,而是在啟動容器時以環境變數傳入。這個設計的主要優點,下列何者最適當?
- 在多個服務協同運作的系統中,想調查使用者的1個要求依什麼順序經過了哪些服務、在各服務分別花了多少時間。在用於可觀測性的資料中,最適合的是下列何者?
電腦系統的其他領域
- 電腦算術 IEEE 754、定點數、捨入誤差
- 機率、統計與等候理論 情形數、機率分布、估計與檢定、M/M/1
- 資訊理論與編碼基礎 熵、霍夫曼編碼、漢明碼、CRC
- 指令集與組合語言 RISC-V、定址模式、呼叫慣例
- 編譯器 語法分析、SSA、最佳化、暫存器配置
- 連結器與載入器與執行檔格式 ELF、符號解析、重定位、動態連結
- 作業系統與硬體 中斷、系統呼叫、分頁錯誤
- Linux與命令列基礎 Shell、檔案權限、管線、腳本
- 記憶體階層與效能 快取、替換策略、三種失誤
- 多核心與同步 MESI、原子指令、記憶體屏障
- GPU程式設計 warp、共享記憶體、合併存取、佔用率
- AI硬體與軟體堆疊 推論與訓練、量化、Roofline模型
- 機器學習基礎 學習類型、評估指標與神經網路
- 嵌入式與韌體 GPIO、UART/SPI/I2C、RTOS
- 硬體描述語言與驗證 Verilog、閂鎖、狀態機、測試平台
- 介面與匯流排規格 PCIe、USB、SerDes、CXL
- 電腦網路基礎 TCP/IP、子網路計算、DNS、TLS
- Web技術基礎 HTTP、Cookie、REST、CORS、快取
- 無線通訊基礎 調變、OFDM、MIMO與射頻電路
- 資訊安全基礎 加密、驗證、網頁攻擊與對策
- 資料庫基礎 SQL、正規化、交易
- 資料結構與演算法 時間複雜度、搜尋、排序與圖
- 程式設計基礎(虛擬碼追蹤) 虛擬碼、追蹤、陣列與遞迴
- C語言基礎 指標、記憶體、未定義行為
- 軟體開發與專案管理 開發流程、測試、時程與成本管理
- 經營策略與會計基礎 會計、損益兩平點、經營策略、行銷
- IT服務管理與系統稽核 SLA、事件與問題、稽核與內部控制
- 系統架構與可靠度設計 備援、RAID、備份與雲端
- 效能評估與效能剖析 阿姆達爾定律、CPI、瓶頸
- 硬體安全 旁路攻擊、安全開機、TEE、PUF
- 電源管理(軟體控制) DVFS、電源閘控、睡眠狀態