Skip to content

Commit f27f3b2

Browse files
committed
observe sts #1
1 parent 275cf7b commit f27f3b2

File tree

2 files changed

+82
-2
lines changed

2 files changed

+82
-2
lines changed

app/main.go

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,42 @@ func listPod(clientset *kubernetes.Clientset) {
101101
msg := generateAlertMsg(notReadyPods)
102102
sendAlertToTeams("Pod Defect Alert", msg, teamsEndpoint)
103103
}
104-
// Issue #1
104+
105105
// https://github.com/iaoiui/PodMonitoringTool/issues/1
106106
observeReplicaNumbers(clientset)
107107

108108
}
109109

110+
// observe replica number of deployment and statefulsets
110111
func observeReplicaNumbers(clientset *kubernetes.Clientset) {
111112
// get not ready deployment
112113
notReadyDeployments := getNotReadyDeployments(clientset)
113114
msg := generateAlertMsgForDeployment(notReadyDeployments)
114115
sendAlertToTeams("Deployment Defect Alert", msg, teamsEndpoint)
115116

116-
// TODO get not ready statefulsets
117+
// get not ready statefulsets
118+
notReadyStatefulsets := getNotReadyStatefulsets(clientset)
119+
msg = generateAlertMsgForStatefulset(notReadyStatefulsets)
120+
sendAlertToTeams("Statefulsets Defect Alert", msg, teamsEndpoint)
121+
}
122+
123+
func getNotReadyStatefulsets(clientset *kubernetes.Clientset) []appsv1.StatefulSet {
124+
statefulsets, err := clientset.AppsV1().StatefulSets(namespace).List(context.TODO(), metav1.ListOptions{})
125+
if err != nil {
126+
panic(err.Error())
127+
}
128+
notReadyStatefulsets := []appsv1.StatefulSet{}
129+
130+
for _, s := range statefulsets.Items {
131+
desiredReplicas := s.Status.Replicas
132+
availableReplicas := s.Status.ReadyReplicas
133+
if desiredReplicas != availableReplicas {
134+
notReadyStatefulsets = append(notReadyStatefulsets, s)
135+
}
136+
137+
}
138+
139+
return notReadyStatefulsets
117140
}
118141

119142
func getNotReadyDeployments(clientset *kubernetes.Clientset) []appsv1.Deployment {
@@ -135,6 +158,18 @@ func getNotReadyDeployments(clientset *kubernetes.Clientset) []appsv1.Deployment
135158
return notReadyDeployments
136159
}
137160

161+
func generateAlertMsgForStatefulset(statefulsets []appsv1.StatefulSet) string {
162+
msg := ""
163+
log.Printf("%v statefulsets is not ready \n", len(statefulsets))
164+
msg += fmt.Sprintf("# **%v statefulset is not ready** \n", len(statefulsets)) + "\n"
165+
for i, sts := range statefulsets {
166+
log.Println(i + 1)
167+
log.Println("\t", sts.Name, "\t")
168+
msg += fmt.Sprintln("\t Namespace: \t", sts.Namespace, "StatefulSet: \t", sts.Name, ", availableReplicas: \t", sts.Status.ReadyReplicas, ", desiredReplicas: \t", sts.Status.Replicas) + "\n"
169+
}
170+
return msg
171+
}
172+
138173
func generateAlertMsgForDeployment(deployments []appsv1.Deployment) string {
139174
msg := ""
140175
log.Printf("%v deployments is not ready \n", len(deployments))
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: stateful
5+
spec:
6+
replicas: 1
7+
selector:
8+
matchLabels:
9+
app: stateful
10+
serviceName: stateful
11+
template:
12+
metadata:
13+
labels:
14+
app: stateful
15+
spec:
16+
containers:
17+
- image: busybox
18+
name: stateful
19+
command: ["sh", "-c"]
20+
args:
21+
- |
22+
touch /data/hostname
23+
while true; do
24+
echo "`date`: `hostname`" >> /data/hostname
25+
sleep 1
26+
done
27+
touch /data/ready
28+
volumeMounts:
29+
- name: data
30+
mountPath: /data
31+
readinessProbe:
32+
exec:
33+
command:
34+
- cat
35+
- /data/ready
36+
initialDelaySeconds: 5
37+
periodSeconds: 5
38+
volumeClaimTemplates:
39+
- metadata:
40+
name: data
41+
spec:
42+
accessModes: ["ReadWriteOnce"]
43+
resources:
44+
requests:
45+
storage: 10Mi

0 commit comments

Comments
 (0)