如何快速重新平衡Pod所在的Worker Node - 使用 PowerShell Core

如何快速重新平衡Pod所在的Worker Node - 使用 PowerShell Core

在一個標準 3 台 Node (1 Control Plane + 2 Worker Node)的 Kubernetes 叢集上,在進行維護(drain)之後很容易出現 Pods 集中在某一台 Worker Node 的情況。這在測試區還好,測試區更新極快,通常沒幾天就能回到平衡(Balance)的狀態。正式區就比較麻煩,正式區更新速度不比測試區,因此,Pods 集中在某一台 Worker Node 情況容易時間不短,這會造成特定 Worker Node 資源吃重的情況。針對維護過後,Pods 會集中在某一台 Worker 上,我想改進這一點。

Ubuntu UFW with Kubernetes and Calico Firewall Rules

Ubuntu UFW with Kubernetes and Calico Firewall Rules

之前在架設 Kubernetes 叢集預設把防火牆給關閉。當然,關閉防火牆是非常不安全的行為。 當所有 Kubernetes 和 Calico 組態與服務都上線之後,我們需要把防火牆設定回去。

這裡只針對兩個部分:Kubernetes 與 Calico 所以需要埠(Port)。

Calico 3.28.1 IPPool Issue #9100 - Donwngrade solution

Calico 3.28.1 IPPool Issue #9100 - Donwngrade solution

我們參考 Calico upgrade docs (uses the operator) 升級了 Calico CNI 元件從 3.27.x 到 3.28.1。

$ calicoctl version
Client Version:    v3.28.1
Git commit:        601856343
Cluster Version:   v3.28.1
Cluster Type:      typha,kdd,k8s,operator,bgp,kubeadm,win

升級後發現,原本的 default-ipv4-ippool 被設定回來了。在 3.27.x,因為一開始沒考慮好網段問題,因此我們設定了一組新的 IPPool 來提供給 Pods 使用,來解決一些 IP 網路的問題。在 3.27 依照 migrate-pools 文件,我們為 default-ipv4-ippool 設定了 disabled: true 並且運作良好。但升級至 3.28.1 後,除了 default-ipv4-ippool 被設定回來並且被啟用了。我們還發現,原始按照文件可以設定 disabled: true 無法被正確套用,刪除指令就算執行成功,其實也是無效的。

$ calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   VXLANMODE     DISABLED   DISABLEBGPEXPORT   SELECTOR
default-ipv4-ippool   192.168.0.0/16   true   Never      CrossSubnet   false      false              all()
new-pool              10.244.0.0/16    true   Never      CrossSubnet   false      false              all()

$ calicoctl get ippool -o yaml > pools.yaml
# add disabled: true
$ vim pools.yaml
$ calicoctl apply -f pools.yaml
Successfully applied 2 'IPPool' resource(s)
# DISABLED : false
$ calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   VXLANMODE     DISABLED   DISABLEBGPEXPORT   SELECTOR
default-ipv4-ippool   192.168.0.0/16   true   Never      CrossSubnet   false      false              all()
new-pool              10.244.0.0/16    true   Never      CrossSubnet   false      false              all()

# delete default-ipv4-ippool
$ calicoctl delete pool default-ipv4-ippool
Successfully deleted 1 'IPPool' resource(s)
$ calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   VXLANMODE     DISABLED   DISABLEBGPEXPORT   SELECTOR
default-ipv4-ippool   192.168.0.0/16   true   Never      CrossSubnet   false      false              all()
new-pool              10.x.0.0/16    true   Never      CrossSubnet   false      false              all()

# use patch method
$ calicoctl patch ippool default-ipv4-ippool -p '{"spec": {"disabled": true}}'
$ calicoctl get ippool -o wide
NAME                  CIDR             NAT    IPIPMODE   VXLANMODE     DISABLED   DISABLEBGPEXPORT   SELECTOR
default-ipv4-ippool   192.168.0.0/16   true   Never      CrossSubnet   false      false              all()
new-pool              10.x.0.0/16    true   Never      CrossSubnet   false      false              all()

30天挑戰精通 PowerShell 推薦序

30天挑戰精通 PowerShell 推薦序

30天挑戰精通 PowerShell

時間先讓我回到2017年前後,那段時間有幾件技術正在發酵、發芽、成長。

  • 當時有個火紅的技術產品叫 Docker,一下子讓全世界都跟瘋了一樣,每天大家都在談容器化(Containerization),我也不例外,開始接擉容器、學習容器、最後也順利導入容器。
  • 拜 git 及 Github 所賜,分散式版控(Version Control)技術推廣大大突破,但只有控版還是無法解決「最後一哩」的問題。
  • 第三個非常重要的概念及技術解決了「最後一哩」的問題,即C I/CD(Continuous Integration/Continuous Delivery(Deployment))。
  • 從開發、版控、容器、CI/CD完成最後一哩持續自動化部屬,最後整合並成長為現在大家都知道的DevOps。

重構:改善 .NET 與 C# 應用程式的設計,償還欠下的技術債-審校序

重構:改善 .NET 與 C# 應用程式的設計,償還欠下的技術債-審校序

2023年12月,正忙於年末最後一場iThome - Kubernetes Summit 2023的演講,心想,忙完這一場終於可以好好休息一下。但事情永遠不是傻子所想的那麼簡單。突然,信箱進來一封編輯邀約的信件,正想說,如果是翻譯工作,就再幫忙找其他新鮮的肝(新譯者),結果是翻譯也不是翻譯。出版社嘗試用了ChatGPT進行初譯,然後由專業編輯與譯者進行修潤與審校,想嘗試這樣的合作模式。快速瀏覽了主題與內容,我非常有興趣,立即回信說,我想接下這份工作。