Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Introducción

Para desplegar ya no sólo Onesait Platform sino cualquier aplicativo contenerizado en clusters de Openshift o Kubernetes (k8s) es necesario seguir una serie de pautas o “Best Practices“, que van desde la fase de definición y construcción de tu imagen Docker hasta la fase de creación de manifests de Kubernetes, “aplantillamiento“ de los mismos y distribución de tu software como una pieza o paquete con Helm.

Table of Contents

Info

Prerrequisitos:

  • Docker instalado en local.

  • Helm v3 instalado en local.1

  • Cli de Kubernetes (kubectl) o cli de Openshift (oc)1 para poder comunicarnos y operar nuestros despliegues contra el cluster.

1Si usamos Openshift podremos descargar tanto el cli de OCP como Helm del enlace que aparece en la imagen inferior.

...

...

Best Practices

Construcción de la imagen Docker

Para desplegar una imagen Docker en Openshift debes ser especialmente cuidadosos con la seguridad, no arrancando tus contenedores con usuario root o intentando modificar en ejecución directorios del filesystem propiedad de root.

...

  • Crear un usuario para la ejecución de tu aplicación dentro del contenedor: Evita lanzar tu contenedor con usuario root. Lo más habitual es que dé problemas, y por seguridad no conviene hacerlo. Para ello, crea un usuario, un grupo y da permisos a este usuario en los directorios que tenga permisos o en los que crees y le hagas propietario de los mismos.

  • Crear directorios, dar permisos a los mismos: Como consecuencia de lo anterior, daremos a los directorios anteriores permisos para el usuario creado

  • Delegar la ejecución del contenedor al usuario creado: Finalmente con la instrucción USER seguida del usuario creado (y opcionalmente el grupo) indicaremos que el usuario con el que se ejecuta el contenedor no es root.

  • Añadir la meta información necesaria: etiquetas, puertos y volúmenes: De un vistazo al Dockerfile deberíamos poder saber cómo se llama el módulo, que puertos y qué volúmenes expone, para ello haremos uso de las instrucciones LABEL, EXPOSE y VOLUME

Definición de los Manifest de Kubernetes

Una vez que hemos generado nuestra imagen Docker conforme a las pautas anteriores, el siguiente paso es poder desplegarla en un cluster de Kubernetes o en Openshift.

...

Code Block
languageyaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: loadbalancer
  namespace: onesait-platform
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-body-size: "256m"
spec:
  tls:
  - hosts:
    - example.onesaitplatform.com
    secretName: loadbalancersecret
  rules:
  - host: example.onesaitplatform.com
    http:
      paths:
      - backend:
          serviceName: loadbalancerservice
          servicePort: 8443
        path: /

Despliegue en Openshift

Si queremos desplegar los manifest anteriores en Openshift uno a uno, podremos hacerlo desde la propia UI de Openshift de la siguiente manera:

...

Podremos elegir el contexto al que acceder, el servicio, puerto, y si queremos securizarlo (necesitaremos el certificado con wildcard del dominio del cluster y su clave privada)

...

Aplantillamiento de manifests con Helm

Los pasos anteriores para desplegar nuestro software basado en distintos módulos/deployments podremos hacerlo como hemos explicado en el punto anterior (desde la UI de Openshift o Kubernetes) desplegando cada módulo por separado, además de desplegar Deployments, Services, Secrets, Persistent Volumen Claim por separado, o podremos desplegarlo todo “de golpe“ con Helm. Helm nos permite distribuir nuestro software desplegado en Kubernetes de manera sencilla y sobre todo versionable y fácil de actualizar. Helm permite aplantillar los Manifest de Kubernetes y empaquetarlos para que puedan ser distribuidos mediante un servidor de Charts (chart museum, monocular, etc…) De esta manera si nuestro software está basado en varios módulos será mucho más sencillo desplegarlos y actualizarlos de una única que vez que tenerlos que desplegar a mano uno a uno.

...

Code Block
languagebash
helm push chart/ <chart_repository> --username <user> --password <pass>

Despliegue y rollout de un Chart en Kubernetes/Openshift

Ya con el chart empaquetado podremos desplegarlo en nuestro cluster de Kubernetes/Openshift, previamente tendremos que tener configurado nuestro fichero .kube/config en k8s con los datos de acceso al cluster o haber hecho oc login al cluster de Openshift.

...