参考文档:https://docs.cilium.io/en/stable/operations/troubleshooting/

可批量执行cilium pod命令的脚本(1.11~1.13)

  1. vim k8s-cilium-exec.sh
  2. #!/bin/bash
  3. # SPDX-License-Identifier: Apache-2.0
  4. # Copyright Authors of Cilium
  5. # 在所有cilium容器中执行命令
  6. trap cleanup EXIT
  7. function kill_jobs {
  8. j=$(jobs -p)
  9. if [ ! -z "$j" ]; then
  10. kill -$1 $j 2> /dev/null
  11. fi
  12. }
  13. function cleanup {
  14. kill_jobs INT
  15. sleep 2s
  16. kill_jobs TERM
  17. }
  18. function get_cilium_pods {
  19. kubectl -n "${K8S_NAMESPACE}" get pods -l k8s-app=cilium -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName | \
  20. grep cilium
  21. }
  22. K8S_NAMESPACE="${K8S_NAMESPACE:-kube-system}"
  23. CONTAINER="${CONTAINER:-cilium-agent}"
  24. while read -r podName nodeName ; do
  25. (
  26. title="==== detail from pod $podName , on node $nodeName "
  27. msg=$( kubectl -n "${K8S_NAMESPACE}" exec -c "${CONTAINER}" "${podName}" -- "${@}" 2>&1 )
  28. echo -e "$title \n$msg\n"
  29. )&
  30. done <<< "$(get_cilium_pods)"
  31. wait

查看所有节点状态:

  1. ./k8s-cilium-exec.sh cilium status

查看cilium pod状态:

  1. ./k8s-cilium-exec.sh cilium-health status

获取cilium pod脚本

  1. vim k8s-get-cilium-pod.sh
  2. #!/bin/bash
  3. # SPDX-License-Identifier: Apache-2.0
  4. # Copyright Authors of Cilium
  5. # 在所有cilium容器中执行命令
  6. trap cleanup EXIT
  7. function kill_jobs {
  8. j=$(jobs -p)
  9. if [ ! -z "$j" ]; then
  10. kill -$1 $j 2> /dev/null
  11. fi
  12. }
  13. function cleanup {
  14. kill_jobs INT
  15. sleep 2s
  16. kill_jobs TERM
  17. }
  18. function get_cilium_pods {
  19. kubectl -n "${K8S_NAMESPACE}" get pods -l k8s-app=cilium -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName | \
  20. grep cilium
  21. }
  22. K8S_NAMESPACE="${K8S_NAMESPACE:-kube-system}"
  23. CONTAINER="${CONTAINER:-cilium-agent}"
  24. while read -r podName nodeName ; do
  25. (
  26. title="==== detail from pod $podName , on node $nodeName "
  27. msg=$( kubectl -n "${K8S_NAMESPACE}" exec -c "${CONTAINER}" "${podName}" -- "${@}" 2>&1 )
  28. echo -e "$title \n$msg\n"
  29. )&
  30. done <<< "$(get_cilium_pods)"
  31. wait
  32. root@tke-cilium-node-0003.novalocal:/root/cilium-scripts#^C
  33. root@tke-cilium-node-0003.novalocal:/root/cilium-scripts#./k8s-cilium-exec.sh cilium-health status^C
  34. root@tke-cilium-node-0003.novalocal:/root/cilium-scripts#ll
  35. total 8
  36. -rwxr-xr-x 1 root root 813 Apr 11 10:44 k8s-cilium-exec.sh
  37. -rwxr-xr-x 1 root root 428 Apr 11 10:56 k8s-get-cilium-pod.sh
  38. root@tke-cilium-node-0003.novalocal:/root/cilium-scripts#cat k8s-get-cilium-pod.sh
  39. #!/bin/bash
  40. # SPDX-License-Identifier: Apache-2.0
  41. # Copyright Authors of Cilium
  42. # Given an app pod and namespace; get corresponding cilium pod
  43. if [ $# -ne 2 ]
  44. then
  45. echo "Usage: get_cilium_pod.sh <pod> <namespace>"
  46. exit 1
  47. fi
  48. K8S_NAMESPACE="${K8S_NAMESPACE:-kube-system}"
  49. kubectl get pods -n "${K8S_NAMESPACE}" -owide | grep cilium | grep `kubectl get pods $1 -owide -n $2 | awk '{print $7}' | tail -n1` | awk '{print $1}'

列出 Cilium不为其提供网络的集群中的所有 Kubernetes pod 。这包括在主机网络模式下运行的 pod 和在部署 Cilium 之前启动的 pod。

  1. vim k8s-unmanaged.sh
  2. #!/bin/bash
  3. # SPDX-License-Identifier: Apache-2.0
  4. # Copyright Authors of Cilium
  5. function all_ceps { kubectl get cep --all-namespaces -o json | jq -r '.items[].metadata | .namespace + "/" + .name'; }
  6. function all_pods { kubectl get pods --all-namespaces -o json | jq -r '.items[] | select((.status.phase=="Running" or .status.phase=="Pending") and (.spec.hostNetwork==true | not)) | .metadata | .namespace + "/" + .name'; }
  7. echo "Skipping pods with host networking enabled or with status not in Running or Pending phase..."
  8. sort <(all_ceps) <(all_pods) | uniq -u

查看:

  1. ./k8s-unmanaged.sh

执行命令从您的 Kubernetes 集群中收集故障排除信息

  1. cilium-cli sysdump
文档更新时间: 2023-04-11 11:10   作者:张尚