Kubernetes - The First sight

Kubernetes (簡寫 k8s) 提供一個有彈性的分散式系統框架,處理failover, scaling, canary deployment 等。包含load balancing, storage, auto-rollouts and rollbacks, auto bin packing(裝箱最佳化,指硬體資源分配上), self-healing, secret and config management。


Kubernetes components (Control Plane, Node, Addons)

當deploy k8s, 就是一組cluster, 包含跑containerized application的worker machines 稱為nodes。Worker node掌控Pods (每個pods包含running containers),並藉由control plane 去管理。原則上prod environment 會跨多台電腦,單一cluster 跑在多個nodes上來達到HA(High Availability)跟fault-tolerance.



Control Plane Components - 當有events被偵測到時,Control Plane 會針對 deployments的資訊去對cluster做動作,例如起new pod。操作的components有
  1. kube-apiserver 則是操作Control Plane的介面
  2. etcd 儲存cluster parameter data
  3. kube-scheduler 定觀察pods與node的狀態
  4. kube-controller-manger - 在controller process中又分這幾種類型
    • Node controller 
    • job controller 
    • endpoint controller 
    • service account & token controller
  5. cloud-controller-manager - 可讓cluster與cloud provider API與cloud平台做互動,可以互動類型如下
    • Node Controller 檢查cloud provider 上node的狀態
    • Route controller 基於cloud infra去設定routing
    • Service controller 新增、刪除、更新cloud provider load balancers

Node Components - 每個node都有運行,並維護running pods與提供kubernetes運行環境。
  1. kubelet - An agent run在每個node來確保 containers確實跑在Pod中並且狀態健康
  2. kube-proxy - a network proxy 跑在每個node中來維護網路規則,設定給你的pods與內部、外部溝通
  3. Container runtime - 負責運行containers, 包含: Docker, containerd, CRI-O 等

Addons - 用k8s資源去實踐其他cluster功能,例如:
  1. DNS
  2. Web UI - dashboard 等用途
  3. Container Resource Monitoring - 紀錄containers時間序列metrics到database並提供視覺化介面
  4. Cluster-level logging

K8S workload

跑在k8s裡面的application。無論是單一component或多個,都是跑在kubernetes裡面的Pods中。a pod 代表cluster中一組正在運行的containers。
用workload resource 管理pods的健康狀況,內建幾種資源可以調用
  1. Deployment and ReplicaSet: 管理stateless application workload
  2. StatefulSet: 讓你跑相關pods時可以觀察 資源狀態
  3. DaemonSet: 定義增加根據DaemonSet配置的node時,控制Pod調度到新的node上
  4. Job and CronJob: 定義定時做一次性的任務

K8S service, load balancing, and Networking

跟網路相關的資源有以下四個重點
  1. Pod裡面的containers 用network loopback機制去做溝通
  2. Cluster networking 提供pods彼此間溝通
  3. Service 資源讓你在cluster外建立讓外網連得到Pod的application
  4. Service也可發布只給cluster內部使用的服務

在這釐清一下,到底service 與ingress有什麼差別

設定對外的Service可藉由cloud provider提供的load balancer去控制。Ingress則不屬於Service,Ingress controller監控ingress resource,根據ingress rule去update service configuration。
舉個例子,在處理public traffic into cluster時,可以容易從Service 的load balancer設定。但Ingress 有更進階的功能像是TLS/HTTPS termination 以及 HTTP routing。

要實作ingress,則必須要有ingress controller,像是ingress-nginx, AWS Load balancer Controller之類的



reference:

留言

這個網誌中的熱門文章

[專案] 銀行端末系統

如何在MacOS 中自由切換不同Python版本 - pyenv + virtualenv

用 C# 控制 Win7 輸入法