Overview

Skill Level: Beginner

Déployer une image docker sur un cluster kubernetes.

Ingredients

  • Compte IBM Cloud nécessaire.

 

Objectif :

docker

 

 

Step-by-step

  1. Création d'un cluster

    • Provisionner un cluster via l’interface. L’offre gratuite vous permet de réserver un cluster pour un mois. Il n’est pas possible de déclarer un volume NTFS et d’utiliser le LoadBalancer dans la version gratuite.
    • Patienter plusieurs dizaines de minutes pour le provisionnement.

     

    cluster1

     

     

  2. Déployer une image de Docker Hub

    • Acceder au tableau de bord Kubernetes
    • Cliquer sur CREATE
    • Choisir comme conteneur nginx ( cette image sera déployée https://hub.docker.com/_/nginx/)
    • Ouvrir le conteneur vers l’exterieur sur le port 80.

     

    cluster7

     

    • Dans Overview, noter le port associé au port 80, ici 31552 pour accéder à l’application.

     

    cluster8

     

    • Identifier l’adresse public du cluster dans l’interface IBM Cloud.

     

    cluster5

     

    • Puis accéder à l’application de la forme ip:port.

     

    nginx

     

     

  3. Déploiement par fichier de configuration

    Une autre solution est d’indiquer directement un fichier de configuration pour notre déploiement et nos services associés.

    Ce fichier permet de déployer un Pod Gitlab avec la création d’un volume en cache.  En cas de suppression du Pod, Kubernetes en déploie un autre mais n’utilise pas le volume défini précédemment. Il n’est pas possible dans la version lite de déclarer un volume NTFS.
    On ouvre également plusieurs ports en spécifiant directement le NodePort souhaité (plage 30000 à 32767) . L’application sera accessible à l’adresse de votre cluster suivie du port, soit dans cet exemple : 184.172.247.81:31010

     

    apiVersion: v1
    kind: Service
    metadata:
    name: my-gitlab
    spec:
    ports:
    - port: 80
    targetPort: 80
    nodePort: 31000
    protocol: TCP
    name: www
    - port: 22
    targetPort: 22
    nodePort: 31002
    protocol: TCP
    name: ssh
    - port: 443
    targetPort: 443
    nodePort: 31001
    protocol: TCP
    name: ssl
    - port: 25
    targetPort: 25
    nodePort: 31003
    protocol: TCP
    name: smtp
    selector:
    run: my-gitlab
    type: NodePort

    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: gitlab9.3
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    run: my-gitlab
    spec:
    volumes:
    - name: cache-vol
    emptyDir: {}
    containers:
    - name: my-gitlab
    image: gitlab/gitlab-ce
    volumeMounts:
    - mountPath: /cache
    name: cache-vol # must match the name of the volume, above



  4. Accès à un pod en ligne de commande

     

    acces

     

    ibmcloud plugin install container-service -r Bluemix
    ibmcloud login -a https://api.eu-de.bluemix.net
    ibmcloud cs region-set eu-central
    ibmcloud cs cluster-config mycluster
    kubectl exec -it nginx-6d4b4788df-mc7nm -- /bin/bash

     

     

    pôd

     

     

     

     

  5. Créer sa propre image Docker

     

    • Tester votre installation avec une image de Docker Hub.

     

    docker pull mariadb
    docker images
    docker run --name mariax -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb

    docker exec -it mariax bash
    docker ps

    docker stop mariax
    docker images
    docker rmi -f 2c73b3262fff


    dockermaria

     

    • Compiler son image en local dans le répertoire.

     

    docker build --tag="nginx-php7:dev"
    • Ou compiler son image depuis un dépôt, par exemple avec comme branch dev.

     

    docker build github.com/cherryclass/nginx-php7#dev --tag="nginx-php7:dev"

     

     

     

     

     

  6. Enregistrer son image sur Docker Hub ou sur IBM Cloud Registry

    Sur Docker Hub, un seul dépot privé est possible, le reste sera public.

    • Déployer son code sur GitHub.
    • Réaliser une construction automatique sur Docker Hub en indiquant son dépôt Github.

     

    Il est également possible d’enregistrer son image dans un registre privée IBM Cloud en suivant les étapes indiquée ci-dessous.

     

    registre

     

     

     

  7. Déployer son image dans le cluster

     

    docker

     

     

    docker2

     

     

     

  8. Déployer son site web sur un pod

    • Vérifier dans les services du pod que le port 22 est ouvert.
    • Se connecter à son pod comme indiqué à l’étape précédente.
    • Executer les commandes suivantes en supposant que votre image possède le paquet ssh, sinon l’installer (sudo apt-get ssh).

    sudo passwd www-data

    etc/init.d/ssh start
    • Avec un logiciel SFTP, se connecter au pod *ip du cluster* — www-data — *monmotdepasse* — *port accédant au port 22 du pod*

     

     

  9. Multisite et port non standard

    Pour éviter d’avoir à accéder à un pod avec son adresse IP et son port, il est possible d’installer un reverse proxy. Le pod sera accessible sur le port 80 grâce à une URL spécifique définie sur le reverse proxy.

    Il n’est pas possible d’installer ce reverse proxy avec un compte trial sur les conteneurs IBM Cloud. Si vous disposez d’un hébergement type VPS, vous pouvez facilement déployer ce serveur pour accéder à vos pods IBM.

    L’image nginx:
    https://github.com/cherryclass/nginx-php7/tree/reverse
    Adapter le fichier default.conf

    L’image apache:
    https://github.com/cherryclass/apache-php7/tree/reverse
    Adapter les fichiers conf et le dockerfile

     

     

     

  10. What else ?

    Ces tutoriels peuvent vous intéresser :
    https://developer.ibm.com/recipes/author/l-frebourg/

    https://frebourg.es/#cloud

     

1 comment on"IBM Cloud - Image docker sur cluster kubernetes"

Join The Discussion