Skip to content

Commit 5eaba15

Browse files
authored
Implementing K8S best practices and improvements (#27)
1 parent 17c94af commit 5eaba15

22 files changed

Lines changed: 1478 additions & 359 deletions

charts/cadence/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
apiVersion: v2
22
name: cadence
3-
version: 0.1.7
3+
version: 0.1.8
44
appVersion: "1.2.16"
55

66
description: |

charts/cadence/README.md

Lines changed: 142 additions & 57 deletions
Large diffs are not rendered by default.
Lines changed: 106 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,121 @@
11
{{/* vim: set filetype=mustache: */}}
2-
2+
{{/*
3+
Expand the name of the chart.
4+
*/}}
35
{{- define "cadence.name" -}}
4-
{{- .Chart.Name | trunc 63 | trimSuffix "-" -}}
5-
{{- end -}}
6+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
7+
{{- end }}
68

9+
{{/*
10+
Create a default fully qualified app name.
11+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
12+
If release name contains chart name it will be used as a full name.
13+
*/}}
714
{{- define "cadence.fullname" -}}
8-
{{- printf "%s-%s" .Release.Name (include "cadence.name" .) | trunc 63 | trimSuffix "-" -}}
15+
{{- if .Values.fullnameOverride -}}
16+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
17+
{{- else -}}
18+
{{- $name := default .Chart.Name .Values.nameOverride -}}
19+
{{- if contains $name .Release.Name -}}
20+
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
21+
{{- else -}}
22+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
23+
{{- end -}}
24+
{{- end -}}
925
{{- end -}}
1026

27+
{{/*
28+
Create chart name and version as used by the chart label.
29+
*/}}
1130
{{- define "cadence.chart" -}}
12-
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
31+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
1332
{{- end -}}
1433

15-
{{- define "cadence.commonlabels" -}}
16-
app.kubernetes.io/name: {{ include "cadence.name" . }}
34+
{{/*
35+
Common labels
36+
*/}}
37+
{{- define "cadence.labels" -}}
1738
helm.sh/chart: {{ include "cadence.chart" . }}
39+
{{ include "cadence.selectorLabels" . }}
40+
{{- if .Chart.AppVersion }}
41+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
42+
{{- end }}
1843
app.kubernetes.io/managed-by: {{ .Release.Service }}
44+
{{- end }}
45+
46+
{{/*
47+
Create service selector labels for a specific service
48+
*/}}
49+
{{- define "cadence.serviceLabels" -}}
50+
{{- $serviceName := .serviceName }}
51+
{{ include "cadence.selectorLabels" . }}
52+
app.kubernetes.io/component: {{ $serviceName }}
53+
{{- end }}
54+
55+
{{/*
56+
Selector labels
57+
*/}}
58+
{{- define "cadence.selectorLabels" -}}
59+
app.kubernetes.io/name: {{ include "cadence.name" . }}
1960
app.kubernetes.io/instance: {{ .Release.Name }}
20-
app.kubernetes.io/version: {{ .Chart.AppVersion | replace "+" "_" }}
21-
app.kubernetes.io/part-of: {{ .Chart.Name }}
22-
{{- end -}}
61+
{{- end }}
2362

63+
{{/*
64+
Create the name of the service account to use
65+
*/}}
66+
{{- define "cadence.serviceAccountName" -}}
67+
{{- if .Values.serviceAccount.create }}
68+
{{- default (include "cadence.fullname" .) .Values.serviceAccount.name }}
69+
{{- else }}
70+
{{- default "default" .Values.serviceAccount.name }}
71+
{{- end }}
72+
{{- end }}
73+
74+
{{/*
75+
Create HPA name for a service
76+
*/}}
77+
{{- define "cadence.hpaName" -}}
78+
{{- $serviceName := .serviceName }}
79+
{{- printf "%s-%s" (include "cadence.fullname" .) $serviceName }}
80+
{{- end }}
81+
82+
{{/*
83+
Check if HPA is enabled for a specific service
84+
*/}}
85+
{{- define "cadence.isHpaEnabled" -}}
86+
{{- $serviceName := .serviceName }}
87+
{{- $hpaConfig := index .Values.autoscaling $serviceName }}
88+
{{- if $hpaConfig }}
89+
{{- $hpaConfig.enabled | default false }}
90+
{{- else }}
91+
{{- false }}
92+
{{- end }}
93+
{{- end }}
94+
95+
{/*
96+
Cadence GRPC Peers endpoint
97+
*/}}
98+
{{- define "cadence.grpcPeers" -}}
99+
{{ include "cadence.fullname" . }}-frontend.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.frontend.grpcPort | default 7833 }}
100+
{{- end }}
101+
102+
{{/*
103+
Generate Ringpop seeds for service discovery
104+
*/}}
105+
{{- define "cadence.ringpopSeeds" -}}
106+
{{- $seeds := list }}
107+
{{- $namespace := .Release.Namespace }}
108+
{{- $fullname := include "cadence.fullname" . }}
109+
{{- $seeds = append $seeds (printf "%s-frontend-headless.%s.svc.cluster.local:%d" $fullname $namespace (.Values.frontend.port | int)) }}
110+
{{- $seeds = append $seeds (printf "%s-history-headless.%s.svc.cluster.local:%d" $fullname $namespace (.Values.history.port | int)) }}
111+
{{- $seeds = append $seeds (printf "%s-matching-headless.%s.svc.cluster.local:%d" $fullname $namespace (.Values.matching.port | int)) }}
112+
{{- $seeds = append $seeds (printf "%s-worker-headless.%s.svc.cluster.local:%d" $fullname $namespace (.Values.worker.port | int)) }}
113+
{{- join "," $seeds }}
114+
{{- end }}
115+
116+
{{/*
117+
Get the Cassandra endpoint
118+
*/}}
24119
{{- define "cassandra.endpoint" -}}
25120
{{ .Values.cassandra.endpoint | default (printf "cassandra-service.%s.svc.cluster.local" $.Release.Namespace) }}
26-
{{- end -}}
121+
{{- end -}}
Lines changed: 89 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,106 @@
11
apiVersion: apps/v1
22
kind: Deployment
33
metadata:
4-
name: cadence-web-deployment
4+
name: {{ include "cadence.fullname" . }}-web
55
labels:
6-
app: cadence-web
7-
{{- include "cadence.commonlabels" . | nindent 4 }}
6+
{{- include "cadence.labels" . | nindent 4 }}
7+
app.kubernetes.io/component: web
88
spec:
9-
replicas: 1
9+
replicas: {{ .Values.web.replicas }}
10+
{{- with .Values.web.strategy }}
11+
strategy:
12+
{{- toYaml . | nindent 4 }}
13+
{{- end }}
1014
selector:
1115
matchLabels:
12-
app: cadence-web
16+
{{- include "cadence.serviceLabels" (dict "serviceName" "web" "Values" .Values "Chart" .Chart "Release" .Release) | indent 6 }}
1317
template:
1418
metadata:
19+
{{- $webPodAnnotations := .Values.web.podAnnotations | default dict }}
20+
{{- if $webPodAnnotations }}
21+
annotations:
22+
{{- toYaml $webPodAnnotations | nindent 8 }}
23+
{{- end }}
1524
labels:
16-
app: cadence-web
25+
{{- include "cadence.labels" . | nindent 8 }}
26+
{{- with .Values.web.podLabels }}
27+
{{- toYaml . | nindent 8 }}
28+
{{- end }}
29+
app.kubernetes.io/component: web
1730
spec:
31+
{{- if $.Values.serviceAccount.create }}
32+
serviceAccountName: {{ include "cadence.serviceAccountName" $ }}
33+
{{- end }}
34+
{{- $globalImagePullSecrets := .Values.global.imagePullSecrets | default list }}
35+
{{- $serviceImagePullSecrets := .Values.web.image.imagePullSecrets | default list }}
36+
{{- $mergedImagePullSecrets := concat $globalImagePullSecrets $serviceImagePullSecrets }}
37+
{{- if $mergedImagePullSecrets }}
38+
imagePullSecrets:
39+
{{- toYaml $mergedImagePullSecrets | nindent 8 }}
40+
{{- end }}
41+
{{- $globalPriorityClassName := .Values.global.priorityClassName | default "" }}
42+
{{- $servicePriorityClassName := .Values.web.priorityClassName | default $globalPriorityClassName }}
43+
{{- if $servicePriorityClassName }}
44+
priorityClassName: {{ $servicePriorityClassName }}
45+
{{- end }}
46+
{{- $globalPodSecurityContext := .Values.global.podSecurityContext | default dict }}
47+
{{- $servicePodSecurityContext := .Values.web.podSecurityContext | default $globalPodSecurityContext }}
48+
{{- if $servicePodSecurityContext }}
49+
securityContext:
50+
{{- toYaml $servicePodSecurityContext | nindent 8 }}
51+
{{- end }}
52+
{{- $globalNodeSelector := .Values.global.nodeSelector | default dict }}
53+
{{- $serviceNodeSelector := .Values.web.nodeSelector | default $globalNodeSelector }}
54+
{{- if $serviceNodeSelector }}
55+
nodeSelector:
56+
{{- toYaml $serviceNodeSelector | nindent 8 }}
57+
{{- end }}
58+
{{- $globalAffinity := .Values.global.affinity | default dict }}
59+
{{- $serviceAffinity := .Values.web.affinity | default $globalAffinity }}
60+
{{- if $serviceAffinity }}
61+
affinity:
62+
{{- toYaml $serviceAffinity | nindent 8 }}
63+
{{- end }}
64+
{{- $globalTolerations := .Values.global.tolerations | default list }}
65+
{{- $serviceTolerations := .Values.web.tolerations | default $globalTolerations }}
66+
{{- if $serviceTolerations }}
67+
tolerations:
68+
{{- toYaml $serviceTolerations | nindent 8 }}
69+
{{- end }}
70+
{{- $globalTopologySpreadConstraints := .Values.global.topologySpreadConstraints | default list }}
71+
{{- $serviceTopologySpreadConstraints := .Values.web.topologySpreadConstraints | default $globalTopologySpreadConstraints }}
72+
{{- if $serviceTopologySpreadConstraints }}
73+
topologySpreadConstraints:
74+
{{- toYaml $serviceTopologySpreadConstraints | nindent 8 }}
75+
{{- end }}
1876
containers:
1977
- name: cadence-web
20-
image: {{ $.Values.web.image.repository }}:{{ $.Values.web.image.tag }}
21-
imagePullPolicy: Always
78+
image: {{ .Values.web.image.repository }}:{{ .Values.web.image.tag }}
79+
imagePullPolicy: {{ .Values.web.image.pullPolicy }}
80+
{{- $globalContainerSecurityContext := .Values.global.containerSecurityContext | default dict }}
81+
{{- $serviceContainerSecurityContext := .Values.web.containerSecurityContext | default $globalContainerSecurityContext }}
82+
{{- if $serviceContainerSecurityContext }}
83+
securityContext:
84+
{{- toYaml $serviceContainerSecurityContext | nindent 10 }}
85+
{{- end }}
2286
ports:
23-
- containerPort: 8088
87+
- name: http
88+
containerPort: 8088
89+
protocol: TCP
2490
env:
2591
- name: CADENCE_GRPC_PEERS
26-
value: cadence-frontend.{{ .Release.Namespace }}.svc.cluster.local:{{ $.Values.frontend.grpcPort }}
92+
value: {{ include "cadence.grpcPeers" . }}
93+
{{- $webEnv := .Values.web.env | default list -}}
94+
{{- if $webEnv }}
95+
{{- toYaml $webEnv | nindent 8 }}
96+
{{- end }}
97+
{{- $webSecrets := .Values.web.secretEnv | default list -}}
98+
{{- if $webSecrets }}
99+
envFrom:
100+
- secretRef:
101+
name: {{ include "cadence.fullname" . }}-web-secrets
102+
{{- end }}
103+
{{- with .Values.web.resources }}
27104
resources:
28-
limits:
29-
cpu: {{ $.Values.web.cpu.limit }}
30-
memory: {{ $.Values.web.memory.limit }}
31-
requests:
32-
cpu: {{ $.Values.web.cpu.request }}
33-
memory: {{ $.Values.web.memory.request }}
34-
---
35-
apiVersion: v1
36-
kind: Service
37-
metadata:
38-
name: cadence-web-service
39-
spec:
40-
selector:
41-
app: cadence-web
42-
ports:
43-
- protocol: TCP
44-
port: 8088
45-
targetPort: 8088
105+
{{- toYaml . | nindent 10 }}
106+
{{- end }}

charts/cadence/templates/cassandra-deployment.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ kind: Deployment
44
metadata:
55
name: cassandra-deployment
66
labels:
7-
{{- include "cadence.commonlabels" . | nindent 4 }}
7+
{{- include "cadence.labels" . | nindent 4 }}
88
spec:
99
replicas: 1
1010
selector:
@@ -27,11 +27,11 @@ spec:
2727
value: "256M"
2828
resources:
2929
limits:
30-
cpu: {{ .Values.cassandra.deployment.cpu.limit }}
31-
memory: {{ .Values.cassandra.deployment.memory.limit }}
30+
cpu: {{ .Values.cassandra.deployment.resources.limits.cpu }}
31+
memory: {{ .Values.cassandra.deployment.resources.limits.memory }}
3232
requests:
33-
cpu: {{ .Values.cassandra.deployment.cpu.request }}
34-
memory: {{ .Values.cassandra.deployment.memory.request }}
33+
cpu: {{ .Values.cassandra.deployment.resources.requests.cpu }}
34+
memory: {{ .Values.cassandra.deployment.resources.requests.memory }}
3535
readinessProbe:
3636
exec:
3737
command: ["sh", "-c", "cqlsh $(hostname -i) -u cassandra -p cassandra -e 'describe keyspaces'"]
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{{- range $serviceName := (list "frontend" "history" "matching" "worker") }}
2+
{{- $hpaEnabled := include "cadence.isHpaEnabled" (dict "serviceName" $serviceName "Values" $.Values) }}
3+
{{- if eq $hpaEnabled "true" }}
4+
---
5+
apiVersion: autoscaling/v2
6+
kind: HorizontalPodAutoscaler
7+
metadata:
8+
name: {{ include "cadence.hpaName" (dict "serviceName" $serviceName "Values" $.Values "Chart" $.Chart "Release" $.Release) }}
9+
labels:
10+
{{- include "cadence.labels" $ | nindent 4 }}
11+
app.kubernetes.io/component: {{ $serviceName }}
12+
spec:
13+
scaleTargetRef:
14+
apiVersion: apps/v1
15+
kind: Deployment
16+
name: {{ include "cadence.fullname" $ }}-{{ $serviceName }}
17+
{{- $hpaConfig := index $.Values.autoscaling $serviceName }}
18+
minReplicas: {{ $hpaConfig.minReplicas | default 1 }}
19+
maxReplicas: {{ $hpaConfig.maxReplicas | default 10 }}
20+
metrics:
21+
{{- if $hpaConfig.targetCPUUtilizationPercentage }}
22+
- type: Resource
23+
resource:
24+
name: cpu
25+
target:
26+
type: Utilization
27+
averageUtilization: {{ $hpaConfig.targetCPUUtilizationPercentage }}
28+
{{- end }}
29+
{{- if $hpaConfig.targetMemoryUtilizationPercentage }}
30+
- type: Resource
31+
resource:
32+
name: memory
33+
target:
34+
type: Utilization
35+
averageUtilization: {{ $hpaConfig.targetMemoryUtilizationPercentage }}
36+
{{- end }}
37+
{{- if $hpaConfig.behavior }}
38+
behavior:
39+
{{- toYaml $hpaConfig.behavior | nindent 4 }}
40+
{{- end }}
41+
{{- end }}
42+
{{- end }}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{{- if .Values.networkPolicy.enabled -}}
2+
apiVersion: networking.k8s.io/v1
3+
kind: NetworkPolicy
4+
metadata:
5+
name: {{ include "cadence.fullname" . }}
6+
labels:
7+
{{- include "cadence.labels" . | nindent 4 }}
8+
spec:
9+
podSelector:
10+
matchLabels:
11+
{{- include "cadence.selectorLabels" . | nindent 6 }}
12+
policyTypes:
13+
{{- if .Values.networkPolicy.ingress }}
14+
- Ingress
15+
{{- end }}
16+
{{- if .Values.networkPolicy.egress }}
17+
- Egress
18+
{{- end }}
19+
{{- with .Values.networkPolicy.ingress }}
20+
ingress:
21+
{{- toYaml . | nindent 4 }}
22+
{{- end }}
23+
{{- with .Values.networkPolicy.egress }}
24+
egress:
25+
{{- toYaml . | nindent 4 }}
26+
{{- end }}
27+
{{- end }}

0 commit comments

Comments
 (0)