Déployer Nuxeo sur OpenShift


Thu 09 February 2017 Par Mariana Cedica

Red Hat Openshift - Container PlatformRed Hat a publié OpenShift 3.3 Container Platform en septembre dernier, révolutionnant ainsi le milieu des solutions de Platform as a Service (PaaS). OpenShift Container Platform est une solution de PaaS basée sur Red Hat Enterprise Linux et Kubernetes qui prend la forme d'une plateforme applicative dans le Cloud et qui permet de déployer de nouvelles applications sur des ressources sécurisées et flexibles avec une configuration et une gestion minimales. Elle dispose de fonctionnalités bien pratiques : un registre Docker intégré, des pipelines, un déploiement d'images en un clic, une meilleure UI, etc. . OpenShift propose ainsi la plateforme Kubernetes la plus performante pour supporter les applications existantes et natives du Cloud dans n'importe quel environnement Cloud. Nous voyons de plus en plus de clients et de prospects qui s'intéressent aux solutions PaaS pour déployer leurs applications avec OpenShift. Nous avons donc également décidé de tirer parti d'OpenShift Platform !

Plusieurs options sont disponibles pour la tester, mais la plus simple est de télécharger la VM All-In-One VM for OpenShift Origin, qui est en fait la version gratuite d'OpenShift Container Platform ou OpenShift Enterprise. Vous pouvez également démarrer un nouveau cluster en exécutant l'image Docker publique, mais faites attention car vous devez disposer d'une ancienne version de Docker, 1.10 par exemple). Si vous souhaitez évoluer vers un environnement de production, Red Hat fournit une documentation très détaillée sur le déploiement d'OpenShift sur AWS en tant que cluster à haute disponibilité. Il est important de noter qu'un abonnement OpenShift Business Partner interdit à la revente est nécessaire et que la version d'évaluation de 30 jours à Red Hat Enterprise Linux Server ne fonctionne pas ! (Faites-moi confiance ou vous risquez de perdre pas mal de temps !).

L'exercice est très simple. Je veux simplement que Nuxeo Platform soit configuré avec MongoDB aussi rapidement que possible pour à des fins de développement. Je vais également vous montrer comment installer des packages de la Marketplace et comment configurer un volume AWS EBS qui sera utilisé par MongoDB en tant que stockage permanent pour rendre le tout un peu plus intéressant (bien sûr, je pars pour l'instant du principe que votre cluster OpenShift se trouve sur AWS).

Vous avez deux options : télécharger et utiliser le client OpenShift CLI ou (presque) tout faire à partir de l'UI. Je vais vous montrer les deux options, mais notez que l'UI est très limitée par rapport au client. Jetons un œil aux différentes étapes.

  1. Faire fonctionner OpenShift

    Projetons-nous un peu dans l'avenir (ou dans 10 mins, en fonction de l'option que vous venez de choisir) et partons du principe que votre cluster OpenShift est opérationnel.

    Pour exécuter la VM All-In-One, utilisez :

    $ vagrant init openshift/origin-all-in-one
    $ vagrant up --provider=virtualbox
    

    URL d'exécution de la console https://10.2.2.2:8443

    Si vous choisissez d'installer le cluster à haute disponibilité, suivez cette documentation et vous disposerez au final de cette architecture sur AWS :

    Cluster Architecture

  2. Connexion à OpenShift et création d'un projet

    • Si vous choisissez d'utiliser l'image All-In-One, vous pouvez simplement vous connecter en utilisant "admin/admin" comme nom d'utilisateur / mot de passe :

      $ oc login https://10.2.2.2:8443
      $ oc new-project test-nuxeo
      

      Utilisez maintenant le projet "test-nuxeo" sur le serveur "https://10.2.2.2:8443".

    • Si vous préférez l'installation du cluster AWS, vous pouvez générer un token à partir de la console Web. En partant du principe que le cluster est déployé sur openshift-master.io.nuxeo.com/, allez sur https://openshift-master.io.nuxeo.com/console/command-line et copiez le token généré pour vous connecter :

      $ oc login https://openshift-master.io.nuxeo.com --token=XXX
      

      Créez maintenant un nouveau projet :

      New project

  3. Configuration d'un volume EBS (cluster AWS) et déploiement de MongoDB

    Si vous exécutez un cluster OpenShift sur AWS, seul un administrateur de clusters peut configurer les volumes persistants pour qu'ils soient disponibles pour tous les projets. Toute application nécessitant un stockage externe peut automatiquement s'y rattacher et les utiliser.

    • Volume EBS dans AWS :

    EBS Volume in AWS

    • Création du volume ps dans l'OS
    $ cat aws-pv.yaml
    apiVersion: "v1"
    kind: "PersistentVolume"
    metadata:
     name: "pv00001"
    spec:
     capacity:
     storage: "1Gi"
     accessModes:
     - "ReadWriteOnce"
     awsElasticBlockStore:
     fsType: "ext4"
     volumeID: "vol-026b24515ee34265c"
    $ oc create -f aws-pv.yaml
    persistentvolume "pv00001" created
    

    Vous pouvez maintenant déployer un nouveau MongoDB en cliquant sur "Add to project / Browse Catalog" et en choisissant le modèle existant "mongodb-persistent" comme sur l'image ci-dessous (définissez tous les paramètres sur la valeur "nuxeo" pour plus de commodité). Notez qu'une seule réplique est supportée avec ce modèle :

    MongoDB Template

    MongoDB Parameters

    Et c'est tout ! Le conteneur MongoDB est maintenant opérationnel :

    MongoDB running

    Maintenant, démarrons Nuxeo !

  4. Création et exécution de l'image Docker Nuxeo

    Par défaut, tous les conteneurs lancés au sein d'OpenShift ne sont pas autorisés à utiliser un utilisateur racine dans ce même conteneur. On ne peut pas simplement exécuter nuxeo:latest car OpenShift empêchera le conteneur d'agir en tant que racine. Il est possible de modifier le contexte de sécurité pour contourner cette contrainte (suivez la solution décrite ici). Vous pouvez aussi créer une nouvelle image Nuxeo à partir de mon Dockerfile légèrement modifié qui s'exécute avec l'utilisateur 'nuxeo' au lieu de la racine.

    Vous pouvez utiliser directement le repository GitHub et les variables d'environnement et regarder la magie opérer : OpenShift crée l'image Docker, la publie sur le registre interne et démarre le conteneur Nuxeo.

    Comme je veux démarrer Nuxeo à l'aide du modèle MongoDB et installer le package 'nuxeo-web-ui' de la Marketplace, je vais créer une nouvelle application et les définir en tant que variables d'environnement :

    $oc new-app https://github.com/mcedica/nuxeo-openshift-image.git
    -e NUXEO_TEMPLATES=default,mongodb
    -e NUXEO_CUSTOM_PARAM=nuxeo.mongodb.server=mongodb://admin:[email protected]:27017
    -e NUXEO_PACKAGES=nuxeo-web-ui
    
    --> Found Docker image ad7074a (12 days old) from Docker Hub for "nuxeo:8.10"
    
    --> Creating resources ...
     imagestream "nuxeo" created
     imagestream "nuxeo-openshift-image" created
     buildconfig "nuxeo-openshift-image" created
     deploymentconfig "nuxeo-openshift-image" created
     service "nuxeo-openshift-image" created
    --> Success
     Build scheduled, use 'oc logs -f bc/nuxeo-openshift-image' to track its progress.
     Run 'oc status' to view your app.
    

    Vous pouvez aussi cliquer sur "Add to project" dans la console Web, aller dans l'onglet "Deploy Image" et saisir nuxeo:latest en partant du principe que vous avez modifié les contraintes de sécurité si nécessaire * et défini les variables d'environnement ci-dessus.


    Contraintes de sécurité : Si vous réalisez votre test avec la VM All-In-One OpenShift Origin VM, vous n'avez rien à faire. Vous pouvez directement exécuter n'importe quel conteneur en tant que racine. Si vous utilisez le cluster à haute disponibilité AWS OpenShift HA Cluster et que vous voulez installer l'image Docker par défaut "nuxeo:latest", exécutez la commande suivante :

    $oc edit scc anyuid

    Puis ajoutez aux utilisateurs :

    system:serviceaccount:$PROJECT:default #where $PROJECT is the name of your OS project


    Deploy Nuxeo

    Vous pouvez vérifier votre nouvelle image Docker (maintenant présente dans le registre interne) :

    Image build

    Voici le déploiement :

    Deployment

    Et voilà le travail en action :

    Running Nuxeo Pod

    MongoDB et Nuxeo Platform sont lancés :

    MongoDB and Nuxeo

    Il ne reste plus qu'à configurer un chemin pour accéder à Nuxeo Platform :

    Create Route

    Et voilà ! Nuxeo Platform est configuré avec une instance MongoDB persistante et est disponible ici : http://nuxeo-route-test-nuxeo.apps.io.nuxeo.com/
    (C'était le lien vers mon application de test et ce n'est qu'un exemple. Si vous ne pouvez pas y accéder, c'est que mon application de test a été supprimée et que vous allez devoir essayer par vous-même pour voir le résultat !)

    Running Nuxeo


Tagged: AWS, OpenShift, MongoDB, How to