Cluster Templates Magnum¶
Introduction¶
Les Cluster Templates définissent les paramètres de déploiement des clusters Kubernetes : image, flavor, réseau, drivers, add-ons. Ils servent de "blueprint" réutilisable pour créer des clusters cohérents.
Prérequis¶
- Magnum installé
- Image COE disponible
- Réseau externe configuré
Points à apprendre¶
Structure d'un Cluster Template¶
graph TB
subgraph template[Cluster Template]
image[Image<br/>Fedora CoreOS<br/>Ubuntu, etc.]
coe[COE<br/>kubernetes<br/>swarm, mesos]
flavor[Flavors<br/>Master + Worker<br/>Flavors]
network[Network Driver<br/>flannel, calico<br/>cilium]
volume[Volume Driver<br/>cinder]
labels[Labels<br/>Options avancées<br/>Add-ons]
end
external[External Network<br/>Floating IPs]
dns[DNS<br/>CoreDNS/kube-dns]
template -->|Connect| external
labels -->|Configure| dns
Création d'un template basique¶
# Template Kubernetes basique
openstack coe cluster template create k8s-small \
--image fedora-coreos-38 \
--external-network external \
--dns-nameserver 8.8.8.8 \
--master-flavor m1.medium \
--flavor m1.small \
--coe kubernetes \
--docker-volume-size 50 \
--network-driver flannel \
--volume-driver cinder \
--master-lb-enabled \
--floating-ip-enabled
Paramètres du template¶
| Paramètre | Description | Valeur recommandée |
|---|---|---|
--image |
Image COE | fedora-coreos-38 |
--coe |
Container Orchestration Engine | kubernetes |
--master-flavor |
Flavor pour masters | m1.medium+ |
--flavor |
Flavor pour workers | m1.small+ |
--external-network |
Réseau pour floating IPs | external |
--network-driver |
CNI plugin | flannel, calico |
--volume-driver |
CSI driver | cinder |
--docker-volume-size |
Taille volume Docker (GB) | 50 |
--master-lb-enabled |
Load Balancer pour API | true |
--floating-ip-enabled |
Floating IPs sur nodes | true/false |
Labels avancés¶
Les labels permettent de configurer des options avancées :
# Template avec labels avancés
openstack coe cluster template create k8s-production \
--image fedora-coreos-38 \
--external-network external \
--dns-nameserver 8.8.8.8 \
--master-flavor k8s.master \
--flavor k8s.worker \
--coe kubernetes \
--docker-volume-size 100 \
--network-driver calico \
--volume-driver cinder \
--master-lb-enabled \
--labels \
kube_tag=v1.28.4,\
container_runtime=containerd,\
cloud_provider_enabled=true,\
cinder_csi_enabled=true,\
auto_scaling_enabled=true,\
auto_healing_enabled=true,\
monitoring_enabled=true,\
master_lb_floating_ip_enabled=true,\
ingress_controller=nginx,\
metrics_server_enabled=true,\
npd_enabled=true
Labels courants¶
| Label | Description | Valeurs |
|---|---|---|
kube_tag |
Version Kubernetes | v1.28.4 |
container_runtime |
Runtime conteneur | containerd, cri-o |
cloud_provider_enabled |
Intégration OpenStack | true |
cinder_csi_enabled |
CSI Cinder pour PV | true |
auto_scaling_enabled |
Cluster Autoscaler | true |
auto_healing_enabled |
Auto-healing nodes | true |
ingress_controller |
Ingress par défaut | nginx, traefik |
metrics_server_enabled |
Metrics Server | true |
monitoring_enabled |
Prometheus/Grafana | true |
npd_enabled |
Node Problem Detector | true |
Templates pour différents cas d'usage¶
# Template développement (économique)
openstack coe cluster template create k8s-dev \
--image fedora-coreos-38 \
--external-network external \
--dns-nameserver 8.8.8.8 \
--master-flavor m1.small \
--flavor m1.small \
--coe kubernetes \
--docker-volume-size 20 \
--network-driver flannel \
--labels "kube_tag=v1.28.4,container_runtime=containerd"
# Template staging (équilibré)
openstack coe cluster template create k8s-staging \
--image fedora-coreos-38 \
--external-network external \
--dns-nameserver 8.8.8.8 \
--master-flavor m1.medium \
--flavor m1.medium \
--coe kubernetes \
--docker-volume-size 50 \
--network-driver calico \
--volume-driver cinder \
--master-lb-enabled \
--labels "kube_tag=v1.28.4,cinder_csi_enabled=true,metrics_server_enabled=true"
# Template production (haute disponibilité)
openstack coe cluster template create k8s-prod \
--image fedora-coreos-38 \
--external-network external \
--dns-nameserver 10.0.0.5 \
--master-flavor k8s.master \
--flavor k8s.worker \
--coe kubernetes \
--docker-volume-size 100 \
--network-driver calico \
--volume-driver cinder \
--master-lb-enabled \
--labels "\
kube_tag=v1.28.4,\
container_runtime=containerd,\
cloud_provider_enabled=true,\
cinder_csi_enabled=true,\
auto_scaling_enabled=true,\
auto_healing_enabled=true,\
metrics_server_enabled=true,\
ingress_controller=nginx,\
master_lb_floating_ip_enabled=true,\
calico_ipv4pool=192.168.0.0/16"
Diagramme comparatif templates¶
graph TB
subgraph dev[k8s-dev]
direction TB
dm[1 Master m1.small]
dw[1-2 Workers m1.small]
dn[Flannel CNI]
dv[20GB volumes]
devnote[Coût minimal<br/>Pas de HA]
end
subgraph staging[k8s-staging]
direction TB
sm[1 Master m1.medium]
sw[2-3 Workers m1.medium]
sn[Calico CNI]
sv[50GB volumes]
sl[LB + Cinder CSI]
stagingnote[Équilibre coût/perf<br/>Test de production]
end
subgraph prod[k8s-prod]
direction TB
pm[3 Masters k8s.master]
pw[3+ Workers k8s.worker]
pn[Calico CNI]
pv[100GB volumes]
pl[LB + CSI + Autoscaling]
ph[Auto-healing]
prodnote[Production ready<br/>HA complète]
end
style dev fill:#add8e6
style staging fill:#ffffe0
style prod fill:#90ee90
Gestion des templates¶
# Lister les templates
openstack coe cluster template list
# Détails d'un template
openstack coe cluster template show k8s-prod
# Mettre à jour un template (attention: n'affecte pas les clusters existants)
openstack coe cluster template update k8s-dev \
--replace docker_volume_size=30
# Supprimer un template (impossible si des clusters l'utilisent)
openstack coe cluster template delete k8s-dev
# Exporter un template (pour backup/partage)
openstack coe cluster template show k8s-prod -f yaml > k8s-prod-template.yaml
Configuration réseau avancée¶
# Template avec réseau existant
openstack coe cluster template create k8s-existing-net \
--image fedora-coreos-38 \
--external-network external \
--fixed-network my-existing-network \
--fixed-subnet my-existing-subnet \
--master-flavor m1.medium \
--flavor m1.small \
--coe kubernetes \
--network-driver calico
# Template avec CIDR personnalisé pour pods
openstack coe cluster template create k8s-custom-cidr \
--image fedora-coreos-38 \
--external-network external \
--master-flavor m1.medium \
--flavor m1.small \
--coe kubernetes \
--network-driver calico \
--labels "calico_ipv4pool=10.100.0.0/16"
Exemples pratiques¶
Vérification avant création de cluster¶
#!/bin/bash
# check-template.sh
TEMPLATE=$1
echo "=== Template: $TEMPLATE ==="
openstack coe cluster template show $TEMPLATE -f yaml
echo -e "\n=== Checking dependencies ==="
# Vérifier l'image
IMAGE=$(openstack coe cluster template show $TEMPLATE -f value -c image_id)
openstack image show $IMAGE -c name -c status || echo "ERROR: Image not found"
# Vérifier le réseau externe
EXT_NET=$(openstack coe cluster template show $TEMPLATE -f value -c external_network_id)
openstack network show $EXT_NET -c name -c status || echo "ERROR: External network not found"
# Vérifier les flavors
MASTER_FLAVOR=$(openstack coe cluster template show $TEMPLATE -f value -c master_flavor_id)
WORKER_FLAVOR=$(openstack coe cluster template show $TEMPLATE -f value -c flavor_id)
openstack flavor show $MASTER_FLAVOR || echo "ERROR: Master flavor not found"
openstack flavor show $WORKER_FLAVOR || echo "ERROR: Worker flavor not found"
echo -e "\n=== Template ready for cluster creation ==="
Template avec TLS personnalisé¶
# Utiliser des certificats externes (Vault, etc.)
openstack coe cluster template create k8s-external-tls \
--image fedora-coreos-38 \
--external-network external \
--master-flavor m1.medium \
--flavor m1.small \
--coe kubernetes \
--tls-disabled \
--labels "tls_disabled=true"
# Note: Non recommandé en production sans TLS externe
Ressources¶
Checkpoint¶
- Template k8s-dev créé (environnement développement)
- Template k8s-staging créé (environnement staging)
- Template k8s-prod créé (production avec HA)
- Labels correctement configurés
- Dependencies vérifiées (image, network, flavors)
- Documentation des templates à jour