Sources (GitRepository, HelmRepository)
Table des matières
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
| Type | Description | Cas d'usage |
|---|---|---|
| GitRepository | Repo Git | Manifests YAML, Kustomize |
| HelmRepository | Repo Helm HTTP | Charts Helm |
| OCIRepository | Registry OCI | Charts OCI, artifacts |
| Bucket | S3, GCS, Minio | Artifacts 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