剛轉職的超新手工程師,因工作需求開始學習 kubernetes。想說藉著鐵人賽的機會讓自己記錄學習狀況。目前尚未接觸到公司的正式環境,也還未自己建構出 Kubernetes cluster,因此文章應該會著重在各元件設定檔的撰寫、如何在本機實作測試。初步了解後發現 kubernetes 水很深,甚至因為太複雜了有各種工具開發出來協助管理。另外因 DevOps 工作不只有 k8s 相關,之後工作上會碰到的其他主題也會一併加入文章中……但不敢保證所以題目還是先以 kubernetes 為主哈哈哈
因此再之後的文章方向就且戰且走吧!最後一天再來編輯 Day 1 🤣
先備知識
Container (Docker)
20231015 更新: 30 天文章列表
還沒有實際體會到 kubernetes 的好用之處因此只能先透過文字想像
先來段中文 wiki 的引用
Kubernetes(常簡稱為K8s)是用於自動部署、擴充和管理「容器化(containerized)應用程式」的開源系統。該系統由Google設計並捐贈給Cloud Native Computing Foundation(今屬Linux基金會)來使用。
它旨在提供「跨主機叢集的自動部署、擴充以及執行應用程式容器的平台」。它支援一系列容器工具,包括Docker等。
…
Kubernetes在設計結構上定義了一系列的構建模組,其目的是為了提供一個可以共同提供部署、維護和擴充應用程式的機制。組成Kubernetes的組件設計概念為鬆耦合和可延伸的,這樣可以使之滿足多種不同的工作負載。可延伸性在很大程度上由Kubernetes API提供,此API主要被作為擴充的內部組件以及Kubernetes上執行的容器來使用。
當今天有多台主機多個 container 時,Kubernetes 能做到 -
Kubernetes 部署/管理架構的形式為 Cluster。Kubernetes Cluster 架構包含兩大部份:
每個 cluster 至少會有一個 node,這邊的 node 就是各個主機,可以是實體機器也可以是雲端機器。Pod 是 kubernetes 中的基本單位,Pod 裡面運行一個或多個 containers,Pod 會被分配到 node 上。Control Plane 會管理 cluster 中的 nodes & pods。正式環境中通常 Control Plane 會不只有一個,以確保服務的高可用性。
Source: https://medium.com/devops-mojo/kubernetes-architecture-overview-introduction-to-k8s-architecture-and-understanding-k8s-cluster-components-90e11eb34ccd
1 Node = 一台伺服器,上面跑著多個 Pods,並提供能跑 container 的環境
Node components 包括
能跑container的環境,不一定要是Docker, Kubernetes 也支援 containerD, CRI-O, rktlet 等等
service: kubernetes 中的 object,是個虛擬的組件,用來定義一組 pod 的網路訪問方式,可以讓外部的 client 能訪問 pod
Control Plane 中的元件負責整個 cluster 的管理及資源調動,包括偵測及回應 cluster events,例如當 pod 數量小於 deployment 中定義的 replicas 數量時須建立新的 Pod。
通常 Control Plane 上面不會跑 applications,也會有 replica 確保 HA (High Availability)。
kubernetes 中有多個 controllers,這些 controllers 會監控 cluster 狀態並確保其與期望的狀態一致
以下兩種是較好理解的 controllers:
可以讓 cluster 連接到 cloud provider’s API,如果是本機部署的 k8s cluster,沒有連到雲端則不會有這個元件。每個雲端服務有自己的 cloud-controller-manager。
超新手無經驗者看完官網介紹 kubernetes cluster 架構應該還是沒什麼概念。尤其在本機練習 Kubernetes 所安裝的工具很多都已經先建置好各個元件了。
但起頭還是可以先了解 Cluster 有分 Control Plane & Node、Node 上跑的 Pod 裡面運行的 Container 裝的是我們想跑的服務。
了解其他 Object 後再回來看架構,思考這些 Object 在 cluster 中是怎麼運作的可能會比較有感。
Reference
https://kubernetes.io/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do
https://kubernetes.io/docs/concepts/overview/components/