iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 1
2
Software Development

K8S - 30天從擦槍到提槍上陣學習筆記。系列 第 1

day 1 K8s以前和以後

前言

我們團隊使用 K8s 一段時間了, 它帶來了許多的便利及好處。
在 K8s 的環境使用了這麼久一直沒有好好去探討這方面的相關知識,
所以要趁這次的鐵人賽30天補上 K8s 基礎概念、釐清各個物件關係、實作部署...等概念,
參考文件包括官網以及網路上的技術分享文章,
另外會搭配【Kubernetes 進階實戰】這本書作為學習進度的參考與協助理解更多細項,
預計採用minikube做為本機的練習環境。

接下來將每天花一點時間邊查、邊學、邊做、邊寫,遇到卡關或有疑問也會記錄下來,
如果學習的過程發現前幾天有寫錯的觀念也會回頭做修正,
以這30天為起點持續地記錄下每天學習K8s的過程, 循序漸進的將這個技能收進口袋裡。

遇見K8s以前和以後

K8s 導入的契機就在我們團隊正好開啟了一個新的伊甸園計劃的時候,
原本就使用微服務的我們立刻由強大的同事們去評估導入K8s的效益;我們團隊使用的是go開發, 成果都是交付執行檔;微服務之後架起一個環境就需要架起很多相依服務, 或者一個服務要起多台就必須分別到不同的主機去啟動,有很多台機器跟設定要管理。

在K8s之前大概遇過下面幾個狀況:

  • 開發人員遇到的問題

    1. 一個服務相依數個服務, 用實體機或虛擬機架設環境都需要列管各個主機的資訊
    2. 服務在本機跑起來沒問題, 換個環境就不行了
    3. 共用環境大家都在更新, A改壞了, B就不能用了, 或是C服務資源沒控管好影響到其他服務等
  • 維運人員遇到的問題

    1. 流量拉高跳警示了, 請幫忙加機器
    2. 服務死掉了, 請幫忙重啟
    3. 套件更版了要升級, 請幫忙升級
    4. 再架一個站吧

諸如此類相互影響的問題一直在消耗團隊的開發成本...

後來團隊導入 K8s 後我們獲得了這樣的工作環境:

  • 每個工程師零差異且穩定的開發環境, port-forward 馬上就可以用了
  • 個別服務發生問題時互不干擾
  • 不需理解相依服務如何架設, 只需著重在API溝通
  • 機器loading拉高時能自動擴充
  • 能夠滾動更新, 限縮對線上環境的最小影響
  • 隨時可以重新部署環境

其他還有跟k8s搭配一起使用的istio, 等隔壁棚的文章寫好之後我再來補上連結

那就開始紀錄下我的K8s學習之路了

初識 Kubernetes

https://ithelp.ithome.com.tw/upload/images/20200906/20129656yK0lqx85Qv.png

Kubernetes 簡稱 K8s, 是由 Google 開發的一套開源系統, 主要用於自動部署, 自動擴充和管理容器。
它利用網路將多台實體機或虛擬機彙整為一個叢集, 叢集中會有一個 Master 負責管理整個叢集,
其餘的是 Worker Node, 在叢集內容器彼此可以跨機器溝通。

  • Kubernetes組成
    https://ithelp.ithome.com.tw/upload/images/20200907/20129656GsXOckPykz.png
    圖片來源

    1. Master:
      K8s cluster的中樞, 負責API管理、追蹤服務健康狀態、協調工作負載以及編排各組件之間的溝通等
      角色包含API Server, controller-manager, scheduler, etcd...等
      一個Master節點就可以完成所有工作,但考量到實際應用須管理的項目眾多,通常會部署多個Master主機。
    2. Node:
      Kubernetes 內的工作節點, 負責接收來自Master的工作指令並根據指令做對應的行為,
      例如創建Pod或刪除Pod,調整網路規則等;Node可以是任何形式的設備,
      角色包含 kubelet, kube-proxy, container engine...等
      Master會將這些設備抽象為Node進行統一管理, Node的數量往往比Master要來的多很多。
  • Kubernetes特性

    1. 自動部署:
      編寫好yaml後即可在不同的環境隨時部署一樣的內容
    2. 自動修復:
      支援服務發生錯誤後自動重啟或節點故障後重新調度,
      也會檢查節點健康狀態進行關閉容器並重新建立等自我修復行為
    3. 水平擴展:
      支援手動擴展或自動監測CPU等資源使用狀況進行自動伸縮擴展
    4. 主動發現服務和流量監測負載平衡:
      透過內部組件kubeDNS為每個Service配置DNS名稱,
      並允許叢集內的client直接使用該名稱對Service進行訪問,
      而Service 則透過iptables 或 ipvs內建了負載均衡機制
    5. 自動發布、滾動更新和回滾:
      更新時會自動偵測新的image健康狀態, 等到新的image正常運作之後才會關閉原本的pod,
      若是新的image發生問題則會立刻執行回滾操作, 確保不會在同一時間殺掉所有的pod
    6. ConfigMap 與 Secret 設定:
      提供 ConfigMap 將設定檔和image解耦, 需要異動config相關設定時不需連動修改image,
      提供 Secret 支援存放敏感資料, 例如用戶名, 密碼, 密鑰等, 讓需要的人可依照情況使用

今日小結

今天就先紀錄下K8s是怎麼走進我們開發團隊的,以及稍微瀏覽一下K8s的樣貌。
K8s可以在主機上管理和應用各個容器化服務的系統, 與容器的概念息息相關, 最小部署單位是Pod,而容器需要放在Pod裡面才能運行。
下一篇就來研讀一下容器相關的概念吧!


下一篇
day 2 容器的代表 Docker
系列文
K8S - 30天從擦槍到提槍上陣學習筆記。30

尚未有邦友留言

立即登入留言