Skip to content

Instantly share code, notes, and snippets.

@MacoChave
Created July 25, 2022 19:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MacoChave/8864ca088f0c09a2ca7b61b769652d9e to your computer and use it in GitHub Desktop.
Save MacoChave/8864ca088f0c09a2ca7b61b769652d9e to your computer and use it in GitHub Desktop.
Service Mesh con Linkerd

Service Mesh con Linkerd

Requisitos

  • VM con Ubuntu 18.04 o similar
  • Instalr git (para clonar repositorio)
  • Instalr Docker (Para crear imágenes)
  • Usuario en Docker Hub
  • Crear cluster de Kuberentes
  • Instalar y configurar Kubectl

Parte 1: Observabilidad

Se inyecta linkerd, para observar el comportamiento.

Actualizar e instalar herramientas

Actualizar repositorios

sudo apt update
sudo apt upgrade -y

Instalar Docker

Instalar Docker

sudo apt install docker.io -y

Agregar usuario docker para omitir modo root

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Instalar Git

sudo apt install git -y

Instalar Kubernetes

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

Descargar la última versión

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

Descargar validación en binario (opcional)

curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"

Validar binario kubectl

echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

Instalar kubectl

chmod +x kubectl
mkdir -p ~/.local/bin/kubectl
mv ./kubectl ~/.local/bin/kubectl

Configurar variable de entorno

export PATH=~/.local/bin/kubectl:$PATH

Guardar cambios en variables de entorno si es bash

source ~/.bashrc

Guardar cambios en variables de entorno si es zsh

source ~/.zshrc

Asegurar versión instalada

kubectl version --client
  • Crear archivo de configuración por gcloud
gcloud container clusters get-credentials CLUSTER_NAME
  • Crear archivo de configuración manualmente

Copiar config de kubernetes en ~/.kube/

Validar configuración kuberentes

kubectl get nodes

Clonar repositorio y construir imágenes

Clonar repositorio del ejemplo

git clone https://github.com/sergioarmgpl/linkerd-workshop.git
cd linkerd-workshop
cd app1
./build.sh <usuario>
cd ..
cd app2
./build.sh <usuario>

Salir de la carpeta del repositorio

cd ..

Instalar Linkerd

https://linkerd.io/2.11/getting-started/

Instalar el CLI manualmente

curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh

Agregar ~/.linkerd2/bin a las variables de entorno

export PATH=~/.linkerd2/bin:$PATH
  • Guardar cambios en variables de entorno con bash shell
source ~/.bashrc
  • Guardar cambios en variables de entorno con zh shell
source ~/.zshrc

Confirmar versión

linkerd version

Verificar cluster Kubernetes

linkerd check --pre

Instalar en cluster

linkerd install | kubectl apply -f -

Verificar cluster Kubernetes para comprobar si ya se instaló todo

linkerd check --pre

Revisar a través de kubectl si tiene todos los servicios disponibles

kubectl -n linkerd get deploy

Configurar Observable (local)

Tener configurado kubectl en local e instalar linkerd

  • Verificar si viz está instalado
linkerd viz check
  • Instalar viz y aplicarlo a kubectl
linkerd viz install | kubectl apply -f -

Abrir browser de linkerd dashboard

linkerd viz dashboard

Crear aplicaciones

Crear el namespace para construir aplicaciones

kubectl create namespace linkerd-demo

usuario: Usuario de la cuenta Docker Hub

kubectl -n linkerd-demo create deployment apache --image=<usuario>/apache
kubectl -n linkerd-demo expose deployment apache --type=ClusterIP --port=80
kubectl -n linkerd-demo create deployment client --image=<usuario>/client
  • Exponer la aplicación localmente (Opcional)
kubectl -n linkerd-demo port-forward svc/apache 8888:80

Inyectar linkerd a las aplicaciones dentro del namespace linkerd-demo

kubectl get -n linkerd-demo deploy -o yaml \
  | linkerd inject - \
  | kubectl apply -f -
kubectl -n linkerd-demo get deploy

Comandos para controlar el namespace linkerd-demo

linkerd -n linkerd-demo stat deploy
linkerd -n linkerd-demo top deploy
linkerd -n linkerd-demo tap deploy/client

top: permormance tap: ruteo

Parte 2: Canary Deployments

Instalar Flagger para hacer Canary Deployments

Instalar flagger con kustomize

kubectl apply -k github.com/weaveworks/flagger/kustomize/linkerd

Hacer rollout

kubectl -n linkerd rollout status deploy/flagger

Crear namespace test

kubectl create ns test && \
kubectl apply -f https://run.linkerd.io/flagger.yml

Comprobar podinfo

kubectl -n test rollout status deploy podinfo  

Hacer Canary deploy sin iniciarlo

cat <<EOF | kubectl apply -f -
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: podinfo
  namespace: test
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: podinfo
  service:
    port: 9898
  analysis:      
    interval: 10s
    threshold: 5
    stepWeight: 5
    metrics:
    - name: request-success-rate
      threshold: 99
      interval: 1m
EOF

Iniciar Canary

  • Abrir namespace test
  • Ubicar traffic-split
  • Entrar en podinfo-primary

Para visualizar el test canary

kubectl -n test get ev --watch

Empezar Canary deployment

kubectl -n test set image deployment/podinfo \
  podinfod=quay.io/stefanprodan/podinfo:1.7.1

Desinstalar demo

Al desinstalar la demo, se deben de volver a repetir los pasos de la parte 2.

kubectl delete -k github.com/weaveworks/flagger/kustomize/linkerd && \
  kubectl delete ns test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment