概述
測(cè)試 Cilium 的時(shí)候,經(jīng)常會(huì)部署完 cilium-agent 的 DaemonSet 之后,手動(dòng)修改 DaemonSet 里關(guān)于 cilium-agent 的啟動(dòng)命令,一般會(huì)改成 sleep inf
來避免容器直接啟動(dòng) cilium-agent,這樣可以方便后面的調(diào)試,比如修改一些環(huán)境變量或者直接修改源碼重新編譯 cilium-agent 的二進(jìn)制,就可以不用重頭到位構(gòu)建新的 Cilium 的鏡像。之前想過為了節(jié)省時(shí)間,可以修改一下 Cilium Helm Chart 提供一個(gè)選項(xiàng)來自動(dòng)打開這個(gè)開關(guān),但是后面細(xì)看了一下官方的 Helm Chart,發(fā)現(xiàn)官方其實(shí)已經(jīng)提供了這樣的選項(xiàng)。
調(diào)試參數(shù)
# cilium-1.14.4/templates/cilium-agent/daemonset.yaml
containers:
- name: cilium-agent
image: {{ include "cilium.image" .Values.image | quote }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- if .Values.sleepAfterInit }}
command:
- /bin/bash
- -c
- --
args:
- |
while true; do
sleep 30;
done
livenessProbe:
exec:
command:
- "true"
readinessProbe:
exec:
command:
- "true"
{{- else }}
查看 cilium-agent 的 DaemonSet 的模板,可以在 helm install
的時(shí)候,加入配置 sleepAfterInit=true
,這樣 cilium-agent 啟動(dòng)的時(shí)候,還會(huì)將 livenessProbe 和 readinessProbe 探針置為 true
,避免容器重啟,如下。
helm install cilium . --set sleepAfterInit=true
需要注意的是,如果通過 sleepAfterInit
休眠了 cilium-agent 的容器,如果想在容器內(nèi)執(zhí)行 /usr/bin/cilium-agent -- --config-dir=/tmp/cilium/config-map
,是會(huì)有一些問題的,最主要就是容器的被配置的 securityContext
是有限制的,但是 cilium-agent 啟動(dòng)的時(shí)候是需要去越權(quán)做些事情的,因此正常來說就算是 sleepAfterInit
,在容器內(nèi)都是無(wú)法正常啟動(dòng) cilium-agent 的,所以靠 sleepAfterInit
沒法直接意做一些 debug 的動(dòng)作。
其他的Debug技巧
# 在Node節(jié)點(diǎn)進(jìn)入cilium-agent容器
nerdctl -n k8s.io exec -it `nerdctl -n k8s.io ps |grep -i cilium-agent|awk '{print $1}'` bash
# 安裝一些常見工具
apt-get update -y
apt-get install -y curl net-tools zip unzip lrzsz procps inetutils-ping
# 下載工具
curl -LO 192.168.1.200/root/dlv
chmod +x dlv
# 下載重新編譯的cilium-agent
curl -LO 192.168.1.13/cilium-agent
chmod +x cilium-agent