脚本思路
- 创建资源对象:使用
kubectl
命令通过 Kubernetes API 创建 Deployment 和 Service。kubectl create
命令可以直接根据指定的参数创建资源。
- 监控机制:使用
kubectl get pods
命令获取 Pod 状态,通过循环不断检查 Pod 状态。如果发现非 Running 状态的 Pod,则使用 kubectl delete pod
命令删除该 Pod,Kubernetes 会自动重新创建一个新的 Pod。同时,将相关操作记录到指定日志文件中。
核心代码片段
#!/bin/bash
# 创建 Deployment
kubectl create deployment my - app --image=my - app:v1 --replicas=3
# 创建 Service
kubectl expose deployment my - app --type=NodePort --port=30080
while true; do
# 获取所有 Pod 状态
POD_STATUS=$(kubectl get pods -l app=my - app -o jsonpath='{.items[*].status.phase}')
IFS=' ' read -ra STATUS_ARRAY <<< "$POD_STATUS"
for i in "${!STATUS_ARRAY[@]}"; do
if [ "${STATUS_ARRAY[i]}" != "Running" ]; then
POD_NAME=$(kubectl get pods -l app=my - app -o jsonpath='{.items['$i'].metadata.name}')
echo "$(date) - Pod $POD_NAME is not running. Restarting..." >> /var/log/k8s - my - app - monitor.log
kubectl delete pod $POD_NAME
fi
done
sleep 10 # 每10秒检查一次
done