Overview

Skill Level: Beginner

Déployer une image docker sur un cluster kubernetes.

Ingredients

 

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

    • 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. Session expirée

    Dans l’√©tat actuel, vous aurez souvent une session expir√©e sur l’interface Kubernetes.

    • Revenir sur l’interface IBM Cloud.
    • Rafraichir la page (CTRL+F5).
    • Recharger l’interface Kubernetes en cliquant sur le bouton Kubernetes Dashboard.

     

     

  4. 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



  5. 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

     

     

     

     

  6. 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"

     

     

     

     

     

  7. 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

     

     

     

  8. Déployer son image dans le cluster

     

    docker

     

     

    docker2

     

     

     

  9. 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*

     

     

  10. 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

     

     

     

  11. What else ?

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

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

Join The Discussion