Deployando Traefik en Kubernetes mediante Helm

Deployando Traefik en Kubernetes mediante Helm

Helm es un más que interesante gestor de paquetes en Kubernetes y, mediante ficheros YAML va a permitirnos una gestión de nuestro Clúster de una forma muy simple. Una de sus grandes opciones es que tiene un repositorio muy amplio (Charts), podemos descubrir algunos de sus ejemplos en: https://github.com/helm/charts/

En nuestro caso usaremos Kubernetes mediante la opción microk8s que ya hemos hablado anteriormente.

Instalar Helm

Por defecto, en snap no tenemos la opción y tendremos que determinar que queremos hacerlo mediante “classic”.

sudo snap install helm --classic

Para corroborar que tenemos Helm correctamente instalado podemos lanzar helm version y deberá devolvernos algo parecido a:

Client: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.1", GitCommit:"5270352a09c7e8b6e8c9593002a73535276507c0", GitTreeState:"clean"}

Iniciando Helm y configuración como Admin

Para iniciar Helm lanzaremos:

helm init

Seguidamente y, con cuidado, lanzaremos lo que permite a Helm el poder “Administrar” nuestro Kubernetes y es por eso que, antes deberíamos pensarlo muy bien:

sudo microk8s.kubectl create serviceaccount --namespace kube-system tiller
sudo microk8s.kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
sudo microk8s.kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

Para finalizar, actualizaremos nuestros repositorios locales con un update:

helm repo update

Deployando Traefik

Por ejemplo, para observa la facilidad que nos presta Helm, vamos a lanzar el deploy de Traefik y así tendremos listo nuestro primer caso de uso:

sudo helm install stable/traefik --name traefik --set dashboard.enabled=true,serviceType=NodePort,dashboard.domain=dashboard.traefik,rbac.enabled=true

Si todo va bien tendremos por pantalla algo como así:

NAME:   traefik
LAST DEPLOYED: Tue Jun 18 13:00:47 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ClusterRole
NAME     AGE
traefik  0s

==> v1/ClusterRoleBinding
NAME     AGE
traefik  0s

==> v1/ConfigMap
NAME          DATA  AGE
traefik       1     0s
traefik-test  1     0s

==> v1/Deployment
NAME     READY  UP-TO-DATE  AVAILABLE  AGE
traefik  0/1    1           0          0s

==> v1/Pod(related)
NAME                      READY  STATUS             RESTARTS  AGE
traefik-59568bcf57-6wsx9  0/1    ContainerCreating  0         0s

==> v1/Service
NAME               TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)                     AGE
traefik            NodePort   10.152.183.29   <none>       80:31475/TCP,443:30680/TCP  0s
traefik-dashboard  ClusterIP  10.152.183.245  <none>       80/TCP                      0s

==> v1/ServiceAccount
NAME     SECRETS  AGE
traefik  1        0s

==> v1beta1/Ingress
NAME               HOSTS              ADDRESS  PORTS  AGE
traefik-dashboard  dashboard.traefik  80       0s

NOTES:

1. Traefik has been started. You can find out the port numbers being used by traefik by running:

          $ kubectl describe svc traefik --namespace default

2. Configure DNS records corresponding to Kubernetes ingress resources to point to the NODE_IP/NODE_HOST

Ya tras la instalación podemos lanzar el command helm list para poder visualizar el estado del nuevo Pod:

NAME    REVISION        UPDATED                         STATUS          CHART           APP VERSION     NAMESPACE
traefik 1               Tue Jun 18 13:00:47 2019        DEPLOYED        traefik-1.69.1  1.7.12          default   

Y, a continuación, lanzaremos sudo microk8s.kubectl describe svc traefik para tener los detalles de “Services”:

Name:                     traefik
Namespace:                default
Labels:                   app=traefik
                          chart=traefik-1.69.1
                          heritage=Tiller
                          release=traefik
Annotations:              <none>
Selector:                 app=traefik,release=traefik
Type:                     NodePort
IP:                       10.152.183.29
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  31475/TCP
Endpoints:                10.1.1.28:80
Port:                     https  443/TCP
TargetPort:               httpn/TCP
NodePort:                 https  30680/TCP
Endpoints:                10.1.1.28:8880
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Aquí por ejemplo es donde podremos tener detalle de la ÍPs internas y externas para realizar, por ejemplo, la conexión al Dashboard de control para manejar Traefik. Si queremos, también, observar tanto el “deployment” como los “pods” lanzados podemos ejecutar:

sudo microk8s.kubectl get deployments --selector release=k8s-mongo
sudo microk8s.kubectl get pods --selector release=k8s-mongo

Al finalizar, si estamos cansados ya, podemos borrar el “Stack” creado:

helm delete traefik

Autor: Joakim Vivas

comments powered by Disqus