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

$ openstack --version
3.12.0

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-atomic26                |
| eb8c8d8f-7359-4177-bcb8-3abe7d0ec3b8 | k8s-fedora-atomic26-cluster-template |
+--------------------------------------+--------------------------------------+

Pour créer un cluster Kubernete, le template k8s-fedora-atomic26-cluster-template sera utilisé.

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-atomic26 --node-count 2 \
  --name monclusterk8s
Request to create cluster 07e has been accepted.

$ openstack coe cluster list
+--------------------------------------+---------------+------------+--------------+--------------------+
| uuid                                 | name          | node_count | master_count | status             |
+--------------------------------------+---------------+------------+--------------+--------------------+
| 07e9f716-d1aa-4130-ad6f-7ac94d3e73c4 | monclusterk8s |          2 |            1 | CREATE_IN_PROGRESS |
+--------------------------------------+---------------+------------+--------------+--------------------+

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 quelques minutes), le cluster est opérationnel et prêt à être utilisé :

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

$ openstack coe cluster show monclusterk8s
+---------------------+------------------------------------------------------------+
| Field               | Value                                                      |
+---------------------+------------------------------------------------------------+
| status              | CREATE_COMPLETE                                            |
| cluster_template_id | eb8c8d8f-7359-4177-bcb8-3abe7d0ec3b8                       |
| node_addresses      | [u'134.158.151.143', u'134.158.151.134']                   |
| uuid                | 77da102e-14a6-4b35-8e27-f9ce4237760d                       |
| stack_id            | 915373e8-83d7-47bb-a2ef-e9dd02aa5c63                       |
| status_reason       | Stack CREATE completed successfully                        |
| created_at          | 2018-05-28T08:02:29+00:00                                  |
| updated_at          | 2018-05-28T09:06:12+00:00                                  |
| coe_version         | v1.7.4                                                     |
| faults              |                                                            |
| keypair             | cloudkey                                                   |
| api_address         | https://134.158.151.109:6443                               |
| master_addresses    | [u'134.158.151.109']                                       |
| create_timeout      | 60                                                         |
| node_count          | 2                                                          |
| discovery_url       | https://discovery.etcd.io/393491e97871b13c2e3b8b78420858d9 |
| master_count        | 1                                                          |
| container_version   | 1.12.6                                                     |
| name                | monclusterk8s                                              |
+---------------------+------------------------------------------------------------+

L'adresse du master est celle qui nous intéresse (134.158.151.109). 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 cloudkey Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
[fedora@monclusterk8s ~]$ kubectl cluster-info
Kubernetes master is running at http://localhost:8080
CoreDNS is running at http://localhost:8080/api/v1/namespaces/kube-system/services/kube-dns/proxy
[fedora@monclusterk8s ~]$ kubectl get nodes
k8-lbcpd7kagr-0-e62qarrc5asx-kube-minion-4or6eo443za4   Ready                      44m      v1.7.4
k8-lbcpd7kagr-1-635t36ajymyj-kube-minion-nhfuxaviylxc   Ready                      45m      v1.7.4
k8-qdg4chvdta-0-3tx4dcdhn2p6-kube-master-ju7tz7oued7j   Ready,SchedulingDisabled   49m      v1.7.4

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

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

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.109:6443
  name: monclusterk8s
contexts:
- context:
    cluster: monclusterk8s
    user: monclusterk8s
  name: monclusterk8s
current-context: monclusterk8s
kind: Config
preferences: {}
users:
- name: monclusterk8s
  user:
    client-certificate: /home/user/cert.pem
    client-key: /home/user/key.pem

Modification du cluster

Le cluster peut être facilement agrandi :

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

$ openstack coe cluster list
+--------------------------------------+----------------+----------+------------+--------------+--------------------+
| uuid                                 | name           | keypair  | node_count | master_count | status             |
+--------------------------------------+----------------+----------+------------+--------------+--------------------+
| 07e9f716-d1aa-4130-ad6f-7ac94d3e73c4 | monclusterk8s  | cloudkey |          4 |            1 | UPDATE_IN_PROGRESS |
+--------------------------------------+----------------+----------+------------+--------------+--------------------+

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

$ openstack coe cluster list
+--------------------------------------+----------------+----------+------------+--------------+-----------------+
| uuid                                 | name           | keypair  | node_count | master_count | status          |
+--------------------------------------+----------------+----------+------------+--------------+-----------------+
| 07e9f716-d1aa-4130-ad6f-7ac94d3e73c4 | monclusterk8s  | cloudkey |          4 |            1 | UPDATE_COMPLETE |
+--------------------------------------+----------------+----------+------------+--------------+-----------------+

Arrêt du cluster

Le cluster est arrêté avec la commande suivante :

$ openstack coe cluster delete monclusterk8s

Documentation complémentaire

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