iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
DevOps

Docker獸 究極進化 ~~ Kubernetes獸系列 第 14

Day-14 初觸 Kubernetes

前言

什麼是Kubernetes A.K.A K8S呢? Kubernete源於希臘語 舵手 的意思,Google在2014年開源了K8S項目,而K8s即為Google在十幾年來大規模服務的運行經驗下,誕生的產物。

Kubernetes是一個可移植、可拓展的開源平台。用於管理容器化的工作負載與服務,可透過聲明式配置進行多服務的自動化佈署。

https://ithelp.ithome.com.tw/upload/images/20200929/20129737L1WKCTgMIC.png

Kubernetes Features

Automated rollouts and rollbacks

K8s會在監視你部署的服務同時,因應每時每刻配置的變化而自動地部署,
並且在部署地同時確保至少會有一個實例正在健康運作。

Service discovery and load balancing

K8s為Pods提供自己的IP與dns,讓Pods彼此間能夠很好進行負載平衡。

Service Topology

提供基於整個集群的流量路由。

Storage orchestration

自動安裝你所選擇的儲存系統,像是本地儲存、公有雲(GCP, AWS)亦或是網路儲存系統(NFS)。

Secret and configuration management

對於機密資訊與環境變數的部署,無需重新重建映像檔,且亦不會在堆棧配置中暴露機密。

Automatic bin packing

根據容器的資源要求和其他限制條件自動放置容器,同時不影響可用性。混合關鍵和盡力而為的工作負載,以提高利用率並節省更多資源。

Batch execution

除了Services之外,Kubernetes還可以管理您的批處理和CI工作負載,並根據需要替換發生故障的容器。

IPv4/IPv6 dual-stack

允許分配IPv4/IPv6的addresses給Pods與Services

Horizontal scaling

根據CPU, memory usage與其他所設定的條件限制,進行自動地水平擴增。

Self-healing

會自動重啟故障容器,在節點死亡時會自動地安排並重啟容器。

What Kubernetes is not?

Kubernetes並非傳統的Platform as a service,由於K8s在容器級別而非硬體級別運行,因此他亦也提供了一些PaaS共有的服務,像是部署、負載平衡、擴充..等,並會自動地紀錄log,與監測Cluster並提供Report,但Kubernetes是相對有彈性的,對於上述默認功能是可選與可插入的,為此可能許多人會對Kubernetes有錯誤的認知。

  • K8S並不限制支持應用程式的種類,K8S旨在能夠支持各式各樣的工作,包含無狀態、有狀態與數據處理的工作等。只要應用程式能夠容器化,基本上都能在K8S上運作。
  • K8S並不部署代碼也不運行應用程式,透過持續化地交付(CI)與部署(CD)的方式取決於每個組織的文化與風格。
  • K8S並不提供應用程式級別的服務,像是middleware(message queue)、data-processing frameworks(spark)、database(mysql)、cache(redis) ....等。
  • K8S並不提供紀錄log、監測系統與警報系統的解決方案,而是透過integrations集成的概念,讓大家能夠去使用所需指標。
  • K8S並不限制與要求配置的系統與語言,而是提供了一個聲明性API,該聲明性API可以被任意形式的聲明性規範所針對。
  • K8S並不提供也不採用任何全面的機器配置,維護,管理或自我修復系統。
  • 最後,K8S不僅僅是一個編排系統。實際上,它消除了編排的需要。編排的技術定義是執行定義的工作流程:首先執行A,然後執行B,然後執行C。相反,Kubernetes包含一組獨立的,可組合的控製過程,這些過程連續地將當前狀態驅動到提供的所需狀態。從A到C的方式無關緊要。集中控制也不是必需的。這導致系統更易於使用,功能更強大,更健壯,更具彈性和可擴展性。

Why we choose Kubernetes

  • 將服務依據不同的面向拆成很多不同的components(pod、service、ingress..etc),並且彼此獨立運行著。
  • 各components能夠獨立部署,並且支援無停機服務升級。
  • 可透過Kubernetes Cluster幫我們做水平與垂直autoScaling。
  • 透過labels與metrics能夠讓我們有效地監測系統與紀錄日誌。
  • 依據需求部署特定數量的executor在特定的節點上。

在現行架構越來越複雜且微服務越來越多的環境下,Kubernetes的出現能讓我們更簡單地管理系統。

Kubernetes Architecture

Cluster Level

K8s架構內,節點Node的種類分為兩種,分別為Master Node與Slave Node,Master Node幫我們做決策面的事情,Slave Node則幫我們執行服務的部署與運行。也因應這種模式,Master Node只會有一個,而Slave Node可以有多個。

https://ithelp.ithome.com.tw/upload/images/20200929/20129737T6Tp8DNcpt.png

Node & Pod Level

在Node當中,最小的執行單位為Pod,每個Pod當中可以有若干個Containers,這些Containers共享同個Pod當中的資源。

https://ithelp.ithome.com.tw/upload/images/20200929/20129737uRkH7AXMWl.png

Features Level

從功能的角度,可以簡略的將Kubernetes大致分為這些項目,但這並不是全部。就只是用一個GKE的實例讓大家來瀏覽大局。

https://ithelp.ithome.com.tw/upload/images/20200929/20129737sqqj8me0yJ.png

小結

這章節僅僅只是個入口,後面章節會先開始教大家從GKE入門K8S,並從Kubernetes master node開始帶讀者進入K8S五花八門的世界。

也恭喜大家成為了Kubernetes的初心者

https://ithelp.ithome.com.tw/upload/images/20200929/20129737a958atGCGf.png

Kubernetes Props

增加此圖的原因有以下幾點:

  1. 完成的章節會將該道具從下圖移除,並新增至進化圖中的道具欄,讓讀者能一目瞭然到該章節已經得到了哪些道具(學習了哪些components)
  2. 完成的章節會加上超連結於下圖,讓大家能直接關聯到有興趣的章節。

https://ithelp.ithome.com.tw/upload/images/20201006/20129737zecbdMhlve.png

Reference

https://kubernetes.io/

https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-architecture?hl=zh-tw

https://lol.garena.tw/game/item


上一篇
Day-13 熟悉 Docker-Compose 進階功能
下一篇
Day-15 玩轉 Google Kubernetes Engine
系列文
Docker獸 究極進化 ~~ Kubernetes獸30

尚未有邦友留言

立即登入留言