iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0

隔離環境就靠它! (⁎⁍̴̛ᴗ⁍̴̛⁎)


假設今天公司架了一個 Kubernetes Cluster,打算搬幾套系統進去運作看看。

A自告奮勇,把負責的系統先部署上去了:
https://ithelp.ithome.com.tw/upload/images/20240921/20168437qXJTuDB6WK.png

一切都很順利,系統也運行的好好的。
團隊決定把 B 系統也部署上去。
https://ithelp.ithome.com.tw/upload/images/20240921/20168437Ldz9JTxh2N.png
運行了一段時間,相安無事。
不過近期,系統A的流量因為行銷活動開始增加。所幸當初設定有做好自動擴展機制,倒也沒什麼問題,系統照常運行。
又過了兩天,B 系統的負責人發現不對勁了。
https://ithelp.ithome.com.tw/upload/images/20240921/201684375PNuvuY8V2.png

最近常接到使用者反應系統速度變慢了。

一檢查之下發現,Cluster 的資源被系統 A 吃到自己的系統連一個 Pod 都加不上去 ಠ_ಠ

... 欸不是。
這位鄰居你有沒有禮貌?!
就這樣把資源直接吃光?蛤!?
對啦你是運行的好好的但我這邊出問題了啊!!!

強烈要求做個圍牆!以後我們井水不犯河水!

https://ithelp.ithome.com.tw/upload/images/20240921/20168437TmtUHpMp9J.png


這就是 Namespace 的主要功能:Cluster 中的環境區分。
透過資源隔離 ,開發團隊就可以在 Cluster 中做各種配置和操作,而不需要擔心影響到 Cluster 中的其他系統。不但可以將不同的服務、團隊或專案隔離開來,還能避免資源衝突和意外的相互影響。

Kubernetes 本身其實也有預設的 Namespace:

  • default:Cluster 建立時就會一併建置,未指定 Namespace 的資源會被分配到這裡。
  • kube-system:Kubernetes 的核心組件使用的 Namespace。
    • 其中屬於 Control Plane 的組件有:
      • kube-apiserver:Kubernetes 的 API 服務,用於元件之間的溝通
      • kube-controller-manager:動化控制中心,包含多組 Controller,用於調節 Cluster 狀態
      • kube-scheduler:處理所有建立 Pod 的指令,並決策要在哪個 Node 上運行
      • ETCD:Cluster 的資料儲存中心
    • 屬於 Node 的組件有:
      • kubelet:確保 Node 中的 Pod 運行符合設定
      • kube-proxy:管理 Node 網路和轉發流量
    • 其他組件:
      • CoreDNS:Cluster 中的 DNS 服務
      • Dashboard:Web 界面,用於管理和監控 Cluster(需另行安裝)
      • Container Network Interface (CNI) 套件: 如 Flannel、Calico 等
      • 如果使用平台上的 Kubernetes 服務,可能還會包含供應商添加的組件
  • kube-public:特殊的 Namespace,在這個 Namespace 中的資源全都公開可讀取(很少使用)

實務上的小提醒:

建立 Namespace 時避開 kube-,這個前綴通常是 Kubernetes 系統在使用
非常不建議在 kube-system 中部署自定義應
對 kube-system 中的資源進行修改時要特別小心,可能會影響整個集群的穩定性

當然,環境隔離的好處不只有開頭舉例的資源分配,還有其他使用情境:

  • 資源管理
    Namespace 中可以設定資源配置,設定對象為 Pod,設定方式包含LimitRequestsLimitRange

    • Limit:Pod 可使用的資源上限
    • Requests:Pod 保證可獲得的資源量
    • LimitRange:Pod 可配置資源限制(包含上下限)

    當 Pod 沒有設定資源限制,會套用 LimitRequests
    反之則需滿足 LimitRange 限制,否則無法啟動。

  • 安全性機制
    Namespace 結合 Kubernetes 的角色控制(RBAC, Role-Based Access Control),可以用來限制帳戶對資源的訪問權限,從而提高系統安全性。

  • 避免命名衝突
    在不同的 Namespace 中,可以使用相同的資源名稱而不會發生衝突(同一個 Namespace 中需唯一)

  • 環境分離
    可以輕鬆地在同一個 Cluster 中隔離開發、測試和正式環境

  • 成本效益
    透過在同一個 Cluster 中運行多個分區,可以最有效地利用硬體資源

  • 多用戶場景
    常見於大型組織或雲服務供應商中,當需要在同一個 Cluster 上為多個客戶或團隊提供服務。Namespace 能確保每個用戶都擁有自己的獨立空間。

小結

Namespace 是一種邏輯隔離機制,它讓不同團隊和專案能夠共享同一個 Cluster,並保持獨立運行互不干擾。透過 Namespace,可以有效地組織和管理 Cluster 資源,並且能輕鬆實現資源額度配置和權限控管,確保每個環境中的服務能夠安全、高效地運行。


上一篇
Day-19 Deployment:Rollback
下一篇
Day-21 ResourceQuota & LimitRange
系列文
Kubernetes圖解筆記26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言