身為一位 常常在使用容器的開發者
對於容器的管理是一件很重要的事情
特別是在大量使用容器的時候
當你想要容器能夠更加自動化的更新擴容時
有一個良好的管理工具就會是很重要
原本的container 管理工具原本並不只有 k8s, 比如: docker swarm
然後最後由 kubernetes 這個由 google 導出的開源專案 在開發15年後
成為容器管理工具的大宗
因此要學好容器管理 學習k8s 就一個必經之路
這次參加鐵人賽預計用這30天好好研究 k8s 一些基礎的概念還有工具
前14天主題 會是以下面內容作為主軸來撰寫 內容參考自freecodecamp k8s 基礎課程 還有 k8s官網文件
Day 1: 什麼是k8s ? k8s 能做什麼?
Day 2: k8s 元件介紹:Node, Pod, Service, Ingress, Volumes, ConfigSet, Secret, Deployment, StatefulSet
Day 3: k8s 架構:k8s Node Compoents
Day 4: k8s 架構:Control Plane Components
Day 5: k8s run tools: minikubes 安裝與 kubectl 安裝
Day 6: 主要 Kubectl 指令 - K8s CLI
Day 7: K8s YAML 設定檔
Day 8: 實作範例: MongoDB and MongoExpress
Day 9: 使用 K8s Namespaces 來管理 k8s 元件
Day 10: K8s Ingress 解說
Day 11: Helm - Package Manager
Day 12: Persisting Data in K8s with Volumes
Day 13: Deploying Stateful Apps with StatefulSet
Day 14: K8s Services 解說
後16天內容還在構思, 打算以 k8s官網的Task選16個有趣的主題來撰寫
ref https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
kubernetes 源自希臘語,意指領航員
因為從k到s中有8個字母 所以簡稱為 k8s
ref https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/
kubernetes 是一個管理容器的工具
用來處理容器生命周期的管理, 工作量的分配等等工作
單體伺服器是最早的伺服器形式, 這類型的服務最大的問題在於
無法針對每個服務定義限定所需硬體資源
如果有某些服務搶佔太多資源的話, 無法有效分配硬體資源給需要的服務
虛擬化技術的興起, 讓硬體資源的分配能夠透過切割出多個虛擬機器有效解決硬體資源分配的問題
然而每個虛擬機器, 內部仍是需要消耗各自的資源去運行各自的作業系統
容器化技術的興起, 讓服務資源的切分能夠更加細緻, 啟用了一個容器引擎包裝服務成為容器
每個容器共享整個作業系統的資源, 各自取用定義好的部份
容器相對於虛擬機器還有單體伺服器來說能夠做到更有效地資源分配
因此是目前很多企業所以推行的一種應用服務開發的趨勢
微服務是一種服務的開發形式, 會將一個服務切割成多個容器化應用來運行
微服務的興起, 帶動起管理大量容器化應用的需求
自行撰寫腳本或是排程去管理容器又太過複雜
因此需要一個第三方管理工具來處理
k8s 官網 上寫了很多項, 筆者摘錄了幾個自己認為比較重要的
高可用性代表, k8s 能夠確保發佈出去的應用程式能夠隨時可用
高拓展性代表, k8s 能夠卻容器化服務隨著使用者數量上升
擴展容器化服務數量以保證服務回應時間夠快速(在某個合理的預期時間內)
當容器化服務發生異常時, k8s 能夠透過偵測狀態的機制, 做到即時修復容器化服務
筆者認為虛擬化技術是對於硬體規格的抽象化
容器化技術是對於作業系統規格的抽象化
容器化管理工具是把容器化運行規則的抽象化
透過這些抽象化可以讓軟體對於執行環境的相依性降低
讓軟體工程師開發軟體的時候不被硬體與執行環境限制
在實際執行層面, 軟體工程師卻是更需要去理解底層執行環境的內容
才能避免運算資源浪費
否則把一整個巨大作業系統包含進入到容器化服務
這樣就失去容器化的意義