Skip to content

Magnum - Container Infrastructure

Introduction

Magnum est le service OpenStack Container-as-a-Service (CaaS). Il permet de déployer des clusters Kubernetes, Docker Swarm, ou Mesos de manière déclarative, avec intégration native des ressources OpenStack (réseaux, volumes, load balancers).

Prérequis

  • OpenStack fonctionnel avec Neutron, Nova, Cinder, Heat, Octavia
  • Phase 5 - Haute Disponibilité
  • Images COE (Container Orchestration Engine) disponibles

Points à apprendre

Architecture Magnum

graph TB
    user[Cloud User<br/>Déploie clusters K8s]

    subgraph magnum[Magnum Service]
        api[Magnum API<br/>Python/WSGI<br/>REST API Port 9511]
        conductor[Magnum Conductor<br/>Python<br/>Orchestration via Heat]
    end

    subgraph openstack[OpenStack Services]
        heat[Heat<br/>Orchestration Stacks]
        nova[Nova<br/>VMs]
        neutron[Neutron<br/>Networks]
        cinder[Cinder<br/>Volumes]
        octavia[Octavia<br/>Load Balancers]
        glance[Glance<br/>Images COE]
    end

    subgraph cluster[Kubernetes Cluster]
        masters[Master Nodes<br/>K8s Control Plane]
        workers[Worker Nodes<br/>K8s Workloads]
    end

    user -->|Create cluster API| api
    api -->|Orchestrate RPC| conductor
    conductor -->|Deploy stack API| heat
    heat -->|Create VMs| nova
    heat -->|Create networks| neutron
    heat -->|Create volumes| cinder
    heat -->|Create LBs| octavia
    heat -->|Bootstrap| masters
    heat -->|Bootstrap| workers

Installation avec Kolla

# /etc/kolla/globals.yml

enable_magnum: "yes"
enable_heat: "yes"      # Requis
enable_octavia: "yes"   # Recommandé pour LB

# Image par défaut pour les clusters
# magnum_default_coe_image: "fedora-coreos-38"
# Déployer Magnum
kolla-ansible -i ~/multinode deploy --tags magnum,heat

Préparation de l'environnement

# Télécharger l'image Fedora CoreOS pour Kubernetes
curl -O https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/38.20231002.3.0/x86_64/fedora-coreos-38.20231002.3.0-openstack.x86_64.qcow2.xz

# Décompresser
xz -d fedora-coreos-38.20231002.3.0-openstack.x86_64.qcow2.xz

# Créer l'image dans Glance avec les propriétés requises
openstack image create fedora-coreos-38 \
    --file fedora-coreos-38.20231002.3.0-openstack.x86_64.qcow2 \
    --disk-format qcow2 \
    --container-format bare \
    --public \
    --property os_distro='fedora-coreos' \
    --property os_admin_user='core'

# Vérifier les propriétés
openstack image show fedora-coreos-38 -c properties

Configuration Magnum

# /etc/kolla/config/magnum/magnum.conf

[DEFAULT]
# Timeout pour la création de cluster
cluster_heat_create_timeout = 60  # minutes

[certificates]
# Backend pour les certificats (optionnel: barbican)
cert_manager_type = local

[cinder_client]
# Région par défaut
region_name = RegionOne

[trust]
# Délégation de token pour les clusters
trustee_domain_name = magnum
trustee_domain_admin_name = magnum_domain_admin
trustee_domain_admin_password = {{ magnum_keystone_password }}

[cluster_template]
# Réseau externe par défaut
external_network = external

Création du domaine Magnum (trustee)

# Magnum nécessite un domaine spécial pour la délégation de token
# Kolla le crée automatiquement, mais manuellement:

openstack domain create magnum

openstack user create magnum_domain_admin \
    --domain magnum \
    --password <password>

openstack role add admin \
    --domain magnum \
    --user magnum_domain_admin

# Configurer dans magnum.conf

Vérification du service

# Vérifier l'enregistrement
openstack service list | grep magnum

# Vérifier l'endpoint
openstack endpoint list --service magnum

# Tester l'API
openstack coe service list

# Lister les cluster templates existants
openstack coe cluster template list

# Lister les clusters
openstack coe cluster list

Diagramme de création de cluster

sequenceDiagram
    actor User
    participant API as Magnum API
    participant Conductor as Magnum Conductor
    participant Heat
    participant KS as Keystone
    participant Nova
    participant Neutron
    participant Octavia

    User->>API: POST /clusters
    API->>KS: Create trust
    KS-->>API: Trust ID
    API->>Conductor: Create cluster (RPC)

    Conductor->>Heat: Create stack (HOT template)
    Heat->>Neutron: Create network, subnet, router
    Heat->>Nova: Create master VMs
    Heat->>Octavia: Create LB for API server

    loop Bootstrap
        Heat->>Nova: cloud-init: install k8s
    end

    Heat-->>Conductor: Stack complete
    Conductor->>API: Cluster ACTIVE
    API-->>User: Cluster ready

Ressources créées par Magnum

Ressource Description
VMs Master nodes + Worker nodes
Network Réseau privé pour le cluster
Subnet Sous-réseau avec DHCP
Router Connexion vers external
Security Groups Règles master/worker/etcd
Load Balancer LB pour Kubernetes API
Volumes etcd storage (optionnel)

Exemples pratiques

Lister les flavors disponibles

# Recommandations minimum:
# Master: 2 vCPU, 4GB RAM (m1.medium+)
# Worker: 2 vCPU, 2GB RAM (m1.small+)

openstack flavor list

# Créer un flavor pour K8s si nécessaire
openstack flavor create k8s.master \
    --vcpus 2 --ram 4096 --disk 40

openstack flavor create k8s.worker \
    --vcpus 4 --ram 8192 --disk 80

Vérifier l'image COE

# L'image doit avoir les propriétés:
openstack image show fedora-coreos-38 -f yaml

# Propriétés requises:
# - os_distro: fedora-coreos | ubuntu | etc.
# - os_admin_user: core | ubuntu | etc.

Debugging

# Logs Magnum API
docker logs magnum_api

# Logs Conductor
docker logs magnum_conductor

# Voir les stacks Heat
openstack stack list

# Détails d'un stack en erreur
openstack stack show <stack-id>
openstack stack failures list <stack-id>
openstack stack event list <stack-id> --nested-depth 3

Ressources

Checkpoint

  • Magnum API accessible (port 9511)
  • Image Fedora CoreOS uploadée avec bonnes propriétés
  • Domaine magnum créé (trustee)
  • Heat et Octavia fonctionnels
  • openstack coe service list retourne les infos
  • Réseau externe configuré pour les clusters