Prise en main et premiers pas
Nœuds Kubernetes
Les nœuds du cluster sont répartis en deux catégories :
- Les masters : au nombre de trois pour assurer une haute disponibilité, ils pilotent le cluster. Ils sont exclusivement dédiés à la gestion du cluster et n'exécutent que les conteneurs nécessaires à son fonctionnement.
- Les workers : leur nombre est adapté aux besoins de vos applications. Ils exécutent vos conteneurs ainsi que quelques conteneurs système (fournisseurs de stockage,
Ingress, monitoring, etc.).
Au-delà des nœuds, le cluster propose également des services de stockage et d'accessibilité réseau.
Services de stockage
Le cluster met à votre disposition plusieurs StorageClass permettant d'assurer un stockage persistant avec différentes politiques de rétention.
Ces classes de stockage vous permettent de provisionner à la demande des PersistentVolumes pour vos applications.
StorageClass | Type | Rétention | Cas d'usage |
|---|---|---|---|
managed-nfs-storage | NFS | Delete | Stockage temporaire supprimé automatiquement avec le PVC (bases de données de test, cache, etc.) |
managed-nfs-storage-retain | NFS | Retain | Stockage persistant conservé après suppression du PVC (données de production, sauvegardes, etc.) |
Pour plus de détails, consultez la documentation Stockage.
Exposition des applications
Le cluster expose vos applications au monde extérieur grâce à des contrôleurs d'Ingress basés sur HAProxy qui routent le trafic HTTP et HTTPS vers vos conteneurs.
Accès HTTP/HTTPS
Deux points d'entrée réseau sont disponibles selon vos besoins :
| Type | Accessibilité | Usage recommandé |
|---|---|---|
| Public | Internet | Applications destinées au grand public, sites web de production, APIs publiques |
| Privé | VPN uniquement | Environnements de test, back-offices, consoles d'administration, outils internes |
Routage TCP/UDP
Il est également possible, sur demande, de mettre en place un routage TCP/UDP direct vers vos workloads pour des protocoles non-HTTP (bases de données, services custom, etc.), sous la forme de services de type LoadBalancer.
Pour plus de détails, consultez la documentation Réseau.
Services annexes
Registry OCI
SdV vous met à disposition une registry OCI lors de la livraison de votre cluster Kubernetes.
Référez-vous à la documentation dédiée.
Collecte et centralisation des logs
SdV propose plusieurs options pour collecter et centraliser les logs de vos applications déployées dans ses clusters Kubernetes :
| Destination | Description | Cas d'usage |
|---|---|---|
| Buckets S3 | Stockage objet pour archivage long terme | Conformité, audit, analyse différée |
| Elasticsearch | Indexation et recherche en temps réel | Debugging, monitoring, dashboards Kibana |
| Services externes | Routage TCP vers des services tiers (Logstash, Splunk, etc.) | Intégration avec infrastructure existante |
Pour plus de détails, consultez la documentation Logs.
Monitoring / Alerting
Chaque cluster Kubernetes SdV est livré avec une solution de monitoring complète et opérationnelle dès sa mise en service. Cette infrastructure de supervision repose sur des outils standards de l'écosystème Kubernetes :
| Composant | Rôle et fonctionnalités |
|---|---|
| Prometheus Operator | Système de collecte, d'agrégation et de stockage des métriques issues du cluster et de vos applications. Supporte les ServiceMonitors pour un scraping automatique. |
| Grafana | Plateforme de visualisation offrant une interface web intuitive pour explorer vos métriques via des graphiques interactifs et des tableaux de bord personnalisables. |
| Dashboards préconfigurés | Ensemble de tableaux de bord prêts à l'emploi couvrant les aspects essentiels du cluster : vue d'ensemble, détail par namespace, par nœud, et par workload. |
| AlertManager | Gestionnaire d'alertes centralisant les notifications issues de Prometheus. Supporte le routage intelligent, le groupement, la déduplication et l'envoi vers multiples canaux (email, Slack, webhook, PagerDuty, etc.). |
Indicateurs disponibles
Cette stack de monitoring vous donne une visibilité complète sur :
- Ressources matérielles : consommation CPU, mémoire RAM, espace disque et I/O réseau
- Infrastructure : état de santé des nœuds (masters et workers), disponibilité et charge système
- Workloads : statut des pods, nombre de restarts, temps de réponse, erreurs applicatives
- Métriques applicatives : vous pouvez exposer vos propres métriques custom via le format Prometheus pour un monitoring spécifique à votre domaine métier
Système d'alerting
AlertManager gère de manière intelligente les alertes déclenchées par Prometheus selon plusieurs mécanismes :
- Routage intelligent : direction des alertes vers différents destinataires selon leur sévérité, leur source ou tout autre critère configurable
- Groupement : regroupement d'alertes similaires en une seule notification pour éviter la saturation
- Déduplication : suppression des alertes redondantes déjà notifiées
- Silencing : désactivation temporaire d'alertes pendant des maintenances programmées
- Canaux multiples : envoi simultané vers plusieurs systèmes (email, Slack, Microsoft Teams, webhook HTTP, PagerDuty, Opsgenie, etc.)
Pour plus de détails, consultez la documentation Monitoring.
Connexion au cluster
L'accès à l'API Kubernetes est sécurisé et s'effectue selon deux modes possibles, définis lors de la mise en place initiale du cluster.
Modes d'accès
| Mode | Description | Sécurité |
|---|---|---|
| Privé (défaut) | L'API Kubernetes est hébergée dans un réseau privé, accessible uniquement via un tunnel VPN IPsec | Isolation réseau complète + authentification K8s |
| Public (optionnel) | L'API Kubernetes est exposée sur une adresse IP publique avec filtrage par liste blanche d'adresses IP | Filtrage IP + authentification K8s |
Configuration du VPN
Pour plus d'informations, référez-vous à la documentation dédiée.
Prérequis
Lors de la livraison du cluster, SdV vous fournit un dossier contenant :
- Les paramètres de connexion VPN (adresse du serveur, certificats, clés)
- Les identifiants d'authentification
- La documentation spécifique à votre environnement
Installation du client
Un guide complet est disponible sur vpn.sdv.fr pour configurer votre client VPN selon votre système d'exploitation :
- Windows : configuration via le client VPN natif ou des solutions tierces (OpenVPN, etc.)
- macOS : configuration via les préférences système ou Tunnelblick
- Linux : configuration via NetworkManager ou en ligne de commande
- iOS/Android : applications mobiles compatibles
Validation de la connexion
Une fois le VPN actif, vous pouvez vérifier la connexion en testant l'accès à l'API Kubernetes :
# Test de connectivité vers l'API Kubernetes
kubectl cluster-info
# Affichage des nœuds du cluster
kubectl get nodesUtilisation de kubectl
Configuration initiale
Le fichier kubeconfig fourni à la livraison contient tous les éléments nécessaires pour authentifier vos requêtes :
- L'URL de l'API Kubernetes
- Les certificats d'authentification client
- Les contextes pré-configurés (production, staging, etc.)
Pour l'utiliser, placez-le dans l'emplacement standard ou référencez-le explicitement :
# Option 1 : Emplacement standard (recommandé)
mkdir -p ~/.kube
cp kube_config_rke_config.yml ~/.kube/config
# Option 2 : Variable d'environnement
export KUBECONFIG=/chemin/vers/kube_config_rke_config.yml
# Option 3 : Paramètre en ligne de commande
kubectl --kubeconfig=/chemin/vers/kube_config_rke_config.yml get podsGestion des permissions et sécurité
Bonnes pratiques de sécurité
Pour respecter le principe du moindre privilège, il est fortement recommandé de créer des identités dédiées avec des permissions limitées selon les besoins :
| Type d'identité | Usage recommandé |
|---|---|
| ServiceAccount | Pour les applications et pipelines CI/CD automatisés nécessitant un accès programmatique au cluster |
| Utilisateur RBAC | Pour les membres de l'équipe nécessitant un accès via kubectl avec des permissions spécifiques |
Exemple de configuration à portée limitée
Voici un cas d'usage typique : créer un kubeconfig pour l'application A qui :
- A des permissions en écriture uniquement sur les namespaces correspondant au pattern
app-a-* - A des permissions en lecture seule sur les autres namespaces
Étape 1 : Créer un ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: app-a-deployer
namespace: app-a-prodÉtape 2 : Définir les rôles et permissions
# Permissions en écriture sur les namespaces app-a-*
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-a-writer
namespace: app-a-prod
rules:
- apiGroups: ["", "apps", "batch"]
resources: ["pods", "deployments", "services", "configmaps", "secrets", "jobs"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]Étape 3 : Lier les rôles au ServiceAccount
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: app-a-writer-binding
namespace: app-a-prod
subjects:
- kind: ServiceAccount
name: app-a-deployer
namespace: app-a-prod
roleRef:
kind: Role
name: app-a-writer
apiGroup: rbac.authorization.k8s.ioÉtape 4 : Générer le kubeconfig dédié
Vous trouverez plus de détails ainsi qu'un script vous facilitant la génération du kubeconfig dédié dans la section RBACs.
# Récupérer le token du ServiceAccount
SECRET_NAME=$(kubectl get serviceaccount app-a-deployer -n app-a-prod -o jsonpath='{.secrets[0].name}')
TOKEN=$(kubectl get secret $SECRET_NAME -n app-a-prod -o jsonpath='{.data.token}' | base64 -d)
# Créer le fichier kubeconfig
kubectl config set-cluster mon-cluster --server=https://api.cluster.example.com:6443 --kubeconfig=kubeconfig-app-a
kubectl config set-credentials app-a-deployer --token=$TOKEN --kubeconfig=kubeconfig-app-a
kubectl config set-context app-a --cluster=mon-cluster --user=app-a-deployer --kubeconfig=kubeconfig-app-a
kubectl config use-context app-a --kubeconfig=kubeconfig-app-aCommandes essentielles
Voici quelques commandes de base pour débuter avec votre cluster :
# Lister les namespaces
kubectl get namespaces
# Lister les pods d'un namespace
kubectl get pods -n <namespace>
# Obtenir les détails d'un pod
kubectl describe pod <pod-name> -n <namespace>
# Consulter les logs d'un conteneur
kubectl logs <pod-name> -n <namespace>
# Exécuter une commande dans un pod
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash