如何為地端VM伺服器安裝Azure Monitor Agent

如何為地端伺服器安裝Azure Monitor Agent

前篇,我們先把地端安裝 Azure Monitor Agent 的前置環境給準備好。接下來我們要安裝 Azure Monitor Agent。

AzureMonitor - Virtual Machines

如何在Azure Arc加入多台地端VM伺服器

如何在Azure Arc加入多台地端VM伺服器

我們使用 Azure Log Analytics agent(Microsoft Monitoring Agent (MMA)) 來收集監控地端 VM 多年,但從 2023 年初開始,不斷看到 Azure 文件或系統上提示 MMA 在2024年8月31日將不再受到支援。近來地端有申請新的 VM,因此規劃新的 VM 改用Manage Azure Monitor Agent,並且熟悉了解整個設定及升級流程。

Log Analytics Agent Deprecation Message

使用Azure Registry Container for Microsoft Defender進行專案資安修補,以CVE-2024-0057為例

使用Azure Registry Container for Microsoft Defender進行專案資安修補,以CVE-2024-0057為例

我們映像檔(images)是儲存在ACR(Azure Registry Container),在ACR有提供 Microsoft Defender 能提供我們映像檔(images)的安全性報告。

ACR Microsoft Defender 01

Azure DevOps進行Kubernetes CD部署時出現憑證錯誤

Azure DevOps進行Kubernetes CD部署時出現憑證錯誤

同事回報,進行 Kubernetes CD 部署時出現錯誤:

couldn't get current server API group list: the server has asked for the client to provide credentials
unable to recognize "...API.yaml": the server has asked for the client to provide credentials

如何快速重新平衡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()