相當於 node agent,用於管理該 Node 上的所有 pods 狀態以及與 master node 即時溝通
將目前該 Node 上所有 Pods 的資訊傳給 iptables,讓 iptables 即時獲得在該 Node 上所有 Pod 的最新狀態,確保每個 Pod 都可以順利的互相溝通。
Horizontal Scaling 就是新增更多的節點,獲取更多資源來分擔原有的工作內容
在 k8s 中通常都是作 Pod 的 Horizontal Scaling
Vertical Scaling 則是新增更多的 CPU 、 RAM 等等來獲得更多運作資源
通常都要利用 gcp 、 aws 等等雲端服務才能實現
使用者透過瀏覽器向網站伺服提出的每一次請求(request)都是獨立的,彼此沒有相關的
這樣的好處就是可以很輕易的擴充使用規模
跟 stateless 相反, stateful 會紀錄每筆資料的狀態,像是資料庫等等都是 stateful application
k8s 用來管理 Pod 數量以及狀態的 controller
由於要控制 Pod 因此會有一個 selector 的設定來決定要控制哪個 Pod,至於要如何媒合就需要寫 Label
selector:
app: frontend
在官網上是這樣說明的:
a Deployment is a higher-level concept that manages ReplicaSets and provides declarative updates to Pods along with a lot of other useful features.
其實在官網中 Replication controller 後面有這段文字
NOTE: A Deployment that configures a ReplicaSet is now the recommended way to set up replication.
Replica Set 提供了比 Replication controller 更彈性的部屬方法
整體寫法就會像這樣
selector
matchLabels:
app: frontend
matchExpressions:
- {key: env, operator: In, values: [dev]}
為了方便控管該機器上所有 Ingress
除了管理 Ingress 外,還有一個更重要的功能就是做 Load Balancer
其實 Ingress 本身是沒辦法做 Load Balancer 的,只能依靠像是 GCP 、 AWS 等雲端服務進行 Load Balancer
為了解決這種問題於是創造了 Ingress controller 來進行 Load Balancer
Ingress controller 常用 GCE 或 Nginx 來實作
每一個 container 都可以有屬於它自己的 resource request 與 resource limit ,可以限制這個 Pod 的使用資源,避免單一 Pod 佔用 Node 太多資源
此 Pod 最小需要多少 Node 的 cpu 資源
此 Pod 最多只能用到多少 Node 的 cpu 資源
在 k8s 的 Resource Quotas 中會用 m(millicore) 這個單位來表示,舉例來說:cpu: 400m 代表存取 0.4cpu 的資源
假如今天存取配置超過機器自身可提供,k8s 會回傳 403 FORBIDDEN 代表超出可使用的配置範圍
為了要確認 Pod 是否有順利運作
用於判斷 Pod 是否為 running 狀態,如果 livenessProbe 探測到容器不健康,則 kubelet 將砍掉 Pod 並重啟,如果該 Pod 不包含 livenessProbe,則 kubelet 認為該 Pod 的 livenessProbe 返回值永遠成功。
用於判斷 Pod 是否啟動完成可以接收請求,如果 readinessProbe 失敗,則會將此 Pod 的 Endpoint 從對應的 service 的 Endpoint 列表中移除,從此不再將任何請求調度此Pod上,直到下次探測成功。
k8s 用來進行任務排程,作用類似 linux 的 crontab
通常 cron 格式會長這樣:
* * * * *
假如今天要每三個小時做一次排程動作也可以這樣寫
* */3 * * *
# */3 代表 0, 3, 6, 9, 12, 15, 18, 21
下次分享會的主題是 k8s 實作,會教大家如何撰寫 yaml 檔以及架設網站
謝謝大家!