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有
- kube-apiserver 則是操作Control Plane的介面
- etcd 儲存cluster parameter data
- kube-scheduler 定觀察pods與node的狀態
- kube-controller-manger - 在controller process中又分這幾種類型
- Node controller
- job controller
- endpoint controller
- service account & token controller
- 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運行環境。
- kubelet - An agent run在每個node來確保 containers確實跑在Pod中並且狀態健康
- kube-proxy - a network proxy 跑在每個node中來維護網路規則,設定給你的pods與內部、外部溝通
- Container runtime - 負責運行containers, 包含: Docker, containerd, CRI-O 等
Addons - 用k8s資源去實踐其他cluster功能,例如:
- DNS
- Web UI - dashboard 等用途
- Container Resource Monitoring - 紀錄containers時間序列metrics到database並提供視覺化介面
- Cluster-level logging
K8S workload
跑在k8s裡面的application。無論是單一component或多個,都是跑在kubernetes裡面的Pods中。a pod 代表cluster中一組正在運行的containers。
用workload resource 管理pods的健康狀況,內建幾種資源可以調用
- Deployment and ReplicaSet: 管理stateless application workload
- StatefulSet: 讓你跑相關pods時可以觀察 資源狀態
- DaemonSet: 定義增加根據DaemonSet配置的node時,控制Pod調度到新的node上
- Job and CronJob: 定義定時做一次性的任務
K8S service, load balancing, and Networking
跟網路相關的資源有以下四個重點
- Pod裡面的containers 用network loopback機制去做溝通
- Cluster networking 提供pods彼此間溝通
- Service 資源讓你在cluster外建立讓外網連得到Pod的application
- 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。
reference:
留言
張貼留言