基本介紹
Kubernetes,又簡稱K8S (因為K到結尾s共有8個字母,故稱K8S),為可自動部署、擴展與管理協調容器化的工具,由Google團隊開發釋出。
為什麼需要K8S??
傳統上,設定load balancer,若遇到某些container掛掉,需要自行寫腳本,或使用第三方工具,將掛載到load balancer的容器服務給自動復原重啟。
又有可能需要更新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內
- K8S溝通的中介角色,透過
- 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互動示意圖
K8S基本功能組成
- Pod: 為K8S運行的基本單位,負責運行最少一個Container服務
- 可以把Pod想像成是Container的專屬太空服,要跟Container做溝通或是了解Container的運行訊息,得透過Pod傳遞和告知接收訊息
- Node基本上是一個虛擬機器,然後可以運行多個Pod,每個Pod都會在Node內運行
- Deployment
- 負責將Container部署到適當的Node內
- ReplicaSet: 定義容器服務環境至少須滿足多少數量的狀態設定
- Service
- 使Pod之間可以溝通並傳遞資訊
使用K8S好處
- 可以快速建置測試的環境,或是在本地端模擬正式會遇到的高擴展環境
- 可以達到Zero-downtime的移轉時間,或進行擴展,不會影響到客戶正在運行的環境
- 可以自動修復有問題的容器服務
- 建置更有彈性的CI/CD管線服務,因為K8S可以省去很多需手動轉寫腳本的活
- 透過Secrets/ConfigMap來確保容器間的重要資訊可以隔離出來
常用安裝和運行工具
- Minikube
- 可在本機上運行k8s的工具
- https://minikube.sigs.k8s.io/docs/start/
- Docker Desktop
- Docker上的應用程式,也提供k8s的運行環境
- https://birthday.play-with-docker.com/kubernetes-docker-desktop/
- kind
- 可在本機上運行k8s的工具
- https://kind.sigs.k8s.io/
- kubeadm
參考
- Kubernetes for Developers: Core Concepts