Aller au contenu principal

Sources (GitRepository, HelmRepository)


Table des matières

  1. Concept de Source
  2. GitRepository
  3. HelmRepository
  4. OCIRepository
  5. Bucket (S3)
  6. Exercices pratiques

1 - Concept de Source

Qu'est-ce qu'une Source ?

Une Source définit d'où Flux récupère les configurations à déployer.

Types de sources

TypeDescriptionCas d'usage
GitRepositoryRepo GitManifests YAML, Kustomize
HelmRepositoryRepo Helm HTTPCharts Helm
OCIRepositoryRegistry OCICharts OCI, artifacts
BucketS3, GCS, MinioArtifacts stockés

🔝 Retour à la table des matières


2 - GitRepository

Repository public

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 1m
url: https://github.com/stefanprodan/podinfo
ref:
branch: master

Repository privé (HTTPS)

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-private-repo
namespace: flux-system
spec:
interval: 1m
url: https://github.com/my-org/private-repo
ref:
branch: main
secretRef:
name: git-credentials
---
apiVersion: v1
kind: Secret
metadata:
name: git-credentials
namespace: flux-system
type: Opaque
stringData:
username: git
password: <github-token>

Repository privé (SSH)

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-private-repo
namespace: flux-system
spec:
interval: 1m
url: ssh://[email protected]/my-org/private-repo.git
ref:
branch: main
secretRef:
name: ssh-credentials
---
apiVersion: v1
kind: Secret
metadata:
name: ssh-credentials
namespace: flux-system
type: Opaque
stringData:
identity: |
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
known_hosts: |
github.com ssh-rsa AAAA...

Référencer un tag ou commit

spec:
ref:
# Par branche
branch: main

# Par tag
tag: v1.2.3

# Par semver
semver: ">=1.0.0 <2.0.0"

# Par commit
commit: abc123def456

Via CLI

# Créer un GitRepository
flux create source git podinfo \
--url=https://github.com/stefanprodan/podinfo \
--branch=master \
--interval=1m

# Avec authentication
flux create source git private-repo \
--url=ssh://[email protected]/my-org/repo.git \
--branch=main \
--secret-ref=ssh-credentials

🔝 Retour à la table des matières


3 - HelmRepository

Repository public

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: bitnami
namespace: flux-system
spec:
interval: 1h
url: https://charts.bitnami.com/bitnami

Repository privé

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: private-charts
namespace: flux-system
spec:
interval: 1h
url: https://charts.example.com
secretRef:
name: helm-credentials
---
apiVersion: v1
kind: Secret
metadata:
name: helm-credentials
namespace: flux-system
type: Opaque
stringData:
username: admin
password: <password>

Via CLI

flux create source helm bitnami \
--url=https://charts.bitnami.com/bitnami \
--interval=1h

🔝 Retour à la table des matières


4 - OCIRepository

Charts OCI

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 5m
url: oci://ghcr.io/stefanprodan/charts/podinfo
ref:
tag: 6.5.0

Avec authentification

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
name: private-chart
namespace: flux-system
spec:
interval: 5m
url: oci://registry.example.com/charts/myapp
ref:
semver: ">=1.0.0"
secretRef:
name: oci-credentials
---
apiVersion: v1
kind: Secret
metadata:
name: oci-credentials
namespace: flux-system
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: <base64-encoded-docker-config>

🔝 Retour à la table des matières


5 - Bucket (S3)

AWS S3

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: Bucket
metadata:
name: artifacts
namespace: flux-system
spec:
interval: 5m
provider: aws
bucketName: my-artifacts-bucket
region: us-east-1
secretRef:
name: aws-credentials

Minio

apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: Bucket
metadata:
name: minio-artifacts
namespace: flux-system
spec:
interval: 5m
provider: generic
endpoint: minio.example.com
bucketName: flux-artifacts
secretRef:
name: minio-credentials

🔝 Retour à la table des matières


6 - Exercices pratiques

Exercice 1 : Créer un GitRepository

# Via CLI
flux create source git demo-app \
--url=https://github.com/stefanprodan/podinfo \
--branch=master \
--interval=1m

# Vérifier
flux get sources git

Exercice 2 : GitRepository YAML

# demo-source.yaml
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: demo-app
namespace: flux-system
spec:
interval: 1m
url: https://github.com/stefanprodan/podinfo
ref:
branch: master
kubectl apply -f demo-source.yaml
flux get sources git

Quiz

Q1. Quelle est la différence entre GitRepository et HelmRepository ?

Réponse
  • GitRepository : Récupère des fichiers depuis un repo Git (YAML, Kustomize, charts locaux)
  • HelmRepository : Récupère des charts depuis un repo Helm HTTP (index.yaml)

GitRepository est plus flexible, HelmRepository est spécifique aux charts Helm.

Q2. Comment référencer un tag spécifique dans un GitRepository ?

Réponse
spec:
ref:
tag: v1.2.3

Ou avec semver pour le dernier tag compatible :

spec:
ref:
semver: ">=1.0.0 <2.0.0"

🔝 Retour à la table des matières


Points clés à retenir

  • Source = définition de l'origine des configs
  • GitRepository : repos Git (YAML, Kustomize)
  • HelmRepository : repos Helm HTTP
  • OCIRepository : registries OCI
  • Secrets pour l'authentification
  • interval : fréquence de polling

← Chapitre précédent | Chapitre suivant : Kustomization →