83 lines
2.3 KiB
YAML
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
|