Applications
Présente tous nos déploiements que l’on héberge
Application existantes
Système
ArgoCD
ArgoCD est notre système de GitOps. Il s’occupe de déployer et synchronizer toutes les ressources YAML dans notre repértoire Plateforme-Cedille
. Pour le faire, on utiliser Kustomize pour regrouper toutes les ressources de type Application
dans le dossier /apps/argo-apps/
.
Voici un apercu visuel de cette structure:
TODO: Insérer graphique.
Configuration
Permissions RBAC La configuration RBAC (Role-Based Access Control) dans ArgoCD permet de définir des politiques de sécurité spécifiques pour différents utilisateurs et groupes. Dans notre cas, nous avons défini des rôles au sein de notre organisation Cedille qui correspondent aux différents niveaux d’accès nécessaires.
Les opérateurs (role:org-operators), qui sont membres du groupe ClubCedille:SRE, ont les permissions suivantes :
Obtenir des informations sur les clusters, certificats et dépôts (repositories).
Synchroniser, créer et supprimer les applications.
Lire, créer, mettre à jour et supprimer les clés GPG.
Ces permissions sont configurées via les lignes commençant par p dans le fichier system/argocd/argocd-values.yaml
sous policy.csv
. Le * indique que l’action est autorisée pour toutes les instances de la ressource spécifiée.
Les relations entre les utilisateurs/groupes GitHub et les rôles ArgoCD sont définies par les lignes commençant par g. Par exemple, tous les membres du groupe ClubCedille:SRE sur GitHub sont assignés au rôle role:org-operators dans ArgoCD et ClubCedille:Exec sont assignés au rôle admin.
Intégration SSO avec GitHub ArgoCD est configuré pour utiliser OAuth2 de GitHub comme fournisseur d’authentification. Cela permet aux membres de notre organisation GitHub de se connecter à ArgoCD avec leurs identifiants GitHub.
Ingress - Contour
Contour est une solution d’Ingress Controller pour Kubernetes. Elle utilise le serveur proxy Envoy comme back-end.
Configuration
Le service proxy de Envoy à été configuré avec un Nodeport pour diriger le traffic externe vers contour qui achemine ensuite les requêtes vers les services dédiés.
Tester
Commencer par déployer une application web comme httpbin. À partir du repertoire du projet :
kubectl apply -f apps/testing/httpbin.yaml
Vérifier ensuite que les 3 pods arrivent à un status Running:
kubectl get po,svc,ing -l app=httpbin
Afin d’utiliser Contour et Envoy, on va utiliser la fonction kubectl port-foward
pour diriger le traffic vers envoy :
kubectl -n projectcontour port-forward service/envoy 8888:80
Puis visiter http://local.projectcontour.io:8888/. Pour notre environnement de production, on utiliserait l’adresse du service de Envoy.
Pour plus d’informations sur Contour, consultez la documentation officielle.
Kubevirt
KubeVirt étend les fonctionnalités de Kubernetes en ajoutant des workloads de machines virtuelles à côté des conteneurs.
Configuration
KubeVirt est configuré pour permettre l’exécution et la gestion de machines virtuelles au sein du cluster Kubernetes. Il est nécessaire d’avoir krew installé.
Tester
Pour tester une machine virtuelle Ubuntu, exécutez cette commande:
kubectl virt vnc ubuntu-vm -n vms
Containerized data importer (CDI)
Pour créer votre propre VM à partir d’un ISO, vous devez utiliser le CDI de Kubevirt qui est déjà installé sur notre cluster.
Pour ce faire, créez un PVC (dans cette situation, l’iso d’ubuntu 22.04.3 va être importé dans le PVC):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: iso-ubuntu-20-04
namespace: vms
labels:
app: containerized-data-importer
annotations:
cdi.kubevirt.io/storage.import.endpoint: "https://releases.ubuntu.com/jammy/ubuntu-22.04.3-desktop-amd64.iso" # Required. Format: (http||s3)://www.myUrl.com/path/of/data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 6Gi
Une fois les changements appliqués, un pod sera créé dans le namespace respectif. Dans cette situation, le pod sera créé dans vms. Ce pod permet de voir la progression de l’installation de l’ISO dans le PVC. Pour voir le progrès:
kubectl logs <nom-du-pod> -n vms -f
Lorsque le téléchargement est terminé, vous pouvez créer votre vm basée sur l’ISO que vous venez de télécharger.
Grafana
Grafana est une plateforme d’analyse et de visualisation de données pour la surveillance des systèmes informatiques.
Configuration
Grafana a été configuré pour collecter, analyser et visualiser les métriques, les logs et les traces des applications de notre infrastructure.
Tester
Visiter https://grafana.omni.cedille.club pour voir ce qui a été fait.
Clickhouse
Clickhouse est un système de gestion de base de données analytique orienté colonnes, optimisé pour les requêtes rapides.
Configuration
Clickhouse est configuré pour collecter et stocker les métriques ainsi que les journaux (logs) provenant d’OpenTelemetry, contribuant directement à une meilleure observabilité. L’intégration avec Grafana, permet d’exploiter ces données à travers des tableaux de bord interactifs pour un suivi précis des systèmes.
Tester
Rendez-vous sur https://grafana.omni.cedille.club. Laissez l’onglet ouvert.
Créez les PV et le déploiement d’un simple serveur clickhouse (si ce n’est pas déjà fait. Pour verifier kubectl get all -n clickhouse-system
):
kubectl apply -f apps/samples/clickhouse/pv.yml -n clickhouse-system &&
kubectl apply -f apps/samples/clickhouse/simple.yml -n clickhouse-system
Ensuite, faites un port-forward et tester la connection sur http://localhost:9000/:
kubectl port-forward svc/chi-simple-example-deployment-pv-1-1 9000:9000 -n clickhouse-system # Garder la connection ouverte
Installer le cli de clickhouse et connectez-vous au serveur pour créer une simple table users
:
clickhouse-client -h 127.0.0.1 --port 9000 --user default --password <votre-password>
Créer la table users qui va accepter le contenu de script.py
CREATE TABLE users (
id Int32,
name String,
email String,
preferred_number Int32
) ENGINE = MergeTree()
ORDER BY id;
Ensuite, insérer des données en executant le script:
python3 script.py
Par la suite, il sera possible de voir les changements en faisant un SELECT * from users;
Service Mesh - Kuma
Kuma est une plateforme de gestion de services (Service Mesh) conçue pour le microservice et l’orchestration de réseaux.
Configuration
Kuma est configuré pour orchestrer, sécuriser et observer les communications entre les services du cluster Kubernetes. Il y a uniquement un “meshes” qui a été configurer pour le moment (defaut).
Tester
Commencez par déployer un exemple de service:
kubectl apply -f apps/samples/kuma-demo/demo.yaml -n kuma-demo &&
kubectl apply -f apps/samples/kuma-demo/demo-v2.yaml -n kuma-demo # Permet d'avoir un UI
Ensuite aller visiter l’application déployée:
kubectl port-forward svc/demo-app 5000:5000 -n kuma-demo
Rendez-vous sur http://localhost:5000/.
Finalement, analysez le comportement de Kuma:
kubectl port-forward svc/kuma-control-plane -n kuma-system 5681:5681
Rendez-vous sur http://localhost:5681/gui/.
Autres solutions considérées
Linkerd.
Problème: Complexité d’intégration ou de configuration. Voir https://github.com/linkerd/linkerd2/issues/11156
Workloads
apps/sample/kustomize-example-app
Application qui démontre la structure de base a prendre pour déployer une nouvelle application avec Kustomize avec des environments prod et staging.
Pour plus de détails, voir: Déployer des applications
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
Dernière modification November 7, 2023: cleanup (a903e39)