讓我們從「雲原生 (Cloud Native)」開始談起。
根據 CNCF(Cloud Native Computing Foundation) 的定義,雲原生旨在讓企業能在公有、私有、混合雲的環境中,建立和執行可擴展的「應用程式」,而這些應用則以微服務為架構,以容器為基礎在雲端上執行。
總之,雲原生並不是一項技術,而是一個「生態」,該生態以容器技術為核心,發展出各式各樣的服務架構與技術,而企業則在雲端環境挑選合適的技術與服務架構,部署穩定、可擴展的應用服務給使用者。
那為什麼最近雲原生變成了一個熱門的「buzzword」呢?這就得談談伺服器與服務架構的演進了。
我們知道用程式碼把服務寫好後,會放在伺服器上執行讓使用者存取。而最初的伺服器就是一台「實體電腦」,但如果一堆服務都跑在一台實體伺服器上,可能會造成套件、版本、環境之間的衝突,但是幫每個服務都買一台實體機顯然不划算,因此有了「虛擬機」的出現。
在實體電腦上模擬出多個虛擬機,讓每個服務都有自己的獨立環境,在具備隔離性的同時,環境的轉移也相當方便。不過虛擬機畢竟還是模擬了一整台電腦,對於服務來說有些功能根本用不到,所以虛擬機還是顯得有些肥大,所以後來就出現了容器。
容器在具備「隔離性高」與「環境轉移方便」的同時,遠比虛擬機來的更加輕量,因為容器只需要打包「服務本身」與其「相依的執行環境」,而不需要包含整個作業系統,所以不會像虛擬機那樣肥大。
以演進的方向來看,服務的執行環境正在朝著「輕量、獨立」的方向前進。
而容器的出現,則讓微服務架構的實踐更加如魚得水。在以前單體式架構的時代,所有功能都寫在同一個單元,隨然開發上較方便且直覺,但一旦某個小功能出錯可能會牽連到整個服務,且除錯、新增或刪除功能、版本更新時除了會影響整個服務之外,光是單元測試就要花不少時間。
而微服務的設計理念則是:
將服務中的每個小功能獨立出來,每個小功能彼此之間互相溝通、配合,對外看起來是一個服務整體,實際上則可以獨立的撰寫、除錯、部署、更新,在新增/刪除功能時也不用擔心影響到其他功能與整體服務。
容器的出現正好與微服務的設計理念不謀而合,將小功能打包成獨立的容器,完美的實現了微服務之間的「獨立性」,再搭配雲端平台提供的算力與各種便捷的部署、監控工具,「雲原生」就成為了現在大家常聽到的 buzzword 了。
講了那麼多,那剛開始提到的 CNCF 又是什麼來頭?CNCF 是一個由 Linux 基金會於 2015 年成立的組織,成員包括了 Google、IBM、Microsoft、AWS、Intel 等等,其宗旨為推廣雲原生技術的發展,用一句他們官網上的話來說就是:
“Make cloud native computing ubiquitous…” (讓雲原生無所不在)
與 CNCF 一起在 2015 年誕生的,就是 Kubernetes。
如果用一句話介紹 Kubernetes,就是:容器管理平台。
Kubernetes,簡稱「K8s」(因為 K 到 s 之間有 8 個字母),是一個用於自動化部署、擴展和管理容器化應用服務的開源平台。在微服務的架構下,可能有成百上千個容器,而這麼多容器該如何有效的管理,在目前 Kubernetes 就是最主流的解決方案。
K8s 的能夠做到以下幾點:
自動化部署與回滾:當應用程式需要更新時,K8s 會「逐步」的更新這些應用,並確保應用程式的運行狀態符合你的期望。如果這些更新有問題,K8s 也能依照你的需求回滾到以前的版本。
負載平衡 : K8s 能將網路流量平均分散到不同的容器上,讓應用服務能即使在流量高的情況下,仍然能穩定的被使用者存取。
自我修復 : 如果容器出現故障,K8s 會嘗試重啟故障的容器,在容器準備好之前不會向使用者開放。
水平擴展性 : 可以輕鬆擴展或縮減應用程式的規模,彈性的調整容器的數量,最佳化雲端算力資源的使用效率。
容易轉移 : 能快速地將一台機器上的應用服務迅速轉移到另一台機器上。
K8s 可用於多種應用場景,例如前面提到的「微服務」,或是 CI/CD 等 DevOps 環境中。
筆者在前一陣子開始學習 K8s,在今年八月份順利通過了 CKA (Certified Kubernetes Administrator) 認證,想藉由本次鐵人賽將自學 K8s 的入門筆記整理出來,並且分享 CKA 的考試技巧與心得,希望能夠幫助到 K8s 的初學者與正在準備 CKA 考試的讀者。
在開始閱讀文章之前,以下三項技能建議先點起來:
每項的學習成本大約 0.5 ~ 1.5 小時左右,了解最基本的即可~
Linux 基本操作能力:cd、ls、chmod、grep、mkdir、tail、curl、systemctl、標準化輸出、管線等等的操作就不多提了,重點是熟悉 vim 的操作方式,例如游標移動、新增行數、回到上一步(undo)、存檔退出等等,因為之後會有許多時間在編輯 yaml,熟悉 vim 會方便許多。
了解基本的容器概念:至少要知道容器的基本概念,如果真的沒有概念,這裡提供三個步驟入門:
這裡提供一個相當不錯的影片教學:「30 分鐘 Docker 入門教程」。
網路的基本概念:例如 IP、Port、DNS、路由規則等等,可以去網路上找一篇講網路概論的文章補齊,簡單了解就好。
系列的開頭將會從 K8s 的基礎概念開始介紹,中間則會以 CKA 五大考試領域為章節,搭配實作來介紹不同的操作應用,最後在結尾分享 CKA 的考試技巧與心得,另外也將提供附錄做額外補充。
因此,章節的劃分大致規劃如下:
註:「*」為 CKA Optional,如果是專攻 CKA 的讀者,可以先跳過這個部分,後面有興趣再回來看(例如 helm)。
天數 | 主題 |
---|---|
Day 02 | Kubernetes 的架構與組件 |
Day 03 | 建立 Kubeadm Cluster + Bonus Tips |
Day 04 | Pod |
Day 05 | Pod 中的環境變數與指令 |
Day 06 | ReplicaSet、Deployment & StatefulSet |
Day 07 | Rolling Update & Rollback |
Day 08 | Namespace |
Day 09 | Service |
Day 10 | kubectl 基本操作彙整 |
Day 11 | *好用的專案部署工具 --- Helm |
天數 | 主題 |
---|---|
Day 12 | ConfigMap & Secret |
Day 13 | Volume 的三種基本應用 --- emptyDir、hostPath、configMap & secret |
Day 14 | PV、PVC & StorageClass |
天數 | 主題 |
---|---|
Day 15 | Manual Scheduling(上):nodeName & nodeSelector |
Day 16 | Manual Scheduling(下):Affinity & Taint |
Day 17 | Static Pod & DaemonSet |
Day 18 | *進階部署策略:Blue-Green & Canary |
Day 19 | 資源管理 --- Pod QoS、LimitRange & ResourceQuota |
天數 | 主題 |
---|---|
Day 20 | Kubernetes 的網路基本架構 |
Day 21 | TLS/SSL in Kubernetes |
Day 22 | 憑證管理與kubeconfig |
Day 23 | Service 的路由 --- Ingress |
Day 24 | Pod 的守門員 --- Network Policy |
天數 | 主題 |
---|---|
Day 25 | Cluster upgrade |
Day 26 | etcd 的備份與還原 |
Day 27 | 權限管理 (一):RBAC |
Day 28 | 權限管理 (二):Service Account |
Day 29 | 權限管理 (三):Security Context |
天數 | 主題 |
---|---|
Day 30 | Pod 的生命週期與監控 |
Day 31 | Troubleshooting 小技巧 |
在文章的內容方面,系列的章節雖然以 CKA 的考試領域來劃分,但仍會提及 CKA 考試範圍之外的概念與相關實作,盡可能的涵蓋 K8s 的基礎操作,不會因為「這個考試不考、所以不寫了」。
目前 CNCF 比較重要的 K8s 相關認證有以下三張:
CKA 主要針對 Kubernetes 的操作與管理能力進行考核,較偏向「管理」,CKAD 則偏向「開發」,而 CKS 偏向「資安」。
CKA 考試均為實作題,15~20 題不等,需要在兩小時內寫完,考試範圍有五大領域:
Domain | weight |
---|---|
Storage | 10% |
Troubleshooting | 30% |
Workloads & Scheduling | 15% |
Cluster Architecture, Installation & Configuration | 25% |
Services & Networking | 20% |
五大領域下面還有更細的子領域,可參考 CKA 官網
CKA 考試的及格分數為 66 分,筆者在今年八月順利通過了考試:
考試成績:
證書:
今天我們從雲原生談起,從容器、微服務談到了 Kubernetes,簡單介紹了 Kubernetes 的特色,最後提到了本次鐵人賽的文章規劃與目標,希望透過基礎概念的介紹與實作,幫助到想入門 Kubernetes 或正在準備 CKA 的讀者!
參考資料