Uno de los detalles más interesantes que me he encontrado al usar K3s (https://k3s.io/) es la manera de desplegar Traefik, en el cual utiliza un esquema (chart) de Helm (nota: en Kubernetes el comando a ejecutar es sudo kubectl, pero en k3s kubectl está integrado para que use menos recursos)..
$ sudo k3s kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
...
kube-system helm-install-traefik-ksqsj 0/1 Completed 0 10m
kube-system traefik-9cfbf55b6-5cds5 1/1 Running 0 9m28s
$ sudo k3s kubectl get jobs -A
NAMESPACE NAME COMPLETIONS DURATION AGE
kube-system helm-install-traefik 1/1 50s 12m
Nos encontramos que helm no está instalado, pero si vemos un job que ejecuta el cliente de helm para que podamos disponer de su potencia sin la necesidad de tener corriendo tiller (el servidor de helm) que por supuesto utiliza recursos y de esta manera nos los ahorramos, pero ¿Como funciona?
Klipper Helm
Lo primero que vemos es el uso de un job (tarea que habitualmente se ejecuta una única vez en forma de contenedor) basado en la imagen “rancher/klipper-helm” (https://github.com/rancher/klipper-helm) que ejecuta un entorno helm con solamente descargarlo y ejecutar un único script: https://raw.githubusercontent.com/rancher/klipper-helm/master/entry
Como requisito si va a requerir una cuenta de sistema con permisos de administrador en el espacio de kube-system, para traefik es:
$ sudo k3s kubectl get clusterrolebinding helm-kube-system-traefik -o yaml
...
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: helm-traefik
namespace: kube-system
Lo que debemos tener en cuenta es la necesidad de crear la cuenta de servicio y al terminar la tarea de instalación con helm eliminarla ya que no será necesaria hasta otra operación de eliminación o actualización.
Como ejemplo vamos a crear una tarea para instalar un servicio weave-scope utilizando el chart helm (https://github.com/helm/charts/tree/master/stable/weave-scope)
Creación del servicio
Creamos un espacio de trabajo para aislar el nuevo servicio (namespace en kubernetes, proyecto en Openshift) que llamaremos helm-weave-scope:
$ sudo k3s kubectl create namespace helm-weave-scope
namespace/helm-weave-scope created
Creamos una nueva cuenta de sistema y le asignamos los permisos de administrado:
$ sudo k3s kubectl create serviceaccount helm-installer-weave-scope -n helm-weave-scope
serviceaccount/helm-installer-weave-scope created
$ sudo k3s kubectl create clusterrolebinding helm-installer-weave-scope --clusterrole=cluster-admin --serviceaccount=helm-weave-scope:helm-installer-weave-scope
clusterrolebinding.rbac.authorization.k8s.io/helm-installer-weave-scope
… Read the rest “Como lanzar un paquete (Chart) de Helm sin instalar Tiller”