3-Kubernetes
Linkerd

Linkerd Setup in Minikube with Emojivoto App

1. Prerequisites

Ensure you have the following installed:

2. Start Minikube

minikube start --cpus=4 --memory=8192 --kubernetes-version=v1.28.0

3. Install Linkerd CLI

curl -sL https://run.linkerd.io/install | sh
export PATH=$HOME/.linkerd2/bin:$PATH
linkerd version

4. Install Linkerd in Minikube

Install CRDs

linkerd install --crds | kubectl apply -f -

Install Control Plane

linkerd install --set proxyInit.runAsRoot=true | kubectl apply -f -

Verify Installation

linkerd check

5. Install Linkerd Viz (Observability Extension)

linkerd viz install | kubectl apply -f -
linkerd viz check

To access the dashboard:

linkerd viz dashboard &

6. Deploy the Emojivoto App

kubectl apply -f https://run.linkerd.io/emojivoto.yml
kubectl get pods -n emojivoto

Inject Linkerd into the App

kubectl get -n emojivoto deploy -o yaml | linkerd inject - | kubectl apply -f -
kubectl get pods -n emojivoto

7. Testing Linkerd Functionality

Traffic Monitoring

linkerd viz stat deployments -n emojivoto

Live Traffic Inspection

linkerd viz tap -n emojivoto deploy/web

Enable Automatic Retries

linkerd profile -n emojivoto voting-svc --tap deploy/web --tap-duration 10s | kubectl apply -f -
kubectl get sp -n emojivoto
linkerd viz stat deployments -n emojivoto

Add Timeout Policy

Create timeout-policy.yaml:

apiVersion: linkerd.io/v1alpha2
kind: ServiceProfile
metadata:
  name: voting-svc.emojivoto.svc.cluster.local
  namespace: emojivoto
spec:
  routes:
  - name: "/api/vote"
    condition:
      method: POST
    timeout: 2s

Apply it:

kubectl apply -f timeout-policy.yaml
linkerd viz stat deploy -n emojivoto

Traffic Splitting for Canary Deployment

Deploy Voting v2:

kubectl apply -f https://run.linkerd.io/emojivoto-voting-v2.yml

Create traffic-split.yaml:

apiVersion: split.smi-spec.io/v1alpha2
kind: TrafficSplit
metadata:
  name: voting-split
  namespace: emojivoto
spec:
  service: voting-svc
  backends:
  - service: voting-svc
    weight: 80
  - service: voting-svc-v2
    weight: 20

Apply:

kubectl apply -f traffic-split.yaml
linkerd viz stat svc -n emojivoto

Simulating a Failure

kubectl delete pod -n emojivoto -l app=emoji-svc
linkerd viz stat deploy -n emojivoto

8. Next Steps

  • Deploy your own microservices with Linkerd.
  • Explore mTLS security, policy-based access control, and multi-cluster setups.
  • Apply Linkerd to a production environment.

💬 Need a Quick Summary?

Hey! Don't have time to read everything? I get it. 😊
Click below and I'll give you the main points and what matters most on this page.
Takes about 5 seconds • Uses Perplexity AI