Skip to content

Commit eedb404

Browse files
authored
Merge pull request #351: Standardize Resource Labels
2 parents f4dedcf + 6cb1e52 commit eedb404

File tree

8 files changed

+291
-121
lines changed

8 files changed

+291
-121
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Changelog
22

33
## In Development
4+
* BREAKING: Use the standardized labels recommended in the Helm docs. You can use `migrations/v1.0/standardize-labels.sh` to prepare an existing cluster before running `helm update`. (#351) (by @cognifloyd)
45
* Drop support for `networking.k8s.io/v1beta1` which was removed in kubernetes v1.22 (EOL 2022-10-28) (#353) (by @cognifloyd)
56

67
## v0.110.0
@@ -9,7 +10,7 @@
910
* Update the GitHub badges. (#345) (by @mamercad)
1011
* Reorganizing and renaming the CI workflows and jobs. (#344) (by @mamercad)
1112
* Add support for providing `ingressClassName`. (#336) (by @mamercad)
12-
* Add an experimental GitHu/K3s Lint and End-to-End testing workflow. (#243) (by @mamercad)
13+
* Add an experimental GitHub/K3s Lint and End-to-End testing workflow. (#243) (by @mamercad)
1314
* Set `st2client` resources by `values.yaml`. (#337) (by @mamercad)
1415
* Switch to the official `bats` Docker image for e2e tests. (#338)
1516
* Temporary workaround for #311 to use previous bitnami index from: https://github.com/bitnami/charts/issues/10539 (#312 #318) (by @0xhaven)

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ A helper container to switch into and run st2 CLI commands against the deployed
6363
All resources like credentials, configs, RBAC, packs, keys and secrets are shared with this container.
6464
```
6565
# obtain st2client pod name
66-
ST2CLIENT=$(kubectl get pod -l app=st2client -o jsonpath="{.items[0].metadata.name}")
66+
ST2CLIENT=$(kubectl get pod -l app.kubernetes.io/name=st2client -o jsonpath="{.items[0].metadata.name}")
6767
6868
# run a single st2 client command
6969
kubectl exec -it ${ST2CLIENT} -- st2 --version
@@ -320,12 +320,12 @@ This mirrors the how pack registration works. Make sure to review any upgrade no
320320
## Tips & Tricks
321321
Grab all logs for entire StackStorm cluster with dependent services in Helm release:
322322
```
323-
kubectl logs -l release=<release-name>
323+
kubectl logs -l app.kubernetes.io/instance=<release-name>
324324
```
325325

326326
Grab all logs only for stackstorm backend services, excluding st2web and DB/MQ/redis:
327327
```
328-
kubectl logs -l release=<release-name>,tier=backend
328+
kubectl logs -l app.kubernetes.io/instance=<release-name>,app.kubernetes.io/component=backend
329329
```
330330

331331
## Running jobs before/after install, upgrade, or rollback

migrations/v1.0/standardize-labels.sh

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#!/bin/bash
2+
3+
# We switched to the standard labels recommend in Helm's "Best Practices" doc.
4+
# https://helm.sh/docs/chart_best_practices/labels/#standard-labels
5+
#
6+
# This script adds those labels to all the resources in an existing release,
7+
# so that helm upgrade will not create duplicate resources. The new label
8+
# selectors do not match the old labels, so this script adds the new labels
9+
# to the old resources. Thus, the new selectors will update them.
10+
11+
# These env vars need to be set to use this script:
12+
# RELEASE_NAME (same as .Release.Name)
13+
# NAMESPACE (same as .Release.Namespace)
14+
#
15+
# For example:
16+
# RELEASE_NAME=st2 NAMESPACE=st2 migrations/standardize-labels.sh
17+
18+
RELEASE_NAME=${RELEASE_NAME:-st2}
19+
NAMESPACE=${NAMESPACE:-default}
20+
CHART_NAME=${CHART_NAME:-stackstorm-ha} # see Chart.yaml
21+
22+
23+
function klabel_app_instance() {
24+
kind=${1}
25+
kubectl label "${kind}" \
26+
-n "${NAMESPACE}" \
27+
-l "vendor=stackstorm" \
28+
-l "release=${RELEASE_NAME}" \
29+
"app.kubernetes.io/instance=${RELEASE_NAME}"
30+
}
31+
32+
function klabel_app_name() {
33+
kind=${1}
34+
app=${2}
35+
kubectl label "${kind}" \
36+
-n "${NAMESPACE}" \
37+
-l "vendor=stackstorm" \
38+
-l "release=${RELEASE_NAME}" \
39+
-l "app=${app}" \
40+
"app.kubernetes.io/name=${app}"
41+
}
42+
43+
function k_get_app_names() {
44+
kind=${1}
45+
app=${2}
46+
kubectl get "${kind}" \
47+
-n "${NAMESPACE}" \
48+
-l "vendor=stackstorm" \
49+
-l "release=${RELEASE_NAME}" \
50+
-o json \
51+
| jq -r '.items[] | select(.metadata.name | test("'"${app}"'")).metadata.labels.app'
52+
}
53+
54+
echo "Adding label app.kubernetes.io/instance=${RELEASE_NAME} (which will replace release=${RELEASE_NAME}) ..."
55+
56+
for kind in ConfigMap Secret Ingress Service ServiceAccount Deployment ReplicaSet Pod Job; do
57+
klabel_app_instance ${kind}
58+
done
59+
60+
echo
61+
echo "Adding label app.kubernetes.io/name=<app> (which will replace app=<app>) ..."
62+
63+
klabel_app_name ConfigMap st2
64+
klabel_app_name Secret st2
65+
klabel_app_name Secret st2chatops
66+
klabel_app_name ServiceAccount ${CHART_NAME}
67+
klabel_app_name Ingress ingress
68+
69+
deployment_apps=(
70+
st2actionrunner
71+
st2api
72+
st2auth
73+
st2chatops
74+
st2client
75+
st2garbagecollector
76+
st2notifier
77+
st2rulesengine
78+
st2scheduler
79+
$(k_get_app_names Deployment st2sensorcontainer)
80+
st2stream
81+
st2timersengine
82+
st2web
83+
st2workflowengine
84+
)
85+
for app in "${deployment_apps[@]}"; do
86+
echo "Deployment app=${app} ..."
87+
klabel_app_name Deployment ${app}
88+
klabel_app_name ReplicaSet ${app}
89+
klabel_app_name Pod ${app}
90+
done
91+
92+
service_apps=(
93+
st2api
94+
st2auth
95+
st2chatops
96+
st2stream
97+
st2web
98+
)
99+
for app in "${service_apps[@]}"; do
100+
echo "Service app=${app} ..."
101+
klabel_app_name Service ${app}
102+
done
103+
104+
job_apps=(
105+
st2
106+
st2-apply-rbac-definitions
107+
st2-register-content
108+
$(k_get_app_names Job extra-helm-hook)
109+
)
110+
for app in "${job_apps[@]}"; do
111+
echo "Job app=${app} ..."
112+
klabel_app_name Job ${app}
113+
klabel_app_name Pod ${app}
114+
done
115+
116+
klabel_app_name ConfigMap st2tests
117+
klabel_app_name Pod st2tests

templates/NOTES.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.data.ST2_AUTH_PA
4646
username: {{ .Values.st2.username }}
4747

4848
4. Use st2 CLI:
49-
export ST2CLIENT=$(kubectl get --namespace {{ .Release.Namespace }} pod -l app=st2client,release={{ .Release.Name }} -o jsonpath="{.items[0].metadata.name}")
49+
export ST2CLIENT=$(kubectl get --namespace {{ .Release.Namespace }} pod -l app.kubernetes.io/name=st2client,app.kubernetes.io/instance={{ .Release.Name }} -o jsonpath="{.items[0].metadata.name}")
5050
kubectl exec -it ${ST2CLIENT} --namespace {{ .Release.Namespace }} -- st2 --version
5151

5252
-----------------------------------------------------

templates/_helpers.tpl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,20 @@ Usage: "{{ include "stackstorm-ha.labels" (list $ "st2servicename") }}"
1212
{{- define "stackstorm-ha.labels" -}}
1313
{{- $root := index . 0 }}
1414
{{- $name := index . 1 }}
15+
{{- $valuesKey := regexReplaceAll "-.*" $name "" }}
16+
{{- $appVersion := dig $valuesKey "image" "tag" ($root.Values.image.tag) ($root.Values|merge (dict)) }}
1517
{{ include "stackstorm-ha.selectorLabels" . }}
1618
{{- if list "st2web" "ingress" | has $name }}
17-
tier: frontend
19+
app.kubernetes.io/component: frontend
1820
{{- else if eq $name "st2tests" }}
19-
tier: tests
21+
app.kubernetes.io/component: tests
2022
{{- else }}
21-
tier: backend
23+
app.kubernetes.io/component: backend
2224
{{- end }}
23-
vendor: stackstorm
24-
chart: {{ $root.Chart.Name }}-{{ $root.Chart.Version }}
25-
heritage: {{ $root.Release.Service }}
25+
app.kubernetes.io/part-of: stackstorm
26+
app.kubernetes.io/version: {{ tpl $appVersion $root | quote }}
27+
helm.sh/chart: {{ $root.Chart.Name }}-{{ $root.Chart.Version }}
28+
app.kubernetes.io/managed-by: {{ $root.Release.Service }}
2629
{{- end -}}
2730

2831
{{/*
@@ -32,8 +35,8 @@ Usage: "{{ include "stackstorm-ha.selectorLabels" (list $ "st2servicename") }}"
3235
{{- define "stackstorm-ha.selectorLabels" -}}
3336
{{- $root := index . 0 }}
3437
{{- $name := index . 1 }}
35-
app: {{ $name }}
36-
release: {{ $root.Release.Name }}
38+
app.kubernetes.io/name: {{ $name }}
39+
app.kubernetes.io/instance: {{ $root.Release.Name }}
3740
{{- end -}}
3841

3942
{{/*

templates/configmaps_overrides.yaml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,7 @@ metadata:
66
name: {{ .Release.Name }}-st2-overrides-configs
77
annotations:
88
description: StackStorm override configs defined in helm values, shipped in (or copied to) '/opt/stackstorm/overrides'
9-
labels:
10-
app: st2
11-
tier: backend
12-
vendor: stackstorm
13-
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
14-
release: {{ .Release.Name }}
15-
heritage: {{ .Release.Service }}
9+
labels: {{- include "stackstorm-ha.labels" (list $ "st2") | nindent 4 }}
1610
data:
1711
{{ toYaml .Values.st2.overrides | indent 2 }}
1812
{{- end }}

0 commit comments

Comments
 (0)