iT邦幫忙

2023 iThome 鐵人賽

DAY 1
1
DevOps

第一次參賽就學 Kubernetes系列 第 1

[Day 01] Kubernetes 介紹

  • 分享至 

  • xImage
  •  

某日突然心血來潮,把之前買的線上 Docker 課程看完一遍,看完後覺得內容很有趣。自己以前是前端工程師,在工作上對於容器、微服務和雲端等之前從未接觸,在學完 Docker 後心中仍覺得少了什麼,為了填滿這塊空缺,於是計畫決定將 Kubernetes 這塊拼圖拼上。

鐵人賽 30 天的內容規劃

  1. [Day 01] Kubernetes 介紹
  2. [Day 02] Kubernetes 架構
  3. [Day 03] 環境建置工具
  4. [Day 04] 使用 kind、minikube 建立環境
  5. [Day 05] kubeadm 建置環境 (上篇)
  6. [Day 06] kubeadm 建置環境 (下篇)
  7. [Day 07] Pods
  8. [Day 08] YAML 設定檔
  9. [Day 09] ReplicaSet
  10. [Day 10] Deployment (上篇)
  11. [Day 11] Deployment (下篇)
  12. [Day 12] Service
  13. [Day 13] Ingress
  14. [Day 14] ConfigMap
  15. [Day 15] Secret
  16. [Day 16] 範例:部署 Java 程式到 Kubernetes
  17. [Day 17] 在 AWS 部署 Kubernetes 叢集 (一)
  18. [Day 18] 在 AWS 部署 Kubernetes 叢集 (二) - 使用 kops 在 AWS 上部署叢集 (建立叢集)
  19. [Day 19] 在 AWS 部署 Kubernetes 叢集 (三) - 使用 kops 在 AWS 上部署叢集 (部署程式)
  20. [Day 20] Label & Selector
  21. [Day 21] 在 AWS 部署 Kubernetes 叢集 (四) - 部署 AWS EKS
  22. [Day 22] Persistent Volumes 與 Persistent Volume Claims
  23. [Day 23] DaemonSet 與 StatefulSet
  24. [Day 24] Package Manager - Helm
  25. [Day 25] Authentication (上篇)
  26. [Day 26] Authentication - Role Based Access Control (RBAC)
  27. [Day 27] Namespaces
  28. [Day 28] 使用 Jenkins 建置 CI/CD Pipeline 專案 (一)
  29. [Day 29] 使用 Jenkins 建置 CI/CD Pipeline 專案 (二)
  30. [Day 30] Kubernetes 學習資源 & 反思

因為自己是第一次接觸 Kubernetes,故在撰寫內容時不會寫的太艱深,太難的就不會寫出來。如有寫不清楚或不正確的地方歡迎指正!
/images/emoticon/emoticon13.gif


Kubernetes 是什麼?

是一項開源的 Container Orchestration Engine(容器編排工具),用於容器的自動化部署、擴充和調度及管理,提供功能強大的容器管理、調度和監控功能,由 Google 於 2014 年首次對外公開,之後抖內給 Cloud Native Computing Foundation 基金會(英文縮寫為 CNCF) 維護與管理。

Kubernetes 在希臘語中為舵手或船長的意思,在海上負責航行並維護船上人員的安全。在網路上可能聽過有人稱 Kubernetes 為 k8s(簡稱),原因是 k 到 s 之間有 8 個字母。

何時需要使用 Kubernetes

若今天在工作上你需要管理大量的應用程式(容器),並確保程式在運行時,不會因程式、版更或資源更新等其他問題致使服務掛掉或停止(要讓服務保持高可用性),Kubernetes 就是很好的一項解決方案。

Kubernete 想要達成的目的是:

  1. 讓使用者不用顧慮太多底層的基礎建設(infra)來部署服務,並有效減少應用程式之間的相依性
  2. 提供標準的部署介面
  3. 提供 modular API 允許第三方組織將他們的系統與 Kubernetes 結合,並建構於上發展出新的雲端部署的解決方案

何時不會用到

若是今天在小公司,其業務上僅需維護一兩個網站、App 或應用服務時,並沒有需要部署、管理大量容器,或沒有需要擴充應用服務來應付大量併發的請求,也許程式掛掉也不需要急著處理,像這種情況可能就不太需要使用 Kubernetes。

除了 Kubernetes 以外,還有其他選擇?

Container Orchestration Engine 容器編排工具

有的,除了 Kubernetes 以外網路上還有其他的容器編排工具。像是 Docker Swarm 和 Apache Mesos 等工具,但使用 Kubernetes 的使用者仍佔多數。

Docker Swarm
[圖片來源]: https://hub.docker.com//swarm/


為何 Kubernetes 受到大家喜愛?其特色與優勢有...

Kubernetes 的特色

  1. 自動化部署且易於擴展
  2. 是以 Google 部署大型架構應用服務的多年經驗為基礎所開發出工具
  3. 跨平台、提供負載平衡(高可用性)
  4. blabla...

網路上已整理許多使用 kubernetes 的益處

除了優點以外,還有以下優勢

  1. GitHub 上多達十萬顆星星數,證明其受熱門程度
  2. 有龐大的 Kubernetes Contributor Community 社群
  3. 市面上有許多公司正在使用,例如 Apple、Google... 等
  4. 104人力銀行上有許多 Kubernetes 的相關職缺
  5. Google Trend 看搜尋熱度(2015-Now)呈攀升趨勢
    https://ithelp.ithome.com.tw/upload/images/20230916/20162511OR4JQQ2lMr.png

種種跡象都顯示大推(坑)


這時回過頭來看一下 Docker 與 Kubernetes 到底有什麼關係!?

Docker 與 Kubernetes 的關係

事實上在 Kubernetes v1.24 版本前,Kubernetes 使用 Docker Engine 中的 dockershim 作為其預設 container runtime engine。但在 v1.24 與之後的版本,修改成讓使用者去選擇符合 Container Runtime Interface (CRI) 的 container runtime。

2023-11-28 更新
Kubernetes 將不依賴於 dockershim,將其從原始碼移除。並建立一個 Container Runtime Interface (CRI) 的標準,讓其他不同的 container runtime 可以按照這個標準與 Kubernetes 協作。
此舉除了擴展可以使用的 container runtime 工具外,也減少 k8s 的 source code 與工具間的依賴。

以下是 Kubernetes CRI 支援的 container runtime:

  • containerd
  • CRI-O
  • Docker Engine
  • Mirantis Container Runtime

Container runtime
是賦予系統能夠運行容器的一套程式,負責管理 Kubernetes 中容器的執行與生命週期。可以將應用程式打包成容器,並在叢集中執行容器的一個重要元件。

因此使用 Kubernetes 時 Docker 並不是必備的工具。但就學習的角度來看,事先學習 Docker 將有助於理解容器的概念,讓學習過程更加順暢。


參考來源

  1. Kubernetes: Getting Started
  2. 維基百科 - Kubernetes
  3. Google Cloud - 什麼是 Kubernetes?
  4. kubernetes - Overview
  5. kubernetes - Container Runtimes

下一篇
[Day 02] Kubernetes 架構
系列文
第一次參賽就學 Kubernetes30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言