K8S & 微服務(microservices)

 Kubernetes(K8S)是一個可以幫助我們管理微服務(microservices)的系統,他可以自動化地部署及管理多台機器上的多個容器(Container)。

更進一步地說,Kubernetes 想解決的問題是:「手動部署多個容器到多台機器上並監測管理這些容器的狀態非常麻煩。」而 Kubernetes 要提供的解法: 提供一個平台以較高層次的抽象化去自動化操作與管理容器們。

打開 Kubernetes 的官網,我們可以看到關於 Kubernetes 服務的描述為:

Automated container deployment, scaling, and management

而白話來說,上面的描述表示他可以做到:

同時部署多個容器到多台機器上(Deployment)

服務的乘載量有變化時,可以對容器做自動擴展(Scaling)

管理多個容器的狀態,自動偵測並重啟故障的容器(Management)Kubernetes 四元件

在了解 Kubernetes 如何幫助我們管理容器們前,我們先要由小到大依序了解組成 Kubernetes 的四種最基本的元件:Pod、Worker Node、Master Node、Cluster。

Kubernetes 進階三元件

了解完如何從無到有建立一個 Kubernetes Cluster 並產生一個 Pod 後,接下來我們要認識在現實應用中,我們還會搭配到哪些 Kubernetes 的進階元件。其中最重要的三個進階元件就是:Service、Ingress、Deployment。

Service 就是 Kubernetes 中用來定義「一群 Pod 要如何被連線及存取」的元件。

Deployment

了解了 Service 後,接下來要來暸解第二個進階元件:Deployment。今天當我們同時要把一個 Pod 做橫向擴展,也就是複製多個相同的 Pod 在 Cluster 中同時提供服務,並監控如果有 Pod 當機我們就要重新把它啟動時,如果我們要一個 Pod 一個 Pod 透過指令建立並監控是很花時間的。因此,我們可以透過 Deployment 這個特殊元件幫我們達成上述的要求。

Ingress

了解完了 Service 跟 Deployment 後,接下來就輪到概念稍微複雜的 Ingress 元件了。 在上面有提到 Service 就是 Kubernetes 中用來定義「一群 Pod 要如何被連線及存取」的元件。 但在 Service 中,我們是將每個 Service 元件對外的 port number 跟 Node 上的 port number 做 mapping,這樣在我們的 Service 變多時,port number 以及分流規則的管理變得相當困難。

而 Ingress 可以透過 HTTP/HTTPS,在我們眾多的 Service 前搭建一個 reverse-proxy。這樣 Ingress 可以幫助我們統一一個對外的 port number,並且根據 hostname 或是 pathname 決定封包要轉發到哪個 Service 上,如同下圖的比較:


https://cwhu.medium.com/kubernetes-basic-concept-tutorial-e033e3504ec0

https://cwhu.medium.com/kubernetes-implement-ingress-deployment-tutorial-7431c5f96c3e

留言

這個網誌中的熱門文章

AI for everyone coursera

考績被打差了 輕率離職會更傷

(影片) Advanced Playwright - Test Automation University