Customizing Installation
Instead of forking the Linkerd install and upgrade process,Kustomize can be used to patch the output of linkerd install
in a consistent way. This allows customization of the install to addfunctionality specific to installations.
To get started, save the output of install
to a YAML file. This will be thebase resource that Kustomize uses to patch and generate what is added to yourcluster.
linkerd install > linkerd.yaml
NoteWhen upgrading, make sure you populate this file with the content from linkerd upgrade
. Using the latest kustomize
releases, it would be possible toautomate this with an execplugin.
Next, create a kustomization.yaml
file. This file will contain theinstructions for Kustomze listing the base resources and the transformations todo on those resources. Right now, this looks pretty empty:
resources:
- linkerd.yaml
Now, let's look at how to do some example customizations.
NoteKustomize allows as many patches, transforms and generators as you'd like. Theseexamples show modifications one at a time but it is possible to do as many asrequired in a single kustomization.yaml
file.
Add PriorityClass
There are a couple components in the control plane that can benefit from beingassociated with a critical PriorityClass
. While this configuration isn'tcurrently supported as a flag to linkerd install
, it is not hard to add byusing Kustomize.
First, create a file named priority-class.yaml
that will create define aPriorityClass
resource.
apiVersion: scheduling.k8s.io/v1
description: Used for critical linkerd pods that must run in the cluster, but
can be moved to another node if necessary.
kind: PriorityClass
metadata:
name: linkerd-critical
value: 1000000000
Note1000000000
is the max. allowed user-defined priority, adjustaccordingly.
Next, create a file named patch-priority-class.yaml
that will contain theoverlay. This overlay will explain what needs to be modified.
apiVersion: apps/v1
kind: Deployment
metadata:
name: linkerd-identity
spec:
template:
spec:
priorityClassName: linkerd-critical
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: linkerd-controller
spec:
template:
spec:
priorityClassName: linkerd-critical
Then, add this as a strategic merge option to kustomization.yaml
:
resources:
- priority-class.yaml
- linkerd.yaml
patchesStrategicMerge:
- patch-priority-class.yaml
Applying this to your cluster requires taking the output of kustomize build
and piping it to kubectl apply
. For example you can run:
kubectl kustomize build . | kubectl apply -f -
Modify Grafana Configuration
Interested in enabling authentication for Grafana? It is possible tomodify the ConfigMap
as a one off to do this. Unfortunately, the changes willend up being reverted every time linkerd upgrade
happens. Instead, create afile named grafana.yaml
and add your modifications:
kind: ConfigMap
apiVersion: v1
metadata:
name: linkerd-grafana-config
data:
grafana.ini: |-
instance_name = linkerd-grafana
[server]
root_url = %(protocol)s://%(domain)s:/grafana/
[analytics]
check_for_updates = false
Then, add this as a strategic merge option to kustomization.yaml
:
resources:
- linkerd.yaml
patchesStrategicMerge:
- grafana.yaml
Finally, apply this to your cluster by generating YAML with kustomize build
and piping the output to kubectl apply
.
kubectl kustomize build . | kubectl apply -f -