2021 tuto
This commit is contained in:
parent
ba77aca73b
commit
c4bb727cd4
29 changed files with 422 additions and 257 deletions
|
|
@ -7,94 +7,87 @@ Maintenant que nous en savons un peu plus sur Kubernetes, nous allons commencer
|
|||
à déployer notre application ChocoMiner dans notre cluster. Pour cela, nous
|
||||
allons devoir :
|
||||
|
||||
- construire les images de notre application ;
|
||||
- publier ces images dans un registre ;
|
||||
- lancer des déploiements de ces images ;
|
||||
- exposer avec un ClusterIP les services qui ont besoin de communiquer
|
||||
entre-eux ;
|
||||
- exposer avec un NodePort l'interface graphique de contrôle.
|
||||
|
||||
|
||||
Rappels sur les registres
|
||||
-------------------------
|
||||
Lancement des *pods*
|
||||
--------------------
|
||||
|
||||
Pour rappel, lorsque l'on exécute un `docker run alpine`, Docker va étendre le
|
||||
nom de l'image en `library/alpine` puis `index.docker.io/library/alpine`. Pour
|
||||
interroger `index.docker.io` au sujet d'une image `library/alpine:latest`.
|
||||
### Via Helm
|
||||
|
||||
Si l'on souhaite utiliser un autre registre que le Docker Hub, il faut alors
|
||||
préciser le domaine à utiliser : `registry.mycompany.io:5000/myimage:awesome`,
|
||||
...
|
||||
[Helm](https://helm.sh/) est l'équivalent d'un gestionnaire de paquets, mais
|
||||
pour Kubernetes. Nous avons pu voir dans la section précédente qu'il faut
|
||||
parfois écrire des fichiers de description YAML assez volumineux (et encore,
|
||||
celui du tableau de bord est tout petit !) afin de se faire comprendre de
|
||||
Kubernetes.
|
||||
|
||||
Helm se veut donc, notamment, être un moyen de packager une application, pour
|
||||
que ce soit plus simple de l'ajouter à son cluster k8s. L'[artifact
|
||||
hub](https://artifacthub.io/) est une agrégation de différents dépôts,
|
||||
permettant de trouver facilement son bonheur. On va y trouver
|
||||
[`influxdb`](https://artifacthub.io/packages/helm/influxdata/influxdb) dont on
|
||||
va avoir besoin pour la suite.
|
||||
|
||||
Sur la route du registre auto-hébergé
|
||||
-------------------------------------
|
||||
Mais d'abord, il va nous falloir [installer
|
||||
helm](https://helm.sh/docs/intro/install/). Il utilisera la même configuration
|
||||
que `kubectl`, il n'y a rien de plus à configurer.
|
||||
|
||||
Profitons d'avoir notre cluster Kubernetes pour y installer un registre Docker
|
||||
!
|
||||
|
||||
Nous allons déployer l'image officielle de registre Docker : `registry` et
|
||||
faire en sorte que celle-ci stocke les couches des images en local.
|
||||
|
||||
La subtilité à ne pas oublier, est que Docker nécessite d'avoir une connexion
|
||||
chiffrée avec ses registres, à moins qu'il ne soit lancé avec le flag
|
||||
`--insecure-registry`, ou que le registre soit sur `127.0.0.0/8`.
|
||||
|
||||
L'idée sera donc de publier notre registre via un `NodePort`, afin qu'il soit
|
||||
disponible sur un port `127.0.0.1:xxxxx` de chaque nœud :
|
||||
Une fois `helm` installé, et le dépôt `influxdata` ajouté, comme précisé dans
|
||||
la documentation du *chart* d'InfluxDB, nous pouvons le déployer dans notre
|
||||
cluster :
|
||||
|
||||
```bash
|
||||
kubectl create deployment registry --image=registry
|
||||
kubectl expose deploy/registry --port=5000 --type=NodePort
|
||||
helm install influxdata/influxdb --generate-name
|
||||
```
|
||||
|
||||
Pour tester, vous pouvez :
|
||||
Les valeurs de configuration indiquées dans le `README` du *chart* se modifient
|
||||
ainsi :
|
||||
|
||||
```bash
|
||||
NODEPORT=$(kubectl get svc/registry -o json | jq .spec.ports[0].nodePort)
|
||||
REGISTRY=127.0.0.1:$NODEPORT
|
||||
curl $REGISTRY/v2/_catalog
|
||||
helm upgrade -f values.yml your-influx-name influxdata/influxdb
|
||||
```
|
||||
|
||||
```bash
|
||||
docker pull busybox
|
||||
docker tag busybox $REGISTRY/busybox
|
||||
docker push $REGISTRY/busybox
|
||||
```
|
||||
Il vous sera entre-autre nécessaire d'ajouter un administrateur afin de pouvoir
|
||||
utiliser la base de données.
|
||||
|
||||
Nous pouvons ensuite faire de même avec
|
||||
[Chronograf](https://artifacthub.io/packages/helm/influxdata/chronograf) ou
|
||||
mixer avec la méthode ci-dessous (en adaptant certaines valeurs).
|
||||
|
||||
|
||||
Utiliser les images du Docker Hub
|
||||
---------------------------------
|
||||
### Via `kubectl`
|
||||
|
||||
Si vous n'avez pas réussi à déployer votre propre registre (ou si on n'est pas
|
||||
en avance pour avoir le temps de regarder ça !), utilisez les images mises à
|
||||
disposition sur le Docker Hub :
|
||||
|
||||
- `nemunaire/worker:v0.1`
|
||||
- `nemunaire/rng:v0.1`
|
||||
- `nemunaire/hasher:v0.1`
|
||||
|
||||
|
||||
Lançons les images standards
|
||||
----------------------------
|
||||
|
||||
#### `influxdb` et `chronograf`
|
||||
Si vous ne souhaitez pas utiliser `helm`, vous pouvez vous rabattre sur les
|
||||
YAML que l'on a utilisé jusqu'à maintenant, et utiliser `kubectl`. Commençons
|
||||
par lancer `influxdb` :
|
||||
|
||||
```bash
|
||||
kubectl create deployment chronograf --image=chronograf
|
||||
kubectl apply -f https://virli.nemunai.re/influxdb.yaml
|
||||
```
|
||||
|
||||
#### Notre application
|
||||
Pour chronograf, la commande suivante fonctionnerait, mais prenons exemple sur
|
||||
le fichier YAML d'InfluxDB pour Chronograf :
|
||||
|
||||
```bash
|
||||
TAG=v0.1
|
||||
kubectl create deployment chronograf --image=chronograf -- chronograf \
|
||||
--influxdb-url=http://influxdb:8086 \
|
||||
--influxdb-username=chronograf \
|
||||
--influxdb-password=eBoo8geingie8ziejeeg8bein6Yai1a
|
||||
```
|
||||
|
||||
### Notre application
|
||||
|
||||
```bash
|
||||
TAG=0.1
|
||||
for SERVICE in hasher rng worker; do
|
||||
kubectl create deployment $SERVICE --image=nemunaire/$SERVICE:$TAG
|
||||
done
|
||||
```
|
||||
|
||||
#### Exposer les ports
|
||||
### Exposer les ports
|
||||
|
||||
Pour trois des applications, des ClusterIP font l'affaire, car ils n'ont pas
|
||||
besoin d'être exposés en dehors du cluster.
|
||||
|
|
@ -112,3 +105,19 @@ kubectl create service nodeport chronograf --tcp=8888 --node-port=30001
|
|||
```
|
||||
|
||||
À ce stade, nous devrions pouvoir accéder à l'interface de Chronograf !
|
||||
|
||||
Le port 30001 est exposé par `kind` (cela faisait partie des ports redirigés par
|
||||
Docker entre le nœud *master* et votre machine !), nous devrions donc pouvoir
|
||||
nous rendre sur : <http://localhost:30001/> pour y voir Chronograf.
|
||||
|
||||
Pour afficher un graphique intéressant, on se rend dans *Explore*, on choisit
|
||||
la base `chocominer.autogen`, puis la table `hashes` et enfin on sélectionne
|
||||
l'élément `value`. Pour être tout à fait juste, il faut choisir la fonction
|
||||
`sum`, car nous voulons afficher le nombre total de condensat générés. Un
|
||||
second graphique intéressant est celui du nombre de pépites trouvées : il faut
|
||||
compter (`count`), le nombre d'éléments dans la table `chunks`.
|
||||
|
||||

|
||||
|
||||
Vous n'avez pas la même courbe de progression ? continuons le TP alors, pour
|
||||
augmenter la puissance de notre *rig* !
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue