Skip to content

Commit

Permalink
Add PDB on linkerd-viz Helm chart (#11628)
Browse files Browse the repository at this point in the history
* Add PDB for tap and tap-injector

To avoid disruption during cluster nodes rolling or scaling, it's
desired to complement the maxUnavailable from the rolling strategy with
a PodDisruptionBudget.

This commit adds the respective PDB objects following the core
components implementation to the `tap` and `tap-injector` deployments.
It can be enabled with the enablePodDisruptionBudget helm chart value.

Fixes #11248

Signed-off-by: Matias Charriere <matias@giantswarm.io>
  • Loading branch information
mcharriere committed Nov 23, 2023
1 parent 6a260fa commit dea850a
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 0 deletions.
1 change: 1 addition & 0 deletions viz/charts/linkerd-viz/README.md
Expand Up @@ -98,6 +98,7 @@ Kubernetes: `>=1.21.0-0`
| defaultUID | int | `2103` | UID for all the viz components |
| enablePSP | bool | `false` | Create Roles and RoleBindings to associate this extension's ServiceAccounts to the control plane PSP resource. This requires that `enabledPSP` is set to true on the control plane install. Note PSP has been deprecated since k8s v1.21 |
| enablePodAntiAffinity | bool | `false` | Enables Pod Anti Affinity logic to balance the placement of replicas across hosts and zones for High Availability. Enable this only when you have multiple replicas of components. |
| enablePodDisruptionBudget | bool | `false` | enables the creation of pod disruption budgets for tap, tap-injector, web and metrics-api components |
| grafana.externalUrl | string | `nil` | url of a Grafana instance hosted off-cluster. Cannot be set if grafana.url is set. The reverse proxy will not be used for this URL. |
| grafana.uidPrefix | string | `nil` | prefix for Grafana dashboard UID's, used when grafana.externalUrl is set. |
| grafana.url | string | `nil` | url of an in-cluster Grafana instance with reverse proxy configured, used by the Linkerd viz web dashboard to provide direct links to specific Grafana dashboards. Cannot be set if grafana.externalUrl is set. See the [Linkerd documentation](https://linkerd.io/2/tasks/grafana) for more information |
Expand Down
21 changes: 21 additions & 0 deletions viz/charts/linkerd-viz/templates/metrics-api.yaml
Expand Up @@ -123,3 +123,24 @@ spec:
seccompProfile:
type: RuntimeDefault
serviceAccountName: metrics-api
{{- if and .Values.enablePodDisruptionBudget (gt (int .Values.metricsAPI.replicas) 1) }}
---
kind: PodDisruptionBudget
apiVersion: policy/v1
metadata:
name: metrics-api
namespace: {{ .Release.Namespace }}
labels:
linkerd.io/extension: viz
component: metrics-api
namespace: {{.Release.Namespace}}
{{- with .Values.commonLabels }}{{ toYaml . | trim | nindent 4 }}{{- end }}
annotations:
{{ include "partials.annotations.created-by" . }}
spec:
maxUnavailable: 1
selector:
matchLabels:
linkerd.io/extension: viz
component: metrics-api
{{- end }}
21 changes: 21 additions & 0 deletions viz/charts/linkerd-viz/templates/tap-injector.yaml
Expand Up @@ -127,3 +127,24 @@ spec:
- name: tls
secret:
secretName: tap-injector-k8s-tls
{{- if and .Values.enablePodDisruptionBudget (gt (int .Values.tapInjector.replicas) 1) }}
---
kind: PodDisruptionBudget
apiVersion: policy/v1
metadata:
name: tap-injector
namespace: {{ .Release.Namespace }}
labels:
linkerd.io/extension: viz
component: tap-injector
namespace: {{.Release.Namespace}}
{{- with .Values.commonLabels }}{{ toYaml . | trim | nindent 4 }}{{- end }}
annotations:
{{ include "partials.annotations.created-by" . }}
spec:
maxUnavailable: 1
selector:
matchLabels:
linkerd.io/extension: viz
component: tap-injector
{{- end }}
21 changes: 21 additions & 0 deletions viz/charts/linkerd-viz/templates/tap.yaml
Expand Up @@ -142,3 +142,24 @@ spec:
- name: tls
secret:
secretName: tap-k8s-tls
{{- if and .Values.enablePodDisruptionBudget (gt (int .Values.tap.replicas) 1) }}
---
kind: PodDisruptionBudget
apiVersion: policy/v1
metadata:
name: tap
namespace: {{ .Release.Namespace }}
labels:
linkerd.io/extension: viz
component: tap
namespace: {{.Release.Namespace}}
{{- with .Values.commonLabels }}{{ toYaml . | trim | nindent 4 }}{{- end }}
annotations:
{{ include "partials.annotations.created-by" . }}
spec:
maxUnavailable: 1
selector:
matchLabels:
linkerd.io/extension: viz
component: tap
{{- end }}
21 changes: 21 additions & 0 deletions viz/charts/linkerd-viz/templates/web.yaml
Expand Up @@ -143,3 +143,24 @@ spec:
seccompProfile:
type: RuntimeDefault
serviceAccountName: web
{{- if and .Values.enablePodDisruptionBudget (gt (int .Values.dashboard.replicas) 1) }}
---
kind: PodDisruptionBudget
apiVersion: policy/v1
metadata:
name: web
namespace: {{ .Release.Namespace }}
labels:
linkerd.io/extension: viz
component: web
namespace: {{.Release.Namespace}}
{{- with .Values.commonLabels }}{{ toYaml . | trim | nindent 4 }}{{- end }}
annotations:
{{ include "partials.annotations.created-by" . }}
spec:
maxUnavailable: 1
selector:
matchLabels:
linkerd.io/extension: viz
component: web
{{- end }}
1 change: 1 addition & 0 deletions viz/charts/linkerd-viz/values-ha.yaml
Expand Up @@ -3,6 +3,7 @@
# helm install -f values.yaml -f values-ha.yaml

enablePodAntiAffinity: true
enablePodDisruptionBudget: true

# nodeAffinity:

Expand Down
3 changes: 3 additions & 0 deletions viz/charts/linkerd-viz/values.yaml
Expand Up @@ -50,6 +50,9 @@ tolerations: &default_tolerations
# Enable this only when you have multiple replicas of components.
enablePodAntiAffinity: false

# -- enables the creation of pod disruption budgets for tap, tap-injector, web and metrics-api components
enablePodDisruptionBudget: false

# -- NodeAffinity section, See the
# [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)
# for more information
Expand Down

0 comments on commit dea850a

Please sign in to comment.