Introduction

La plate-forme SCIGNE propose un service de conteneurs à la demande (container as a service) basé sur le projet OpenStack Magnum. Ce service permet de créer simplement un cluster de conteneurs Docker.

Les technologies Docker supportées sont Kubernetes et Swarm. D'autres technologies peuvent être ajoutées sur simple demande Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. de la plate-forme SCIGNE.

L'object de ce document est de fournir une information concise pour débuter dans l'utilisation du service de conteneurs (Magnum) d'OpenStack. Toutes les options ne sont pas traitées et peuvent être retrouvées dans la documentation officielle de ce module.

Environnement

L'accès à ce service nécessite que vous ayez un compte sur la plate-forme SCIGNE de l'IPHC et que votre client OpenStack soit correctement configuré. Une documentation dédiée détaille ces points.

Installation avec les paquets de la distribution

Nous recommendons d'utiliser les paquets de votre distribution Linux pour installer le client magnum.

Si vous avez un système d'exploitation Red Hat Linux ou dérivés (CentOS, Scientific Linux, ...), le client magnum peut être installé avec la commande suivante :

$ sudo yum install python2-openstackclient python-magnumclient

Si vous avez un système d'exploitation Debian ou dérivés (Ubuntu, Linux Mint, ...), le client magnum peut être installé avec la commande suivante :

$ sudo apt-get install python-openstackclient python-magnumclient

Installation avec PIP

Si votre système d'exploitation ne fournit pas de client OpenStack ou bien que la version est trop ancienne, vous pouvez utiliser PIP pour installer le client magnum :

$ sudo pip install python-openstackclient python-magnumclient

Vérification de l'installation

Pour vérifier que les commandes magnum et openstack sont bien installées, les commandes suivantes peuvent être utilisées :

$ magnum --version
2.8.0

$ openstack --version
3.14.2

La version qui est affichée peut être différente de celle qui est indiquée ci-dessus (ces valeurs correspondent à la version Pike d'OpenStack).

Gestion d'un cluster Kubernetes

Kubernetes (K8s)est un outil pour gérer le déploiement, la configuration et la montée en charge des applications conteneurisées. Le site Web de Kubernetes propose différents tutoriels sur l'utilisation de cette technologie.

Le service Cloud Computing de la plateforme SCIGNE est préconfiguré avec différents templates utilisables pour la création de clusters. Ces templates utilisent la technologie Docker pour fournir des conteneurs :

$ openstack coe cluster template list
+--------------------------------------+-----------------------+
| uuid                                 | name                  |
+--------------------------------------+-----------------------+
| 1d6fcc5e-104e-475f-9254-f1e6f9a71896 | swarm-fedora-atomic29 |
| eb8c8d8f-7359-4177-bcb8-3abe7d0ec3b8 | k8s-fedora-atomic29   |
+--------------------------------------+-----------------------+

La valeur des uuid peuvent varier en fonction des projets (cette valeur est unique pour chaque projet). La sélection du template se fait par le nom. Dans ce tutoriel, le template k8s-fedora-atomic29 sera utilisé pour créer un cluster Kubernetes.

Création d'un cluster

La création d'un nouveau cluster est réalisée en une seule commande :

$ openstack coe  cluster create  --cluster-template k8s-fedora-atomic29 \
  --node-count 2 --keypair cloudkey myk8s
Request to create cluster 162ff0ac-b592-45f6-adde-2ac22dec0bf9 has been accepted.

$ openstack coe cluster show myk8s
+---------------------+------------------------------------------------------------+
| Field               | Value                                                      |
+---------------------+------------------------------------------------------------+
| status              | CREATE_IN_PROGRESS                                         |
| cluster_template_id | afd84046-5e4e-495c-a5fa-38538aabe848                       |
| node_addresses      | []                                                         |
| uuid                | 162ff0ac-b592-45f6-adde-2ac22dec0bf9                       |
| stack_id            | 23fdef04-9f54-475d-af20-ff62051a9730                       |
| status_reason       | None                                                       |
| created_at          | 2019-08-28T04:37:19+00:00                                  |
| updated_at          | 2019-08-28T04:39:10+00:00                                  |
| coe_version         | None                                                       |
| labels              | {}                                                         |
| faults              |                                                            |
| keypair             | cloudkey                                                   |
| api_address         | None                                                       |
| master_addresses    | []                                                         |
| create_timeout      | 60                                                         |
| node_count          | 2                                                          |
| discovery_url       | https://discovery.etcd.io/0102c375ecd5a7f96a1623dc0d292a4d |
| master_count        | 1                                                          |
| container_version   | None                                                       |
| name                | myk8s                                                      |
| master_flavor_id    | m1.large                                                   |
| flavor_id           | m1.small                                                   |
+---------------------+------------------------------------------------------------+

Il est important de remplacer la valeur cloudkey par le nom de votre clé SSH, utilisée pour vous connecter aux machines virtuelles du cloud OpenStack de la plateforme SCIGNE.

Le paramètre node-count permet de faire varier le nombre de noeuds qui sont créés. D'autres paramètres, détailles sur la page du projet Magnum, peuvent également être spécifiés lors de la création de ce cluster.

Le suivi de création du cluster est réalisée à l'aide de la commande précédente. Une fois que l'état est CREATE_COMPLETE (il faut attendre environ cinq minutes), le cluster est opérationnel et prêt à être utilisé :

$ openstack coe cluster show myk8s
+---------------------+------------------------------------------------------------+
| Field               | Value                                                      |
+---------------------+------------------------------------------------------------+
| status              | CREATE_COMPLETE                                            |
| cluster_template_id | afd84046-5e4e-495c-a5fa-38538aabe848                       |
| node_addresses      | [u'134.158.151.214', u'134.158.151.216']                   |
| uuid                | 162ff0ac-b592-45f6-adde-2ac22dec0bf9                       |
| stack_id            | 23fdef04-9f54-475d-af20-ff62051a9730                       |
| status_reason       | Stack CREATE completed successfully                        |
| created_at          | 2019-08-28T04:37:19+00:00                                  |
| updated_at          | 2019-08-28T04:43:10+00:00                                  |
| coe_version         | v1.11.1                                                    |
| labels              | {}                                                         |
| faults              |                                                            |
| keypair             | cloudkey                                                   |
| api_address         | https://134.158.151.152:6443                               |
| master_addresses    | [u'134.158.151.152']                                       |
| create_timeout      | 60                                                         |
| node_count          | 2                                                          |
| discovery_url       | https://discovery.etcd.io/0102c375ecd5a7f96a1623dc0d292a4d |
| master_count        | 1                                                          |
| container_version   | 1.12.6                                                     |
| name                | myk8s                                                      |
| master_flavor_id    | m1.large                                                   |
| flavor_id           | m1.small                                                   |
+---------------------+------------------------------------------------------------+

L'adresse du master est celle qui nous intéresse (134.158.151.152). Elle nous permettra de nous connecter au cluster à l'aide de la clé SSH utilisée lors de la création du cluster et de vérifier que Kubernetes fonctionne correctement :

$ ssh -i  ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
[fedora@myk8s-vgsse252uk2f-master-0 ~]$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[fedora@myk8s-vgsse252uk2f-master-0 ~]$ kubectl get nodes
NAME                          STATUS    ROLES     AGE       VERSION
myk8s-vgsse252uk2f-master-0   Ready     master    11m       v1.11.1
myk8s-vgsse252uk2f-minion-0   Ready     <none>    11m       v1.11.1
myk8s-vgsse252uk2f-minion-1   Ready     <none>    11m       v1.11.1

Les paramètres de connexion au cluster Kubernetes peuvent aussi être récupérées en utilisant le client OpenStack :

$ openstack  coe cluster config myk8s
export KUBECONFIG=/home/user/config

Il faut noter que le chemin /home/user est donné à titre d'exemple et sera différent sur votre système d'exploitation.

Le fichier /home/user/config contient les paramètres du cluster :

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /home/user/ca.pem
    server: https://134.158.151.152:6443
  name: myk8s
contexts:
- context:
    cluster: myk8s
    user: myk8s
  name: myk8s
current-context: myk8s
kind: Config
preferences: {}
users:
- name: myk8s
  user:
    client-certificate: /home/user/cert.pem
    client-key: /home/user/key.pem

Modification du cluster

Le cluster Kubernetes peut être facilement agrandi :

$ openstack coe cluster update myk8s replace node_count=4
Request to update cluster k8s-cluster4 has been accepted.

$ openstack coe cluster show myk8s
+---------------------+------------------------------------------------------------+
| Field               | Value                                                      |
+---------------------+------------------------------------------------------------+
| status              | UPDATE_IN_PROGRESS                                         |
| cluster_template_id | afd84046-5e4e-495c-a5fa-38538aabe848                       |
| node_addresses      | [u'134.158.151.214', u'134.158.151.216']                   |
| uuid                | 162ff0ac-b592-45f6-adde-2ac22dec0bf9                       |
| stack_id            | 23fdef04-9f54-475d-af20-ff62051a9730                       |
| status_reason       | None                                                       |
| created_at          | 2019-08-28T04:37:19+00:00                                  |
| updated_at          | 2019-08-28T04:57:42+00:00                                  |
| coe_version         | v1.11.1                                                    |
| labels              | {}                                                         |
| faults              |                                                            |
| keypair             | cloudkey                                                   |
| api_address         | https://134.158.151.152:6443                               |
| master_addresses    | [u'134.158.151.152']                                       |
| create_timeout      | 60                                                         |
| node_count          | 4                                                          |
| discovery_url       | https://discovery.etcd.io/0102c375ecd5a7f96a1623dc0d292a4d |
| master_count        | 1                                                          |
| container_version   | 1.12.6                                                     |
| name                | myk8s                                                      |
| master_flavor_id    | m1.large                                                   |
| flavor_id           | m1.small                                                   |
+---------------------+------------------------------------------------------------+

Après quelques minutes, les nouveaux noeuds sont utilisables :

$ openstack coe cluster show myk8s -c status
+--------+-----------------+
| Field  | Value           |
+--------+-----------------+
| status | UPDATE_COMPLETE |
+--------+-----------------+

Les nouveaux noeuds sont également visibles depuis le master :

$ ssh -i ${HOME}/.novacreds/cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
[fedora@myk8s-vgsse252uk2f-master-0 ~]$ kubectl get nodes
NAME                          STATUS    ROLES     AGE       VERSION
myk8s-vgsse252uk2f-master-0   Ready     master    18m       v1.11.1
myk8s-vgsse252uk2f-minion-0   Ready     <none>    18m       v1.11.1
myk8s-vgsse252uk2f-minion-1   Ready     <none>    18m       v1.11.1
myk8s-vgsse252uk2f-minion-2   Ready     <none>    1m        v1.11.1
myk8s-vgsse252uk2f-minion-3   Ready     <none>    1m        v1.11.1

Arrêt du cluster

Le cluster Kubernetes peut être supprimé avec la commande suivante :

$ openstack coe cluster delete myk8s

Documentation complémentaire

Les sites suivants peuvent être consultés pour obtenir plus d'informations concernant l'utilisation de Magnum et de Kubernetes :