1. principe
Partie 3 - Nous allons aborder dans ce billet le déploiement d'applications, manifestes, etc globalement sur les clusters que nous avons déployés avec notre usine. Nous allons utiliser pour cela non pas ArgoCD mais Projectsveltos. Comme ca on fourni une infrastructure de middleware gérées de manière centralisée.
Le projet Projectsveltos est un projet open source qui simplifie le déploiement et la gestion des add-ons et des applications Kubernetes sur plusieurs clusters. Il fonctionne dans le cluster de gestion et peut déployer et gérer de manière programmatique des add-ons et des applications sur n'importe quel cluster de la flotte, y compris le cluster de gestion lui-même. Sveltos prend en charge une variété de formats d'add-ons, notamment les charts Helm, le YAML brut, Kustomize, Carvel ytt, Ksonnet et Jsonnet.
Les principales fonctionnalités de Projectsveltos sont les suivantes :
Déploiement automatisé : Projectsveltos peut déployer des add-ons et des applications sur plusieurs clusters en une seule commande. Gestion centralisée : Projectsveltos peut être utilisé pour gérer les add-ons et les applications sur plusieurs clusters à partir d'un seul point de contrôle. Support multi-tenant : Projectsveltos prend en charge la gestion de plusieurs add-ons et applications pour différents tenants. Projectsveltos est un outil puissant qui peut aider les organisations à simplifier et à automatiser le déploiement et la gestion des add-ons et des applications Kubernetes sur plusieurs clusters.
Projectsveltos est encore en développement, mais il a déjà été adopté par de nombreuses organisations, notamment Google, Red Hat et IBM.
Une fois déployé on peut enregistrer des cluster kubernetes dans ProjectSveltos
Une des fonctionnalités qu'on va utiliser dans notre usine à cluster est la capacité de projectsveltos a découvrir automatiquement les clusters créés par la cluster-api.
Sveltos est fourni avec une prise en charge pour découvrir automatiquement les clusters alimentés par ClusterAPI. Si Sveltos est déployé dans un cluster de gestion avec ClusterAPI (CAPI), aucune action supplémentaire n'est requise pour que Sveltos gère les add-ons sur les clusters alimentés par CAPI. Sveltos surveillera les instances "clusters.cluster.x-k8s.io" et les configurera en conséquence.
2. Installation de ProjectSveltos
2.1. Via Helm
- Vous pouvez l'installer en ligne de commande via helm.
helm repo add projectsveltos https://projectsveltos.github.io/helm-charts
helm install projectsveltos projectsveltos/projectsveltos -n projectsveltos --create-namespace
2.1. Via argoCD
- Créez dans le répertoire
argocd/applications
l'application projectsveltos
Nous allons utiliser la possibilité d'avoir plusieurs sources pour combiner tous les manifestes Sveltos (Déploiement et CR)
cat << EOF > projectsveltos-application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: projectsveltos
namespace: argocd
spec:
destination:
name: 'projectsveltos'
namespace: projectsveltos
server: 'https://kubernetes.default.svc'
sources:
- repoURL: 'https://projectsveltos.github.io/helm-charts'
path: ''
targetRevision: 0.20.2
- repoURL: 'https://github.com/herveleclerc/usine-k8s.git'
path: projectsveltos
targetRevision: HEAD
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
EOF
- Modifiez le fichier
kustomization.yaml
en ajoutant la ressourceprojectsveltos-application.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- usine-k8s-root-application.yaml
- projectsveltos-application.yaml
Mettez à jour votre repo git et regarder la magie d'opérer ;)
Sur votre cluster kubernetes de management regarder les pods déployés dans le namespace projectsveltos
❯ k get po -n projectsveltos
NAME READY STATUS RESTARTS AGE
access-manager-6d659d4f55-rfxx8 2/2 Running 1 (49m ago) 61m
addon-compliance-manager-5ff86466bf-jp2ch 2/2 Running 0 61m
addon-controller-545f756945-ccdzl 2/2 Running 1 (51m ago) 61m
classifier-manager-8c64b8454-lrgrm 2/2 Running 0 61m
event-manager-747758c768-dtn64 2/2 Running 0 61m
hc-manager-667bf4865f-qcn4f 2/2 Running 0 61m
sc-manager-685c486b94-sn4n2 2/2 Running 0 61m
shard-controller-66f9556f59-rlw58 2/2 Running 0 61m
3. Patch des custom ressource clusters
- Nous devons mettre des labels dans les
custom resources
de typeclusters
pour qu'on puisse déployer via sveltos des resources. - Nous devons rajouter un SAN supplémentaire au vcluster pour que sveltos puisse correctement piloter le cluster, sans quoi nous aurions une erreur de certificat x509.
3.1 Ajout du label
Je vais le mettre en dur dans les manifestes du chart la bonne pratique serait de le paramétrer avec une variable
- Editez le fichier
chart/templates/cluster.yaml
apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
name: {{ .Values.cluster_name }}
labels:
env: sveltos-managed # <---- Ici
spec:
controlPlaneRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha1
kind: VCluster
name: {{ .Values.cluster_name }}
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha1
kind: VCluster
name: {{ .Values.cluster_name }}
- Editez le fichier
chart/templates/vcluster.yaml
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha1
kind: VCluster
metadata:
name: {{ .Values.cluster_name }}
spec:
controlPlaneEndpoint:
host: ""
port: 0
helmRelease:
chart:
name: vcluster-k8s
repo: https://charts.loft.sh
version: 0.13.0
values: |
syncer:
extraArgs:
- --tls-san={{ .Values.cluster_fqdn }}
- --tls-san={{ .Values.cluster_name }}.{{ .Values.cluster_name }}.svc # <------ ICI
- --out-kube-config-server=https://{{ .Values.cluster_fqdn }}
ingress:
enabled: true
pathType: ImplementationSpecific
ingressClassName: nginx
host: {{ .Values.cluster_fqdn }}
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/ssl-passthrough: 'true'
nginx.ingress.kubernetes.io/ssl-redirect: 'true'
cert-manager.io/cluster-issuer: letsencrypt
kubernetesVersion: {{ .Values.k8s_version }}
- Valider et pousser vos modifications.
- Validez que vous avez bien ces modifications propagées.
4. Déploiement d'un chart Helm de manière centralisée
Prenons l'exemple de la documentation: Déployons un kyverno pour gérer de la compliance dans les clusters déployés.
Pour cela nous allons créer une Custom resource "CR" du type ClusterProfile
cat << EOF > kyverno-clusterprofile.yaml
apiVersion: config.projectsveltos.io/v1alpha1
kind: ClusterProfile
metadata:
name: kyverno
spec:
clusterSelector: env=sveltos-managed
helmCharts:
- repositoryURL: https://kyverno.github.io/kyverno/
repositoryName: kyverno
chartName: kyverno/kyverno
chartVersion: v3.0.1
releaseName: kyverno-latest
releaseNamespace: kyverno
helmChartAction: Install
Cette ressource va déployer le chart Kyverno en version 3.0.1 sur tous les clusters suivis si ils ont le label "env: sveltos-managed"
-
Mettez ce fichier dans le répertoire argocd/applications
-
Modifiez/Créer le fichier
kustomization.yaml
en ajoutant la ressourcekyverno-clusterprofile.yaml
dans le répertoire projectsveltos
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- kyverno-clusterprofile.yaml
Mettez à jour votre repo git et regarder la magie d'opérer pour la deuxième fois;)
5. Utilisation de sveltosctl
Sveltosctl est un outil en ligne de commande (CLI) qui permet de visualiser les ressources Kubernetes déployées par Sveltos, un contrôleur d'add-ons Kubernetes. Sveltosctl peut également être utilisé pour collecter des informations de support technique sur les clusters Kubernetes gérés par Sveltos.
Voici quelques-unes des fonctionnalités de sveltosctl :
- Visualisation des add-ons Kubernetes déployés par Sveltos
- Visualisation des ressources dans les clusters Kubernetes gérés
- Visualisation de l'utilisation de Sveltos
- Affichage des permissions administratives pour les clusters multi-locataires
- Configuration des niveaux de sévérité des journaux
- Affichage du résultat du profil de cluster en mode DryRun
- Collecte d'informations de support technique
Dans notre cas
❯ sveltosctl show usage
+----------------+--------------------+---------------+---------------------------+
| RESOURCE KIND | RESOURCE NAMESPACE | RESOURCE NAME | CLUSTERS |
+----------------+--------------------+---------------+---------------------------+
| ClusterProfile | | kyverno | cluster-dev0/cluster-dev0 |
| | | | cluster-dev1/cluster-dev1 |
+----------------+--------------------+---------------+---------------------------+
❯ sveltosctl show addons
+---------------------------+---------------+-----------+----------------+---------+-------------------------------+------------------+
| CLUSTER | RESOURCE TYPE | NAMESPACE | NAME | VERSION | TIME | CLUSTER PROFILES |
+---------------------------+---------------+-----------+----------------+---------+-------------------------------+------------------+
| cluster-dev0/cluster-dev0 | helm chart | kyverno | kyverno-latest | 3.0.1 | 2023-12-05 21:17:14 +0100 CET | kyverno |
| cluster-dev1/cluster-dev1 | helm chart | kyverno | kyverno-latest | 3.0.1 | 2023-12-05 21:18:24 +0100 CET | kyverno |
+---------------------------+---------------+-----------+----------------+---------+-------------------------------+------------------+
Sveltos a bien déployé kyverno sur l'ensemble des cluster ayant le label env: sveltos-managed
Maintenant vous avez toutes les clés pour Administrer de manière centralisée une flotte de cluster kubernetes, virtuels ou non :)
Découvrez les derniers articles d'alter way
- kubevpn
- Kubernetes 1.32
- re:Invent 2024 : AWS mise tout sur l'IA pour son Cloud
- OVHcloud Summit 2024 : L’innovation au cœur d’un cloud souverain et performant
- Big Data & AI Paris 2024 : L'IA au cœur de toutes les transformations.
- Un retour vers l'open-source ? Vos outils DevOps préférés et leurs equivalents open-source.