Kubernetes 基礎概念

Posted by Kubeguts on 2021-05-10

基本介紹

Kubernetes,又簡稱K8S (因為K到結尾s共有8個字母,故稱K8S),為可自動部署、擴展與管理協調容器化的工具,由Google團隊開發釋出。

為什麼需要K8S??

傳統上,設定load balancer,若遇到某些container掛掉,需要自行寫腳本,或使用第三方工具,將掛載到load balancer的容器服務給自動復原重啟。

pic05

又有可能需要更新Container的服務,又不想要將應用程式給關閉掉。

這時候採用K8S就可以協助我們解決上述的問題

主要特色

  • Container Orchestrator
  • 容器化的管理協調能力,可以隨時掌握Docker容器的新增擴充或刪除等,達到Load Balancing的效果
  • Storage Orchestration
  • 可協調一組容器之間所需要的實體儲存空間
  • Secret and Configuration Management
    • 將重要資訊如資料庫密碼,帳密資訊從容器服務獨立出來,進行集中式的管理與加密保護,鞏固資料安全
  • Workload Placement
    • 可以透過程式碼方式,K8S會自動配置容器到適當的且存活的實體伺服器上
  • Infrastructure Abstraction
    • 將實體配置給抽象化成自動化的流程,可以省去手動配置負載平衡,將客戶端的請求導入到適當的容器服務上
  • Keep in Desired State
    • 可設置服務必須要滿足一定的乘載狀態,例如至少要滿足N個web server containers,N個database containers,達到自我修復的功能
    • 可以再重新設置要滿足多少數量的容器服務,進行水平擴張

Kubernetes 功能介紹

K8S架構說明

K8S主要會分成兩種角色,第一是Control Plane (俗稱的Master Node),另外就是會負責執行服務的Worker Node

Control Plane為主要的指揮中心,負責調度服務到各個Worker Node上去運行,也負責擔任溝通橋樑,將重要資訊儲存到etcd中,以下為 Control Plane的各個說明

  • API Server
    • K8S溝通的中介角色,透過 $kubectl 下指令,以YAML/JSON資料格式進行溝通
    • 提供客戶端修改、監控現有Cluster狀態
    • 將狀態更新到etcd內
  • Controller Manager
    • 持續監控Cluster狀態,並通知給API Server
    • 在Current State (目前服務運行數量)與Desired State(期望服務數量)不一致時,應觸發對應的動作,確保數目一致
    • 狀態異動就透過API Server更新到etcd
  • Scheduler
    • 調度Cluster內的Pods
    • 將調度資訊寫入etcd
  • Kubelet
    • 實際控制Pod的元件
    • 接收API Server的通知,來決定創建或刪除Pod
  • Kube Proxy
    • 監控Service資訊
    • 建立對應iptable規則,以轉發封包
  • etcd
    • 為K8S協調各個Node所需儲存的空間角色,類似資料庫的角色

Worker Node

Worker就是負責執行被分配到的任務,也就是負責運行Pod的內容,並且通報Control Plane目前運行的狀況

Worker只會有 kubelet, kube-proxy

Control Plane 與 Worker互動示意圖

pic06

K8S基本功能組成

  • Pod: 為K8S運行的基本單位,負責運行最少一個Container服務
    • 可以把Pod想像成是Container的專屬太空服,要跟Container做溝通或是了解Container的運行訊息,得透過Pod傳遞和告知接收訊息
  • Node基本上是一個虛擬機器,然後可以運行多個Pod,每個Pod都會在Node內運行
  • Deployment
    • 負責將Container部署到適當的Node內
    • ReplicaSet: 定義容器服務環境至少須滿足多少數量的狀態設定
  • Service
    • 使Pod之間可以溝通並傳遞資訊

pic07

使用K8S好處

  • 可以快速建置測試的環境,或是在本地端模擬正式會遇到的高擴展環境
  • 可以達到Zero-downtime的移轉時間,或進行擴展,不會影響到客戶正在運行的環境
  • 可以自動修復有問題的容器服務
  • 建置更有彈性的CI/CD管線服務,因為K8S可以省去很多需手動轉寫腳本的活
  • 透過Secrets/ConfigMap來確保容器間的重要資訊可以隔離出來

常用安裝和運行工具

參考