Skip to content

Commit c9bb009

Browse files
authored
fix: health status is set to healthy for statefulset with updateStrat… (#136)
* fix: health status is set to healthy for statefulset with updateStrategy: OnDelete * fix: updated message * fix: added test
1 parent 4d6f298 commit c9bb009

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

pkg/health/health.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,12 @@ func getStatefulSetHealth(obj *unstructured.Unstructured) (*HealthStatus, error)
329329
Message: fmt.Sprintf("partitioned roll out complete: %d new pods have been updated...", sts.Status.UpdatedReplicas),
330330
}, nil
331331
}
332+
if sts.Spec.UpdateStrategy.Type == appsv1.OnDeleteStatefulSetStrategyType {
333+
return &HealthStatus{
334+
Status: HealthStatusHealthy,
335+
Message: fmt.Sprintf("statefulset has %d ready pods", sts.Status.ReadyReplicas),
336+
}, nil
337+
}
332338
if sts.Status.UpdateRevision != sts.Status.CurrentRevision {
333339
return &HealthStatus{
334340
Status: HealthStatusProgressing,

pkg/health/health_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ func TestStatefulSetHealth(t *testing.T) {
4141
assertAppHealth(t, "./testdata/statefulset.yaml", HealthStatusHealthy)
4242
}
4343

44+
func TestStatefulSetOnDeleteHealth(t *testing.T) {
45+
assertAppHealth(t, "./testdata/statefulset-ondelete.yaml", HealthStatusHealthy)
46+
}
47+
4448
func TestPVCHealth(t *testing.T) {
4549
assertAppHealth(t, "./testdata/pvc-bound.yaml", HealthStatusHealthy)
4650
assertAppHealth(t, "./testdata/pvc-pending.yaml", HealthStatusProgressing)
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
annotations:
5+
kubectl.kubernetes.io/last-applied-configuration: |
6+
{"apiVersion":"apps/v1beta2","kind":"StatefulSet","metadata":{"annotations":{},"labels":{"app":"redis","app.kubernetes.io/instance":"redis","chart":"redis-3.6.5","heritage":"Tiller","release":"redis"},"name":"redis-master","namespace":"default"},"spec":{"selector":{"matchLabels":{"app":"redis","release":"redis","role":"master"}},"serviceName":"redis-master","template":{"metadata":{"labels":{"app":"redis","app.kubernetes.io/instance":"redis","release":"redis","role":"master"}},"spec":{"containers":[{"env":[{"name":"REDIS_REPLICATION_MODE","value":"master"},{"name":"REDIS_PASSWORD","valueFrom":{"secretKeyRef":{"key":"redis-password","name":"redis"}}},{"name":"REDIS_DISABLE_COMMANDS","value":"FLUSHDB,FLUSHALL"}],"image":"docker.io/bitnami/redis:4.0.10-debian-9","imagePullPolicy":"Always","livenessProbe":{"exec":{"command":["redis-cli","ping"]},"failureThreshold":5,"initialDelaySeconds":30,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"name":"redis","ports":[{"containerPort":6379,"name":"redis"}],"readinessProbe":{"exec":{"command":["redis-cli","ping"]},"failureThreshold":5,"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1},"resources":{},"volumeMounts":[{"mountPath":"/bitnami/redis/data","name":"redis-data"}]}],"securityContext":{"fsGroup":1001,"runAsUser":1001},"serviceAccountName":"default"}},"updateStrategy":{"type":"OnDelete"},"volumeClaimTemplates":[{"metadata":{"labels":{"app":"redis","chart":"redis-3.6.5","component":"master","heritage":"Tiller","release":"redis"},"name":"redis-data"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"8Gi"}}}}]}}
7+
creationTimestamp: 2018-07-20T08:23:04Z
8+
generation: 1
9+
labels:
10+
app: redis
11+
app.kubernetes.io/instance: redis
12+
chart: redis-3.6.5
13+
heritage: Tiller
14+
release: redis
15+
name: redis-master
16+
namespace: default
17+
resourceVersion: "514251"
18+
selfLink: /apis/apps/v1/namespaces/default/statefulsets/redis-master
19+
uid: 1f80ab97-8bf6-11e8-aff0-42010a8a0fc6
20+
spec:
21+
podManagementPolicy: OrderedReady
22+
replicas: 1
23+
revisionHistoryLimit: 10
24+
selector:
25+
matchLabels:
26+
app: redis
27+
release: redis
28+
role: master
29+
serviceName: redis-master
30+
updateStrategy:
31+
type: OnDelete
32+
template:
33+
metadata:
34+
creationTimestamp: null
35+
labels:
36+
app: redis
37+
app.kubernetes.io/instance: redis
38+
release: redis
39+
role: master
40+
spec:
41+
containers:
42+
- env:
43+
- name: REDIS_REPLICATION_MODE
44+
value: master
45+
- name: REDIS_PASSWORD
46+
valueFrom:
47+
secretKeyRef:
48+
key: redis-password
49+
name: redis
50+
- name: REDIS_DISABLE_COMMANDS
51+
value: FLUSHDB,FLUSHALL
52+
image: docker.io/bitnami/redis:4.0.10-debian-9
53+
imagePullPolicy: Always
54+
livenessProbe:
55+
exec:
56+
command:
57+
- redis-cli
58+
- ping
59+
failureThreshold: 5
60+
initialDelaySeconds: 30
61+
periodSeconds: 10
62+
successThreshold: 1
63+
timeoutSeconds: 5
64+
name: redis
65+
ports:
66+
- containerPort: 6379
67+
name: redis
68+
protocol: TCP
69+
readinessProbe:
70+
exec:
71+
command:
72+
- redis-cli
73+
- ping
74+
failureThreshold: 5
75+
initialDelaySeconds: 5
76+
periodSeconds: 10
77+
successThreshold: 1
78+
timeoutSeconds: 1
79+
resources: {}
80+
terminationMessagePath: /dev/termination-log
81+
terminationMessagePolicy: File
82+
volumeMounts:
83+
- mountPath: /bitnami/redis/data
84+
name: redis-data
85+
dnsPolicy: ClusterFirst
86+
restartPolicy: Always
87+
schedulerName: default-scheduler
88+
securityContext:
89+
fsGroup: 1001
90+
runAsUser: 1001
91+
serviceAccount: default
92+
serviceAccountName: default
93+
terminationGracePeriodSeconds: 30
94+
updateStrategy:
95+
type: OnDelete
96+
volumeClaimTemplates:
97+
- kind: PersistentVolumeClaim
98+
apiVersion: v1
99+
metadata:
100+
creationTimestamp: null
101+
labels:
102+
app: redis
103+
chart: redis-3.6.5
104+
component: master
105+
heritage: Tiller
106+
release: redis
107+
name: redis-data
108+
spec:
109+
accessModes:
110+
- ReadWriteOnce
111+
resources:
112+
requests:
113+
storage: 8Gi
114+
status:
115+
phase: Pending
116+
status:
117+
collisionCount: 0
118+
currentReplicas: 1
119+
currentRevision: redis-master-7b8f75b98
120+
observedGeneration: 1
121+
readyReplicas: 1
122+
replicas: 1
123+
updateRevision: redis-master-7b8f75b98

0 commit comments

Comments
 (0)