Step-by-step
-
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.
-
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.
- Dans Overview, noter le port associé au port 80, ici 31552 pour accéder à l’application.
- Identifier l’adresse public du cluster dans l’interface IBM Cloud.
- Puis accéder à l’application de la forme ip:port.
-
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:31010apiVersion: 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 -
Accès à un pod en ligne de commande
- Installer l’interface de commande IBM Cloud.
https://cloud.ibm.com/docs/cli/reference/ibmcloud/all_versions.html - Installer le client Kubectl sur sa machine grâce à Google Cloud SDK.
https://cloud.google.com/sdk/docs/quickstart-windows - Récupérer le nom du pod via l’interface de Kubernetes.
- Executer les commandes suivantes indiquées dans l’onglet accès du cluster.
- Vous avez accès à votre serveur. Attention, sans volume et en cas de défaillance du pod, les données seront perdues, le pod sera initialisé selon l’image.
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 - Installer l’interface de commande IBM Cloud.
-
Créer sa propre image Docker
- Créer un compte Docker Hub https://hub.docker.com/
- Installer Docker sur votre poste. Pour Windows 10, nous aurons besoin de la version pro ou education qui dispose d’Hyper-V. Ce dernier est incompatible avec VMWare, qu’il faudra désactiver.
https://store.docker.com/editions/community/docker-ce-desktop-windows
- 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- Réaliser les fichiers nécessaires à la création de l’image Docker. Un exemple de Dockerfile et de l’ensemble des fichiers associés
- https://github.com/cherryclass/apache-php7/blob/master/Dockerfile
https://github.com/cherryclass/apache-php7
- 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"
- Déployer son image directement sur le cluster IBM Cloud.
https://cloud.ibm.com/docs/containers/cs_tutorials_apps.html#cs_apps_tutorial - Ou enregistrer l’image, sur Docker Hub ou IBM Cloud registry comme indiqué à l’étape suivante.
-
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.
-
Déployer son image dans le cluster
- Si votre image est sur Docker Hub, il suffit d’indiquer la destination du registre.
- Pour IBM Cloud, il faut indiquer la destination de son registre de la forme registry.eu-gb.bluemix.net/Namespace1/hw_repo:1.
- Il est également possible de la déployer en ligne de commande.
https://cloud.ibm.com/docs/containers/cs_tutorials_apps.html#cs_apps_tutorial
-
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*
- Vérifier dans les services du pod que le port 22 est ouvert.
-
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.confL’image apache:
https://github.com/cherryclass/apache-php7/tree/reverse
Adapter les fichiers conf et le dockerfile -
What else ?
Ces tutoriels peuvent vous intéresser :
https://developer.ibm.com/recipes/author/l-frebourg/
Can t delete…