Guide de déploiement Kubernetes (utilisant Helm)¶
Ce document fournit des conseils pour le déploiement et la gestion de Clue sur un cluster Kubernetes.
Aperçu¶
Dans ce référentiel, un chart Helm est fourni qui vous permettra de déployer Clue sur un cluster Kubernetes.
Exigences¶
Pour déployer Clue sur un cluster Kubernetes, vous devrez installer kubectl ainsi que helm pour installer le chart Helm fourni.
Installation de Kubectl¶
Si vous n'avez pas Kubectl installé, suivez le guide d'installation officiel.
Vérifier l'installation de kubectl :
kubectl version
Installation de Helm et Helm-diff¶
Si vous n'avez pas Helm installé, suivez le guide d'installation officiel.
Vérifier l'installation de helm :
helm version
Il est également recommandé (mais pas obligatoire) d'utiliser helm-diff, suivez le guide d'installation officiel
Vérifier l'installation de helm-diff :
helm diff version
Déploiement¶
Voici les étapes pour déployer Clue sur votre propre cluster :
1. Création de l'espace de noms clue¶
Vous voudrez probablement installer Clue dans son propre espace de noms, et donc avant d'installer le chart, vous
devrez créer l'espace de noms en utilisant kubectl. Ici, nous créons un espace de noms appelé clue
kubectl create namespace clue
2. Création des secrets requis¶
Vous devrez générer et stocker des secrets dans le cluster : - flask-secret-key - clue-apikeys
Premièrement, le secret flask-secret-key est un mot de passe généré aléatoirement, voici une commande pour générer
un mot de passe de 32 caractères :
tr -dc 'A-Za-z0-9!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~' < /dev/urandom | head -c 32
clue-apikeys, il attend un objet json contenant les clés API qui permettront aux plugins de se connecter à
l'API principale. Voici à quoi cela ressemblerait :
{
"my_plugin": "some_api_key"
}
{}.
Voici la commande pour créer ces secrets en utilisant kubectl :
kubectl create secret generic flask-secret-key -n clue --from-literal=key=<generated-password>
kubectl create secret generic clue-apikeys -n clue --from-literal=data={}
3. Création de votre fichier de valeurs spécifique au déploiement¶
Afin d'avoir des valeurs spécifiques au déploiement, vous devrez créer un nouveau fichier
values-\
Dans ce fichier, vous pourrez remplacer les valeurs du fichier values.yaml en conservant la même structure. Par exemple, si vous souhaitez utiliser une balise d'image différente pour les déploiements UI et API :
images:
ui:
tag: <your-tag-here>
rest:
tag: <your-tag-here>
4. Installation du chart helm¶
Voici une commande qui installera le chart Helm, en utilisant clue comme nom de déploiement, et en déployant dans
l'espace de noms clue :
# helm install <deployment-name> -n <namespace> <path-to-chart-directory> --values <path-to-deployment-specific-values>
helm install clue -n clue helm/ --values helm/values/values.yaml --values helm/values/values-deployment.yaml
5. Mise à jour du déploiement¶
Une fois le chart installé, si vous devez modifier quoi que ce soit dans le déploiement, vous pouvez exécuter la même
commande, en remplaçant l'option install par upgrade.
helm upgrade clue -n clue helm/ --values helm/values/values.yaml --values helm/values/values-deployment.yaml
Vérification avant le déploiement¶
Avant de déployer des modifications, il est recommandé de vérifier que l'état de votre dépôt local correspond à la
configuration du cluster en direct en utilisant helm diff :
# l'option -C 3 limite la sortie à 3 lignes de chaque côté de chaque diff. Supprimez l'option pour voir le fichier entier
helm diff upgrade clue -C 3 -n clue helm/ --values helm/values/values.yaml --values helm/values/values-deployment.yaml
Si le diff montre des modifications non intentionnelles, examinez-les et annulez-les avant de procéder au déploiement.
Sortie de diff attendue¶
Modifications normales des certificats TLS¶
Lors de l'exécution de diffs, vous pouvez remarquer des modifications apportées aux certificats TLS pour le serveur APM Elasticsearch. Ces modifications sont attendues et peuvent être ignorées en toute sécurité car elles n'affectent pas les fonctionnalités de l'API.
L'exemple suivant illustre une sortie de diff typique :
helm diff upgrade clue -C 3 -n clue helm/ --values helm/values/values.yaml --values helm/values/values-deployment.yaml
Exemple de sortie :
clue, clue-elasticsearch-coordinating, StatefulSet (apps) has changed:
...
## Istio Labels: https://istio.io/docs/ops/deployment/requirements/
app: coordinating-only
annotations:
- checksum/tls: 3cec91754cb7d9e1b8942941ba7885f20a604e0fef9c0200e569aaa46aca4b76
+ checksum/tls: b3943b1a6b7e399be8961b11b17fc849b4ebb439e0b4f9bcadb71da90584e356
spec:
serviceAccountName: clue-elasticsearch-coordinating
...
clue, clue-elasticsearch-coordinating-crt, Secret (v1) has changed:
...
name: clue-elasticsearch-coordinating-crt
namespace: clue
data:
- ca.crt: '-------- # (1147 bytes)'
- tls.crt: '-------- # (1590 bytes)'
- tls.key: '-------- # (1679 bytes)'
+ ca.crt: '++++++++ # (1147 bytes)'
+ tls.crt: '++++++++ # (1590 bytes)'
+ tls.key: '++++++++ # (1679 bytes)'
type: kubernetes.io/tls
clue, clue-elasticsearch-data, StatefulSet (apps) has changed:
...
## Istio Labels: https://istio.io/docs/ops/deployment/requirements/
app: data
annotations:
- checksum/tls: 3cec91754cb7d9e1b8942941ba7885f20a604e0fef9c0200e569aaa46aca4b76
+ checksum/tls: c27f6015bf1a57310ca320b54c9f704236d12225f76bee2ff6c0074c58acf277
spec:
serviceAccountName: clue-elasticsearch-data
...
clue, clue-elasticsearch-data-crt, Secret (v1) has changed:
...
name: clue-elasticsearch-data-crt
namespace: clue
data:
- ca.crt: '-------- # (1147 bytes)'
- tls.crt: '-------- # (1432 bytes)'
- tls.key: '-------- # (1679 bytes)'
+ ca.crt: '++++++++ # (1147 bytes)'
+ tls.crt: '++++++++ # (1432 bytes)'
+ tls.key: '++++++++ # (1675 bytes)'
type: kubernetes.io/tls
clue, clue-elasticsearch-ingest, StatefulSet (apps) has changed:
...
## Istio Labels: https://istio.io/docs/ops/deployment/requirements/
app: ingest
annotations:
- checksum/tls: 3cec91754cb7d9e1b8942941ba7885f20a604e0fef9c0200e569aaa46aca4b76
+ checksum/tls: 82df1f98f3aa097dcf3e0c69bf7a3265b6c585180716596b12967300a389ef71
spec:
serviceAccountName: clue-elasticsearch-ingest
...
clue, clue-elasticsearch-ingest-crt, Secret (v1) has changed:
...
name: clue-elasticsearch-ingest-crt
namespace: clue
data:
- ca.crt: '-------- # (1147 bytes)'
- tls.crt: '-------- # (1444 bytes)'
- tls.key: '-------- # (1679 bytes)'
+ ca.crt: '++++++++ # (1147 bytes)'
+ tls.crt: '++++++++ # (1444 bytes)'
+ tls.key: '++++++++ # (1679 bytes)'
type: kubernetes.io/tls
clue, clue-elasticsearch-master, StatefulSet (apps) has changed:
...
## Istio Labels: https://istio.io/docs/ops/deployment/requirements/
app: master
annotations:
- checksum/tls: 3cec91754cb7d9e1b8942941ba7885f20a604e0fef9c0200e569aaa46aca4b76
+ checksum/tls: efbcb4453b92715929edd33d2ba61882ef7bfde053056c0f3d794c51a01b8364
spec:
serviceAccountName: clue-elasticsearch-master
...
clue, clue-elasticsearch-master-crt, Secret (v1) has changed:
...
name: clue-elasticsearch-master-crt
namespace: clue
data:
- ca.crt: '-------- # (1147 bytes)'
- tls.crt: '-------- # (1444 bytes)'
- tls.key: '-------- # (1675 bytes)'
+ ca.crt: '++++++++ # (1147 bytes)'
+ tls.crt: '++++++++ # (1444 bytes)'
+ tls.key: '++++++++ # (1675 bytes)'
type: kubernetes.io/tls
clue, tree-viewer, Deployment (apps) has changed:
...
null
containers:
- name: tree-viewer
- image: "tree-viewer-plugin:develop"
+ image: "tree-viewer-plugin:0.12.2_main"
imagePullPolicy: "Always"
ports:
- containerPort: 5000
Interprétation des résultats du diff¶
La section la plus importante à examiner dans la sortie du diff est la partie finale montrant les modifications réelles
du déploiement. Dans l'exemple ci-dessus, notez le changement de balise d'image de develop à 0.12.2_main pour le
déploiement tree-viewer. Cela indique que seul le pod spécifié est mis à jour, ce qui est le comportement attendu
pour les déploiements de plugins.
Toutes les autres modifications affichées dans le diff (en particulier les rotations de certificats TLS pour les composants Elasticsearch) sont des mises à jour d'infrastructure de routine et ne nécessitent pas d'intervention.