manifests/ping-all-node/daemon-set-ping.yaml
2025-04-12 13:11:34 +08:00

83 lines
2.3 KiB
YAML

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ping-nodes
namespace: cron
spec:
selector:
matchLabels:
app: ping-nodes
template:
metadata:
labels:
app: ping-nodes
spec:
serviceAccountName: ping-nodes-sa
containers:
- name: ping-nodes
image: busybox
command:
- /bin/sh
- -c
- |
while true; do
# 获取当前节点的主机名
CURRENT_NODE=$(cat /etc/hostname)
echo "Current node: $CURRENT_NODE"
# 设置API查询环境变量
APISERVER=https://kubernetes.default.svc
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
TOKEN=$(cat ${SERVICEACCOUNT}/token)
# 查询所有节点信息并提取IP
NODE_DATA=$(wget --no-check-certificate --header="Authorization: Bearer ${TOKEN}" -qO- ${APISERVER}/api/v1/nodes)
# 提取节点名称和内部IP并ping所有节点
echo "$NODE_DATA" | tr ',' '\n' | grep '"name"\|"type":"InternalIP"\|"address"' > /tmp/node_info.txt
cat /tmp/node_info.txt | while read line; do
if echo "$line" | grep -q '"name"'; then
NODE_NAME=$(echo "$line" | sed 's/.*"name": *"\([^"]*\)".*/\1/')
elif echo "$line" | grep -q '"type":"InternalIP"'; then
read ip_line
NODE_IP=$(echo "$ip_line" | sed 's/.*"address": *"\([^"]*\)".*/\1/')
echo "Pinging node $NODE_NAME ($NODE_IP)"
ping -c 3 $NODE_IP
echo "-----------------------------------"
fi
done
# 等待5分钟
echo "Waiting for 5 minutes before next ping..."
sleep 300
done
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: ping-nodes-sa
namespace: cron
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-reader
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ping-nodes-rb
subjects:
- kind: ServiceAccount
name: ping-nodes-sa
namespace: cron
roleRef:
kind: ClusterRole
name: node-reader
apiGroup: rbac.authorization.k8s.io