iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0

前言

剛轉職的超新手工程師,因工作需求開始學習 kubernetes。想說藉著鐵人賽的機會讓自己記錄學習狀況。目前尚未接觸到公司的正式環境,也還未自己建構出 Kubernetes cluster,因此文章應該會著重在各元件設定檔的撰寫、如何在本機實作測試。初步了解後發現 kubernetes 水很深,甚至因為太複雜了有各種工具開發出來協助管理。另外因 DevOps 工作不只有 k8s 相關,之後工作上會碰到的其他主題也會一併加入文章中……但不敢保證所以題目還是先以 kubernetes 為主哈哈哈
因此再之後的文章方向就且戰且走吧!最後一天再來編輯 Day 1 🤣

先備知識
Container (Docker)

20231015 更新: 30 天文章列表

什麼是 kubernetes & 為什麼要用 kubernetes

還沒有實際體會到 kubernetes 的好用之處因此只能先透過文字想像

先來段中文 wiki 的引用

Kubernetes(常簡稱為K8s)是用於自動部署、擴充和管理「容器化(containerized)應用程式」的開源系統。該系統由Google設計並捐贈給Cloud Native Computing Foundation(今屬Linux基金會)來使用。

它旨在提供「跨主機叢集的自動部署、擴充以及執行應用程式容器的平台」。它支援一系列容器工具,包括Docker等。

Kubernetes在設計結構上定義了一系列的構建模組,其目的是為了提供一個可以共同提供部署、維護和擴充應用程式的機制。組成Kubernetes的組件設計概念為鬆耦合和可延伸的,這樣可以使之滿足多種不同的工作負載。可延伸性在很大程度上由Kubernetes API提供,此API主要被作為擴充的內部組件以及Kubernetes上執行的容器來使用。

當今天有多台主機多個 container 時,Kubernetes 能做到 -

  • 可使用 domain name 讓 container 接受外來流量,並支援負載平衡及設定自動擴展條件
  • 可掛載 (mount) 儲存系統至目標容器中,可以是本機儲存也可以是雲端的儲存系統
  • 可設定版本更新的策略,自動更新版本或是退版
  • 資源管理,根據 container 所需的資源去做調配
  • 監控 container 健康狀態,設定重啟的次數或移除不健康的 container
  • 管理給 container 使用的環境變數及密鑰

Kubernetes架構

Kubernetes 部署/管理架構的形式為 Cluster。Kubernetes Cluster 架構包含兩大部份:

  • Control plane (master Node)
  • Node (worker node)

每個 cluster 至少會有一個 node,這邊的 node 就是各個主機,可以是實體機器也可以是雲端機器。Pod 是 kubernetes 中的基本單位,Pod 裡面運行一個或多個 containers,Pod 會被分配到 node 上。Control Plane 會管理 cluster 中的 nodes & pods。正式環境中通常 Control Plane 會不只有一個,以確保服務的高可用性。
https://ithelp.ithome.com.tw/upload/images/20230916/201627954nslrj2M3y.png
Source: https://medium.com/devops-mojo/kubernetes-architecture-overview-introduction-to-k8s-architecture-and-understanding-k8s-cluster-components-90e11eb34ccd

Node

1 Node = 一台伺服器,上面跑著多個 Pods,並提供能跑 container 的環境
Node components 包括

  • container runtime
  • kubelet
  • kube-proxy

container runtime

能跑container的環境,不一定要是Docker, Kubernetes 也支援 containerD, CRI-O, rktlet 等等

kubelet

  • 在每個 node 上的 agent,與 control plane (kube-apiserver) 溝通
  • 幫助 kubernetes 管理 pod 的角色,會從 control plane 得到 Pod 配置的設定以建立 Pod
  • 對 Pod 進行健康檢查,若 Pod 中的容器沒有回應,kubelet 會根據設置採取措施,例如重啟容器或刪除

kube-proxy

  • kube-proxy 負責 Node 之間的網路規則,讓同一個 cluster 的 pod 能互相溝通,或是處理外部流量的路由
  • 根據 service 設定,將流量轉發到對應的 Pod

service: kubernetes 中的 object,是個虛擬的組件,用來定義一組 pod 的網路訪問方式,可以讓外部的 client 能訪問 pod

Control Plane

Control Plane 中的元件負責整個 cluster 的管理及資源調動,包括偵測及回應 cluster events,例如當 pod 數量小於 deployment 中定義的 replicas 數量時須建立新的 Pod。
通常 Control Plane 上面不會跑 applications,也會有 replica 確保 HA (High Availability)。

kube-apiserver

  • 是 kubernetes cluster 的接口,能透過 UI or API or CLI 互動
  • 能操作 etcd
  • 在 Kubernetes 上操作 Objects,例如新增、修改或刪除,是透過 Kubernetes API 達成

etcd

  • key-value storage
  • 儲存 cluster data 的地方

kube-scheduler

  • 調配 pods 去哪個 node 的元件 (scheduling)
  • 當有新的、還未分配到 Node 上的 Pod 產生時,kube-scheduler 會根據 Pod 需要用到的資源去判斷哪個 Node 上面有空間可以放這個 Pod

kube-controller-manager

kubernetes 中有多個 controllers,這些 controllers 會監控 cluster 狀態並確保其與期望的狀態一致
以下兩種是較好理解的 controllers:

  • Replication Controller: 負責監控 Replication Controller & ReplicaSet,確保 cluster 中的 pod 數量與 Replication Controller (or ReplicaSet) 配置的 replica 數量一致
  • Service Account Controller: 管理 namspace 底下的 Service Account,並建立 default ServiceAccounts 給新的 namespace

cloud-controller-manager

可以讓 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/


下一篇
Day 2 本機環境安裝 K3D & kubectl
系列文
可能會迷路的航行 - 菜雞的kubernetes學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言