!

cinema front

Identité

mi id
certifications

🔍 Dossiers Classifiés 🔍

  • Blog tech dédié à eBPF et Cilium

  • Certification Cilium (CCA)

  • Provider Terraform pour déployer Cilium

  • Commits validés dans le repo officiel

  • Labs Champion

Contexte de la mission

mi briefing

511 clusters Kubernetes

Plugin CNI

cnis

Kube-Proxy

kube proxy

Cilium

👁️ Hubble

🔐 CNP & chiffrement

🧬 Service Mesh intégré

🏎️ Suppression de kube-proxy

cilium paint 2

Cilium Cluster Mesh

cilium clustermesh

2 clusters

2 cluster 1

Activation

2 cluster 2
2 cluster 3

Relier 511 clusters

Vérification de la communication

cilium paint 3

Déroulé des opérations

💰 Budget serré

🌫️ Solution Cloud

Déroulé de chaque opération

32 clusters deroule

🧗Entraînement de l’agent

mi training

Terrain d’exercice : KinD

  • Un seul serveur

  • Docker

kind logo

CI/CD : GitHub Action

github action

Infrastructure as code

iac

Pulumi

pulumi

Pulumi

kind = local.Command("kindCluster",
    create="kind create cluster --config kind.yaml --name cmesh1"
)

kind2 = local.Command("kindCluster2",
    create="kind create cluster --config kind-2.yaml --name cmesh2"
)

cmesh1_provider = cilium.Provider("cmesh1", context="kind-cmesh1", opts=pulumi.ResourceOptions(depends_on=[kind]))
cmesh2_provider = cilium.Provider("cmesh2", context="kind-cmesh2", opts=pulumi.ResourceOptions(depends_on=[kind2]))

cmesh1_cilium = cilium.Install("cmesh1Install",
    sets=[
        "cluster.name=cmesh1",
        "cluster.id=1",
        "ipam.mode=kubernetes",
    ],
    version="1.15.5",
    opts=pulumi.ResourceOptions(depends_on=[kind], providers=[cmesh1_provider]),
)

cmesh2_cilium = cilium.Install("cmesh2Install",
    sets=[
        "cluster.name=cmesh2",
        "cluster.id=2",
        "ipam.mode=kubernetes",
    ],
    version="1.15.5",
    opts=pulumi.ResourceOptions(depends_on=[kind2], providers=[cmesh2_provider]),
)

cmesh1_cmeshenable = cilium.Clustermesh("cmesh1Enable", service_type="NodePort", opts=pulumi.ResourceOptions(depends_on=[cmesh1_cilium], providers=[cmesh1_provider]))
cmesh2_cmeshenable = cilium.Clustermesh("cmesh2Enable", service_type="NodePort", opts=pulumi.ResourceOptions(depends_on=[cmesh2_cilium], providers=[cmesh2_provider]))

cilium.ClustermeshConnection("cmeshConnect", destination_context="kind-cmesh2", opts=pulumi.ResourceOptions(depends_on=[cmesh1_cmeshenable], providers=[cmesh1_provider]))

Tester les limites de KinD

15 clusters

Présentation du terrain d’action

mi action

Choix stratégique : AWS EKS

Limites imposées par AWS

service quota

Bonnes pratiques vs Réalité opérationnelle

nodepool

Architecture retenue

aws archi

Parallélisation des connexions

connection answer

32 clusters

mission failed

16 clusters

16 clusters

🚀 En route vers les 256 clusters

mi plane

Création des connexions 🧨

code cilium cli
deploy connection get 1
deploy connection get 2
deploy connection upgrade 1
deploy connection upgrade 2

Généralisation pour n clusters

  • 📡 Extraction des données (par cluster)

  • 🔧 Mise à jour de la config (par cluster)

La Pull Request

pr

🧪 32 clusters

32 clusters
ÉtapeDurée

🔧 Création connexions

5 minutes

Déploiement total

17 minutes

Parallélisation

pr 2

🧪 64 clusters

64 clusters
ClustersDéploiementConnexions

32

17 minutes

5 minutes

64

15 minutes

2 minutes

Vérification en conditions réelles

mi check

🕵️ Surveillance passive

cilium status
cilium clustermesh status
terminal cilium status

🧬 Analyse poussée

cilium status -o json
cilium clustermesh status -o json

Test de connectivité

cilium connectivity test --context cluster1 --multi-cluster cluster2
clustermesh test

Développement d’un outil de test

  • Modifier la cilium cli :

cilium connectivity test --context cluster1 --multi-cluster cluster[2-511]
  • Utiliser Terratest

Terratest

clustermesh terratest

Objectif 256 clusters

mi 256

Passage à 128 clusters

eks 128
128 clusters
ClustersDéploiementConnexions

32

17 minutes

5 minutes

64

15 minutes

2 minutes

128

19 minutes

2 minutes 30

🧨 Le mur des 256

eks 256
256 clusters
ClustersDéploiementConnexions

64

15 minutes

2 minutes

128

19 minutes

2 minutes 30

256

40 minutes

4 minutes 30

511 clusters

mi 511

Comment se détacher de la limite AWS ?

2 comptes

511 2 accounts

7 comptes

511 7 accounts

7 régions

aws map
511 7 regions
511 7 regions deployment

💰 Pricing 💰

RessourcehoraireQuantité4h

Cluster EKS

0,10 $

511

204,40 $

t4g.medium

0,0336 $

511

68,77 $

c5a.2xlarge

0,3080 $

6

7,39 $

c5a.16xlarge

2,464 $

1

9,86 $

RessourcehoraireQuantité4h

NAT Gw

0,045 $

7

1,26 $

Transit Gw

0,10 $

7

2,80 $

Transit Gw Attachment

0,50 $

13

26,00 $

Total

320,48 $

Coût 🕵️

RessourceGbQuantitéEstimation

NAT Gw

0,045 $

511

22,995 $

Transit Gw

0,05 $

7

0,35 $

tests de 2 clusters par région

Les premiers déploiements sur 511 clusters 🤞

511 terminal

Les premiers déploiement sur 511 clusters 😩

511 excel

Dernier test

qr code