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"
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 listretourne les infos - Réseau externe configuré pour les clusters