Skip to content

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

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