前言
我們團隊使用 K8s 一段時間了, 它帶來了許多的便利及好處。
在 K8s 的環境使用了這麼久一直沒有好好去探討這方面的相關知識,
所以要趁這次的鐵人賽30天補上 K8s 基礎概念、釐清各個物件關係、實作部署...等概念,
參考文件包括官網以及網路上的技術分享文章,
另外會搭配【Kubernetes 進階實戰】這本書作為學習進度的參考與協助理解更多細項,
預計採用minikube做為本機的練習環境。
接下來將每天花一點時間邊查、邊學、邊做、邊寫,遇到卡關或有疑問也會記錄下來,
如果學習的過程發現前幾天有寫錯的觀念也會回頭做修正,
以這30天為起點持續地記錄下每天學習K8s的過程, 循序漸進的將這個技能收進口袋裡。
遇見K8s以前和以後
K8s 導入的契機就在我們團隊正好開啟了一個新的伊甸園計劃的時候,
原本就使用微服務的我們立刻由強大的同事們去評估導入K8s的效益;我們團隊使用的是go開發, 成果都是交付執行檔;微服務之後架起一個環境就需要架起很多相依服務, 或者一個服務要起多台就必須分別到不同的主機去啟動,有很多台機器跟設定要管理。
在K8s之前大概遇過下面幾個狀況:
-
開發人員遇到的問題
- 一個服務相依數個服務, 用實體機或虛擬機架設環境都需要列管各個主機的資訊
- 服務在本機跑起來沒問題, 換個環境就不行了
- 共用環境大家都在更新, A改壞了, B就不能用了, 或是C服務資源沒控管好影響到其他服務等
-
維運人員遇到的問題
- 流量拉高跳警示了, 請幫忙加機器
- 服務死掉了, 請幫忙重啟
- 套件更版了要升級, 請幫忙升級
- 再架一個站吧
諸如此類相互影響的問題一直在消耗團隊的開發成本...
後來團隊導入 K8s 後我們獲得了這樣的工作環境:
- 每個工程師零差異且穩定的開發環境, port-forward 馬上就可以用了
- 個別服務發生問題時互不干擾
- 不需理解相依服務如何架設, 只需著重在API溝通
- 機器loading拉高時能自動擴充
- 能夠滾動更新, 限縮對線上環境的最小影響
- 隨時可以重新部署環境
其他還有跟k8s搭配一起使用的istio, 等隔壁棚的文章寫好之後我再來補上連結
那就開始紀錄下我的K8s學習之路了
初識 Kubernetes
Kubernetes 簡稱 K8s, 是由 Google 開發的一套開源系統, 主要用於自動部署, 自動擴充和管理容器。
它利用網路將多台實體機或虛擬機彙整為一個叢集, 叢集中會有一個 Master 負責管理整個叢集,
其餘的是 Worker Node, 在叢集內容器彼此可以跨機器溝通。
-
Kubernetes組成
圖片來源
- Master:
K8s cluster的中樞, 負責API管理、追蹤服務健康狀態、協調工作負載以及編排各組件之間的溝通等
角色包含API Server, controller-manager, scheduler, etcd...等
一個Master節點就可以完成所有工作,但考量到實際應用須管理的項目眾多,通常會部署多個Master主機。
- Node:
Kubernetes 內的工作節點, 負責接收來自Master的工作指令並根據指令做對應的行為,
例如創建Pod或刪除Pod,調整網路規則等;Node可以是任何形式的設備,
角色包含 kubelet, kube-proxy, container engine...等
Master會將這些設備抽象為Node進行統一管理, Node的數量往往比Master要來的多很多。
-
Kubernetes特性
- 自動部署:
編寫好yaml後即可在不同的環境隨時部署一樣的內容
- 自動修復:
支援服務發生錯誤後自動重啟或節點故障後重新調度,
也會檢查節點健康狀態進行關閉容器並重新建立等自我修復行為
- 水平擴展:
支援手動擴展或自動監測CPU等資源使用狀況進行自動伸縮擴展
- 主動發現服務和流量監測負載平衡:
透過內部組件kubeDNS為每個Service配置DNS名稱,
並允許叢集內的client直接使用該名稱對Service進行訪問,
而Service 則透過iptables 或 ipvs內建了負載均衡機制
- 自動發布、滾動更新和回滾:
更新時會自動偵測新的image健康狀態, 等到新的image正常運作之後才會關閉原本的pod,
若是新的image發生問題則會立刻執行回滾操作, 確保不會在同一時間殺掉所有的pod
- ConfigMap 與 Secret 設定:
提供 ConfigMap 將設定檔和image解耦, 需要異動config相關設定時不需連動修改image,
提供 Secret 支援存放敏感資料, 例如用戶名, 密碼, 密鑰等, 讓需要的人可依照情況使用
今日小結
今天就先紀錄下K8s是怎麼走進我們開發團隊的,以及稍微瀏覽一下K8s的樣貌。
K8s可以在主機上管理和應用各個容器化服務的系統, 與容器的概念息息相關, 最小部署單位是Pod,而容器需要放在Pod裡面才能運行。
下一篇就來研讀一下容器相關的概念吧!