Kubernetes!管理一切微服務的世界樹

本文章同時發佈於:

文章為自己的經驗與夥伴整理的內容,設計沒有標準答案,如有可以改進的地方,請告訴我,我會盡我所能的修改,謝謝大家~

大家好,在前面 15 天講解完應用層相關的微服務後,現在終於要來介紹平台層

Kubernetes(K8s)即是這次主角,他到底跟 Docker 是什麼樣的關係?你的後端需要他嗎?

我會以一個工程師,從純Docker後端慢慢到發現需要K8s哪些好用的功能,來說明 K8s 解決的問題。

code 即是後端的架構

當後端容器越來越多,就會需要可以管理大量容器的方案

一開始使用 Docker 時,後端的容器不多,可以單純使用 docker-compose 即可解決多個容器互動的需求,但在容器越來越多時,會產生以下問題:

  • 容器的連接變得複雜
  • 容器的更新須寫腳本維護
  • 容器是否掛了難以監控
  • 容器如果流量需求增高,要自動增加容器來緩解流量
  • 容器降版/升版需要腳本來控制

關於這些問題,我曾經寫過腳本來維護,但當服務越來越大,腳本的需求就越來越多,需要非常多成本。而 K8s 提供了像以下config的 yaml 形式來控制以上問題,讓一切架構以config來設計並非自己造輪子寫腳本來維護

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

K8s 架構

圖片來源: Project Management & Technology Fusion: Using Kubernetes (K8S) to manage Container cluster (Docker)

K8s 會先啟動一個 Master node,底下會有許多的 Worker Node,而 Worker node 裡頭會有許多的容器,K8s 主要的目標就是管理這些容器。

K8s 主要就是把多台機器加以抽象,使他們就像一台大機器工你操作。

而 K8s 一開始的目標是管理容器,而不管理運行容器的 VM,不過後來有新增Cluster Autoscaler(CA)方案來管理 VM,但你使用的平台必須要有支援。

HPA、VPA、CA

K8s 有提供三種方法來管理容器對流量的需求

  • Horizontal Pod Autoscaler(HPA): 以增加容器的方式來提供流量需求
  • Vertical Pod Autoscaler(VPA): 以分配容器所需的 CPU/Memory 來提供流量需求
  • Cluster Autoscaler(CA): 已增加整個叢集來提供流量需求

參考

comments powered by Disqus