Kubernetes 1.31:Kubectl Debug 中的自訂效能分析功能晉升 Beta 版
有許多方法可以對叢集中的 Pod 和節點進行故障排除。然而,kubectl debug
是最簡單、最常用且最突出的方法之一。它提供一組靜態設定檔,每個設定檔適用於不同的角色。例如,從網路管理員的角度來看,偵錯節點應該像這樣簡單
$ kubectl debug node/mynode -it --image=busybox --profile=netadmin
另一方面,靜態設定檔也帶來固有的僵化性,這與它們的易用性相反,對某些 Pod 產生一些影響。因為有各種各樣的 Pod(或節點)都有其特定的需求,不幸的是,有些 Pod 無法僅透過使用靜態設定檔進行偵錯。
以一個簡單的 Pod 實例為例,該 Pod 由一個容器組成,其健康狀況依賴於環境變數
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: customapp:latest
env:
- name: REQUIRED_ENV_VAR
value: "value1"
目前,複製 Pod 是唯一支援在 kubectl debug 中偵錯此 Pod 的機制。此外,如果使用者需要修改 REQUIRED_ENV_VAR
為其他值以進行進階故障排除,該怎麼辦?沒有機制可以實現這一點。
自訂設定檔
自訂設定檔是 --custom
標誌下提供的新功能,在 kubectl debug 中引入以提供擴展性。它期望 YAML 或 JSON 格式的部分 Container
規格。為了透過建立臨時容器來偵錯上面的 example-container,我們只需定義這個 YAML
# partial_container.yaml
env:
- name: REQUIRED_ENV_VAR
value: value2
並執行
kubectl debug example-pod -it --image=customapp --custom=partial_container.yaml
這是另一個範例,一次修改多個欄位(變更連接埠號碼、新增資源限制、修改環境變數),以 JSON 格式呈現
{
"ports": [
{
"containerPort": 80
}
],
"resources": {
"limits": {
"cpu": "0.5",
"memory": "512Mi"
},
"requests": {
"cpu": "0.2",
"memory": "256Mi"
}
},
"env": [
{
"name": "REQUIRED_ENV_VAR",
"value": "value2"
}
]
}
限制
不受控制的擴展性會損害可用性。因此,不允許對某些欄位進行自訂設定檔,例如 command、image、lifecycle、volume devices 和 container name。未來,如果需要,可以將更多欄位新增到不允許的清單中。
局限性
kubectl debug
命令有 3 個方面:使用臨時容器進行偵錯、Pod 複製和節點偵錯。這些方面最大的交集是 Pod 內的容器規格。因此,自訂設定檔僅支援修改以 containers
定義的欄位。這導致一個局限性,如果使用者需要修改 Pod 規格中的其他欄位,則不支援。
致謝
特別感謝所有從最初構想到實際實施(按字母順序排列)審閱和評論此功能的貢獻者