<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Flux – announcement</title><link>https://deploy-preview-2413--fluxcd.netlify.app/tags/announcement/</link><description>Recent content in announcement on Flux</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 30 Sep 2025 06:00:00 +0000</lastBuildDate><atom:link href="https://deploy-preview-2413--fluxcd.netlify.app/tags/announcement/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: Announcing Flux 2.7 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/09/flux-v2.7.0/</link><pubDate>Tue, 30 Sep 2025 06:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/09/flux-v2.7.0/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/09/flux-v2.7.0/featured-image_hu0a3d34a1286ca95e0c20a1ae8ebfb057_608626_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.7.0" target="_blank">Flux v2.7.0&lt;/a>!
In this post, we highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Flux v2.7 marks the General Availability (GA) of the image update automation features
and comes with new APIs &lt;code>ExternalArtifact&lt;/code> and &lt;code>ArtifactGenerator&lt;/code>
for advanced source
&lt;a href="#artifact-generators">composition and decomposition&lt;/a> patterns.&lt;/p>
&lt;p>In this release, we have also introduced several new features to the Flux controllers,
including watching for changes in ConfigMaps and Secrets references,
extended readiness evaluation of dependencies with CEL expressions,
and support for OpenTelemetry tracing for Flux &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> reconciliation.&lt;/p>
&lt;p>In ecosystem news, there is a new release of
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
that comes with
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/image-automation/" target="_blank">in-cluster image update automation&lt;/a>
features, that can be used for GitLess GitOps workflows.&lt;/p>
&lt;h2 id="general-availability-of-image-update-automation">General availability of Image Update Automation&lt;/h2>
&lt;p>This release marks the General Availability (GA) of Flux
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/image/">Image Automation&lt;/a>
APIs and controllers. The image-reflector-controller and image-automation-controller work together to
update Kubernetes manifests in Git repositories when new container images are available in
container registries.&lt;/p>
&lt;p>The following APIs have been promoted to stable v1:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/image/imagerepositories/">ImageRepository&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/image/imagepolicies/">ImagePolicy&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/image/imageupdateautomations/">ImageUpdateAutomation&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>ImagePolicy&lt;/code> API now supports the &lt;code>.spec.suspend&lt;/code> field to pause and resume the policy evaluation.&lt;/p>
&lt;p>The &lt;code>ImageUpdateAutomation&lt;/code> API gains support for Git sparse checkout. To enable this optimization,
the image-automation-controller can be configured with the &lt;code>--feature-gates=GitSparseCheckout=true&lt;/code> flag.&lt;/p>
&lt;p>In addition, the image-automation-controller can now be configured to use Kubernetes Workload Identity
for authenticating with AzureDevOps repositories.&lt;/p>
&lt;p>&lt;strong>Breaking changes&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>The image-reflector-controller &lt;code>autologin&lt;/code> flags which were deprecated since 2023 are now removed.
Users should set &lt;code>ImageRepository.spec.provider&lt;/code> to the appropriate cloud provider for their container registry.&lt;/li>
&lt;li>The &lt;code>ImageUpdateAutomation&lt;/code> commit template fields &lt;code>.Updated&lt;/code> and &lt;code>.Changed.ImageResult&lt;/code> which were deprecated since 2024 are now removed.
Users should migrate to:
&lt;ul>
&lt;li>&lt;code>.Changed.FileChanges&lt;/code> for detailed change tracking&lt;/li>
&lt;li>&lt;code>.Changed.Objects&lt;/code> for object-level changes&lt;/li>
&lt;li>&lt;code>.Changed.Changes&lt;/code> for a flat list of changes&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="watching-for-changes-in-configmaps-and-secrets">Watching for changes in ConfigMaps and Secrets&lt;/h2>
&lt;p>Starting with Flux v2.7, the &lt;code>kustomize-controller&lt;/code>, &lt;code>helm-controller&lt;/code> and &lt;code>notification-controller&lt;/code>
gain support for reacting to changes in ConfigMaps and Secrets references.&lt;/p>
&lt;p>The following references are now watched for changes:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Kustomization.spec.postBuild.substituteFrom&lt;/code>&lt;/li>
&lt;li>&lt;code>Kustomization.spec.decryption.secretRef&lt;/code>&lt;/li>
&lt;li>&lt;code>Kustomization.spec.kubeConfig.secretRef&lt;/code>&lt;/li>
&lt;li>&lt;code>Kustomization.spec.kubeConfig.configMapRef&lt;/code>&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.valuesFrom&lt;/code>&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.kubeConfig.secretRef&lt;/code>&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.kubeConfig.configMapRef&lt;/code>&lt;/li>
&lt;li>&lt;code>Receiver.spec.secretRef&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>When a referenced ConfigMap or Secret changes, the controller will immediately trigger a reconciliation
if the referenced object is labelled with &lt;code>reconcile.fluxcd.io/watch: Enabled&lt;/code>.&lt;/p>
&lt;p>To enable the watching of all referenced objects without the need to label them,
the controllers can be configured with the &lt;code>--watch-configs-label-selector=owner!=helm&lt;/code> flag.&lt;/p>
&lt;h2 id="workload-identity-authentication-for-remote-clusters">Workload Identity Authentication for Remote Clusters&lt;/h2>
&lt;p>Starting with Flux v2.7, you can configure workload identity at the object level
in the &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> resources to authenticate with cloud providers
when running Flux in the hub-and-spoke model.&lt;/p>
&lt;p>This feature allows cluster admins to use cloud identities on the hub cluster to
configure Flux authentication to spoke clusters, without the need to create and manage
static &lt;code>kubeconfig&lt;/code> Secrets.&lt;/p>
&lt;p>For more details on how to configure secret-less authentication to remote clusters,
please refer to the following guides:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/kustomize/kustomizations/#secret-less-authentication">Kustomization - remote cluster apply&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/helmreleases/#secret-less-authentication">HelmRelease - remote cluster apply&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="object-level-workload-identity">Object-level Workload Identity&lt;/h2>
&lt;p>In Flux v2.7, we have completed the integration of Kubernetes Workload Identity
at the object level for all Flux APIs that support authentication with cloud providers.&lt;/p>
&lt;p>This includes the following resources:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Bucket.spec.serviceAccountName&lt;/code> for authenticating with AWS S3, Azure Blob Storage and Google Cloud Storage.&lt;/li>
&lt;li>&lt;code>GitRepository.spec.serviceAccountName&lt;/code> for authenticating with Azure DevOps.&lt;/li>
&lt;li>&lt;code>OCIRepository.spec.serviceAccountName&lt;/code> for authenticating with AWS ECR, Azure Container Registry and Google Artifact Registry.&lt;/li>
&lt;li>&lt;code>ImageRepository.spec.serviceAccountName&lt;/code> for authenticating with AWS ECR, Azure Container Registry and Google Artifact Registry.&lt;/li>
&lt;li>&lt;code>Kustomization.spec.decryption.serviceAccountName&lt;/code> for authenticating with AWS KMS, Azure Key Vault and Google KMS.&lt;/li>
&lt;li>&lt;code>Kustomization.spec.kubeConfig.configMapRef.name&lt;/code> for authenticating with remote clusters on AWS EKS, Azure AKS and Google GKE.&lt;/li>
&lt;li>&lt;code>HelmRelease.spec.kubeConfig.configMapRef.name&lt;/code> for authenticating with remote clusters on AWS EKS, Azure AKS and Google GKE.&lt;/li>
&lt;li>&lt;code>Provider.spec.serviceAccountName&lt;/code> for authenticating with Azure DevOps, Azure Event Hub and Google Pub/Sub.&lt;/li>
&lt;/ul>
&lt;p>For more details on how to configure object-level workload identity for Flux, see the following docs:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/aws/">AWS workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/azure/">Azure workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/gcp/">GCP workload identity&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="opentelemetry-tracing">OpenTelemetry Tracing&lt;/h2>
&lt;p>Starting with Flux v2.7, users can enable OpenTelemetry tracing for Flux reconciliations
by configuring a Provider of type &lt;code>otel&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>notification.toolkit.fluxcd.io/v1beta3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Provider&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>jaeger&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>otel&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>http://jaeger-collector.jaeger:4318/v1/traces&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The notification-controller converts Flux events into OTEL spans with proper trace relationships
based on the Flux object hierarchy. Source objects (&lt;code>GitRepository&lt;/code>, &lt;code>HelmChart&lt;/code>, &lt;code>OCIRepository&lt;/code>, &lt;code>Bucket&lt;/code>)
create root spans, while &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> objects create child spans within the same trace.
Each span includes event metadata as attributes and uses the alert name and namespace as the service identifier.&lt;/p>
&lt;script src="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-1fba03f4fc4c04a0a3c39bc0fd775312-0-wrapper" class="gallery-wrapper">
&lt;div id="gallery-1fba03f4fc4c04a0a3c39bc0fd775312-0" class="justified-gallery">
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/09/flux-v2.7.0/images/flux-helm-otel-trace.png"
class="galleryImg"
>
&lt;img
width="900" height="458"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABAAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APXREB7/APARSfMrYDYH&amp;#43;7Thn3qJ2Il61CepTJ8E/wAf6UhRj/H&amp;#43;lRhyf4qa7sD944qyT//Z"
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/09/flux-v2.7.0/images/flux-helm-otel-trace_hu6644b3959ea5e4b93bf8f62c92227629_173474_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/09/flux-v2.7.0/images/flux-git-otel-trace.png"
class="galleryImg"
>
&lt;img
width="900" height="398"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAA4AIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APUwAOvPvT0Rm6Sso9BmmD3o3SBvlOB/n2q2c8Hd6lj7O3/PdqBAwzmUn6io1eUj73b1/wDrU1nm67zj6/8A1qk107H/2Q=="
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/09/flux-v2.7.0/images/flux-git-otel-trace_hu32154de07f5c0095c3b8a5a7e44614c3_136661_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-1fba03f4fc4c04a0a3c39bc0fd775312-0");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;p>For more details on how to configure OpenTelemetry tracing for Flux, please refer to the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/notification/providers/#otel">notification-controller documentation&lt;/a>.&lt;/p>
&lt;h2 id="controller-improvements">Controller Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>GitRepository&lt;/code> API gains support for mTLS in GitHub App authentication.&lt;/li>
&lt;li>The &lt;code>Kustomization&lt;/code> API now supports
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/kustomize/kustomizations/#dependency-ready-expression">CEL expressions&lt;/a> for extended readiness evaluation of dependencies.&lt;/li>
&lt;li>The &lt;code>Kustomization&lt;/code> API gains a new field &lt;code>.spec.ignoreMissingComponents&lt;/code> for ignoring missing Kustomize components in the source.&lt;/li>
&lt;li>The kustomize-controller now supports global SOPS decryption for Age keys, allowing centralized management of decryption keys.&lt;/li>
&lt;li>The kustomize-controller can be configured to cancel ongoing health checks when a new source revision is detected with the &lt;code>--feature-gates=CancelHealthCheckOnNewRevision=true&lt;/code> flag.&lt;/li>
&lt;li>The &lt;code>HelmRelease&lt;/code> API now supports
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/helmreleases/#dependency-ready-expression">CEL expressions&lt;/a> for extended readiness evaluation of dependencies.&lt;/li>
&lt;li>The &lt;code>HelmRelease&lt;/code> API gains a new strategy called &lt;code>RetryOnFailure&lt;/code> for better handling of release failures.&lt;/li>
&lt;li>The &lt;code>Provider&lt;/code> API now supports setting proxy via &lt;code>spec.proxySecretRef&lt;/code> and mTLS via &lt;code>spec.certSecretRef&lt;/code>.&lt;/li>
&lt;li>The &lt;code>Provider&lt;/code> API has been extended with support for Zulip and OpenTelemetry tracing.&lt;/li>
&lt;/ul>
&lt;h2 id="cli-improvements">CLI Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>flux bootstrap&lt;/code> and &lt;code>flux install&lt;/code> commands now support the &lt;code>--components-extra=source-watcher&lt;/code> flag to enable the new source-watcher component.&lt;/li>
&lt;li>A new &lt;code>flux migrate&lt;/code> command has been added to migrate Flux resources stored in Kubernetes etcd to their latest API version.&lt;/li>
&lt;li>The &lt;code>flux debug&lt;/code> command gains a new &lt;code>--show-history&lt;/code> flag to display the reconciliation history of Flux objects.&lt;/li>
&lt;li>The &lt;code>flux diff&lt;/code> command now handles the &lt;code>kustomize.toolkit.fluxcd.io/force: Enabled&lt;/code> annotation.&lt;/li>
&lt;li>The &lt;code>flux create hr&lt;/code> command gains a new &lt;code>--storage-namespace&lt;/code> flag for changing the namespace of Helm storage objects.&lt;/li>
&lt;li>New commands were added for &lt;code>ImagePolicy&lt;/code> resources:
&lt;ul>
&lt;li>&lt;code>flux reconcile image policy&lt;/code>&lt;/li>
&lt;li>&lt;code>flux suspend image policy&lt;/code>&lt;/li>
&lt;li>&lt;code>flux resume image policy&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>New commands were added for &lt;code>ArtifactGenerator&lt;/code> resources:
&lt;ul>
&lt;li>&lt;code>flux get artifact generator&lt;/code>&lt;/li>
&lt;li>&lt;code>flux export artifact generator&lt;/code>&lt;/li>
&lt;li>&lt;code>flux tree artifact generator&lt;/code>&lt;/li>
&lt;li>&lt;code>flux events --for ArtifactGenerator/&amp;lt;name&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="artifact-generators">Artifact Generators&lt;/h2>
&lt;p>Flux v2.7 comes with a new component that can be enabled at bootstrap time
with the &lt;code>--components-extra=source-watcher&lt;/code> flag.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/fluxcd/source-watcher" target="_blank">source-watcher&lt;/a> controller
implements the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/artifactgenerators/">ArtifactGenerator&lt;/a> API which allows Flux users to:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Compose&lt;/strong> multiple Flux sources (GitRepository, OCIRepository, Bucket) into a single deployable artifact&lt;/li>
&lt;li>&lt;strong>Decompose&lt;/strong> monorepos into multiple independent artifacts with separate deployment lifecycles&lt;/li>
&lt;li>&lt;strong>Optimize&lt;/strong> reconciliation by only triggering updates when specific paths change&lt;/li>
&lt;li>&lt;strong>Structure&lt;/strong> complex deployments from distributed sources maintained by different teams&lt;/li>
&lt;/ul>
&lt;h3 id="multiple-source-composition">Multiple Source Composition&lt;/h3>
&lt;p>The &lt;code>ArtifactGenerator&lt;/code> can be used to combine multiple sources into a single deployable artifact,
for example, you can combine upstream Helm charts from OCI registries
with your organization&amp;rsquo;s custom values and configuration overrides stored in Git:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.extensions.fluxcd.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ArtifactGenerator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sources&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">alias&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>chart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-chart&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">alias&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>repo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-values&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">artifacts&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-composite&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">originRevision&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@chart&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@chart/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@repo/charts/podinfo/values.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/podinfo/values.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">strategy&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Overwrite&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@repo/charts/podinfo/values-prod.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/podinfo/values.yaml&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">strategy&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Merge&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">releaseName&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ExternalArtifact&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo-composite&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="monorepo-decomposition">Monorepo Decomposition&lt;/h3>
&lt;p>The &lt;code>ArtifactGenerator&lt;/code> can be used to decompose a monorepo into multiple independent artifacts
with separate deployment lifecycles. For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.extensions.fluxcd.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ArtifactGenerator&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>app-decomposer&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sources&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">alias&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>git&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>monorepo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">artifacts&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">originRevision&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git/deploy/frontend/**&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">originRevision&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">from&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@git/deploy/backend/**&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">to&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;@artifact/&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend-service&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ExternalArtifact&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>frontend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend-service&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ExternalArtifact&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>backend&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>./&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Each service gets its own &lt;code>ExternalArtifact&lt;/code> with an independent revision.
Changes to &lt;code>deploy/backend/&lt;/code> only trigger the reconciliation of the backend-service &lt;code>Kustomization&lt;/code>,
leaving other services untouched.&lt;/p>
&lt;p>For more details on how to use the &lt;code>ArtifactGenerator&lt;/code> API, please refer to the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/artifactgenerators/">source-watcher documentation&lt;/a>.&lt;/p>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.4 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.7 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.32, 1.33, 1.34&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.19&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Enterprise support&lt;/strong> Note that the CNCF Flux project offers support only for the latest three minor versions of Kubernetes.
Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide enterprise support for Flux.&lt;/p>
&lt;/blockquote>
&lt;h2 id="upgrade-procedure">Upgrade Procedure&lt;/h2>
&lt;p>Note that in Flux v2.7, the following APIs have reached end-of-life and have been removed from the CRDs:&lt;/p>
&lt;ul>
&lt;li>&lt;code>source.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>kustomize.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>helm.toolkit.fluxcd.io/v2beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>image.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;li>&lt;code>notification.toolkit.fluxcd.io/v1beta1&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Before upgrading to Flux v2.7, make sure to migrate all your resources to the stable APIs
using the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/cmd/flux_migrate/">flux migrate&lt;/a> command.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Upgrade Procedure for Flux v2.7+&lt;/h4>
We have published a dedicated step-by-step upgrade guide, please follow the instructions from
&lt;a href="https://github.com/fluxcd/flux2/discussions/5572" target="_blank">Upgrade Procedure for Flux v2.7+&lt;/a>.
&lt;/div>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: FluxCon NA 2025</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/06/fluxcon-na-2025/</link><pubDate>Thu, 05 Jun 2025 12:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/06/fluxcon-na-2025/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/06/fluxcon-na-2025/featured-image_hu3027b215f85c24cf338a4f0ceb47d901_147083_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>&lt;img src="featured-image.png" alt="FluxCon-horizontal-color logo">&lt;/p>
&lt;p>This year at KubeCon NA in Atlanta, we&amp;rsquo;ll be hosting the first-ever
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/fluxcon/" target="_blank">FluxCon&lt;/a>!
We&amp;rsquo;re so excited to have a space specifically for Flux end-users to share their stories.
FluxCon will be taking place on &lt;strong>November 10th&lt;/strong>, 2025.&lt;/p>
&lt;p>We&amp;rsquo;ve added a number of new features to Flux and continue to stabilize API&amp;rsquo;s
for a stable, scalable lifetime.
FluxCon is a great way to learn about new use-cases, hear about Flux at scale, and connect with other
Flux practitioners.&lt;/p>
&lt;h2 id="call-for-papers">Call for Papers&lt;/h2>
&lt;p>Are you using Flux in your org? We&amp;rsquo;d love to hear your story.
You can
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/fluxcon/#call-for-proposals" target="_blank">submit your talk proposal&lt;/a> before &lt;strong>June 30th&lt;/strong>, 2025.&lt;/p>
&lt;h2 id="new-use-cases">New Use-Cases&lt;/h2>
&lt;p>Flux is used in retail stores, massive datacenters, trains, cell-towers, satellites, tractors, and so many more places. Practitioners choose Flux because it&amp;rsquo;s performant, flexible, and secure. Over the years, we&amp;rsquo;ve heard so many use-cases for Flux&amp;rsquo;s uniquely extensible continuous delivery API&amp;rsquo;s.&lt;/p>
&lt;p>This year we&amp;rsquo;re advocating for Gitless GitOps, experimenting with AI-assisted GitOps, and showing object-level identity for external API&amp;rsquo;s. The ecosystem of projects innovating around Flux is also healthy. The Headlamp project builds UI tools for Flux users, and there are a number of vendors offering SaaS and support for Flux in their products. We can&amp;rsquo;t wait to hear what people are doing next at FluxCon.&lt;/p>
&lt;h2 id="connect-with-the-community">Connect with the Community&lt;/h2>
&lt;p>The most important part of the Flux project is our community. Yes, our software is beautiful, and simple, and incredibly principled, but we build Flux purely for the love of our community of practitioners. We created GitOps to change the way we work, and meeting each other and sharing our stories is the only way to do so.&lt;/p>
&lt;p>You can expect to meet other users, talk directly with Flux maintainers (represented by multiple companies), and hear more about how we&amp;rsquo;re moving GitOps forward.&lt;/p>
&lt;p>Please consider this a warm invitation to come join us at FluxCon this November.
&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/co-located-events/fluxcon/" target="_blank">We&amp;rsquo;ll see you there!&lt;/a>&lt;/p></description></item><item><title>Blog: Announcing Flux 2.6 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/05/flux-v2.6.0/</link><pubDate>Thu, 29 May 2025 12:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/05/flux-v2.6.0/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/05/flux-v2.6.0/featured-image_hu0a3d34a1286ca95e0c20a1ae8ebfb057_608764_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.6.0" target="_blank">Flux v2.6.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Flux v2.6 marks the General Availability (GA) of the Flux Open Container Initiative (OCI) Artifacts features.
The OCI artifacts support was first introduced in 2022, and since then we&amp;rsquo;ve been evolving Flux towards
a &lt;strong>Gitless GitOps&lt;/strong> model. In this model, the Flux controllers are fully decoupled from Git,
relying solely on container registries as the source of truth for the desired state of Kubernetes clusters.&lt;/p>
&lt;p>In the last couple of years, the OCI feature-set has matured, and we&amp;rsquo;ve seen major financial institutions
and enterprises adopting Flux and OCI as their preferred way of managing production deployments.
To see it in action, you can check the reference architecture guide made by ControlPlane
on how highly regulated industries can securely implement
&lt;a href="https://control-plane.io/posts/d2-reference-architecture-guide/" target="_blank">Gitless GitOps with Flux and OCI&lt;/a>.&lt;/p>
&lt;p>In this release, we have also introduced several new features to the Flux controllers,
including digest pinning in image automation, object-level workload identity for container registries
and KMS services authentication, and various improvements to notifications.&lt;/p>
&lt;p>In ecosystem news, there is a new release of
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
that comes with a Model Context Protocol (MCP) implementation for allowing AI assistants to interact with Flux.
For more details on the Flux MCP Server, see the
&lt;a href="https://fluxcd.io/blog/2025/05/ai-assisted-gitops/" target="_blank">AI-Assisted GitOps blog post&lt;/a>.&lt;/p>
&lt;h2 id="general-availability-of-flux-oci-artifacts">General availability of Flux OCI Artifacts&lt;/h2>
&lt;p>This release marks the General Availability (GA) of Flux
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/ocirepositories/">OCIRepository&lt;/a>
API, which allows storing the desired state of Kubernetes clusters in OCI container registries.&lt;/p>
&lt;p>The &lt;code>OCIRepository&lt;/code> v1 API comes with new features including:&lt;/p>
&lt;ul>
&lt;li>Support for
&lt;a href="#object-level-workload-identity">Object-Level Workload Identity&lt;/a>,
which allows Flux to use different cloud identities for accessing container registries on multi-tenant clusters.&lt;/li>
&lt;li>Caching of registry credentials for cloud providers, which allows Flux to reuse the OIDC tokens
for subsequent requests to the same registry, reducing the number of authentication requests.&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>OCIRepository&lt;/code> v1 API is backward compatible with the previous v1beta2 API, users can upgrade
by changing the &lt;code>apiVersion&lt;/code> in the YAML files that contain &lt;code>OCIRepository&lt;/code> definitions from
&lt;code>source.toolkit.fluxcd.io/v1beta2&lt;/code> to &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>.&lt;/p>
&lt;p>The Flux CLI commands for working with OCI artifacts have been promoted to stable:&lt;/p>
&lt;ul>
&lt;li>&lt;code>flux build artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux push artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux pull artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux tag artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux diff artifact&lt;/code>&lt;/li>
&lt;li>&lt;code>flux list artifacts&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The Flux custom media types used for OCI artifacts produced by the Flux CLI are now stable:&lt;/p>
&lt;ul>
&lt;li>config media type &lt;code>application/vnd.cncf.flux.config.v1+json&lt;/code>&lt;/li>
&lt;li>content media type &lt;code>application/vnd.cncf.flux.content.v1.tar+gzip&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="breaking-changes">Breaking changes&lt;/h3>
&lt;p>Prior to &lt;code>v2.6.0&lt;/code>, the &lt;code>OCIRepository&lt;/code> and &lt;code>ImageRepository&lt;/code> APIs allowed the &lt;code>spec.provider&lt;/code> field
to be set to a value that did not necessarily match the repository URL. In these cases the controllers
would simply ignore the &lt;code>spec.provider&lt;/code>, not configuring OIDC authentication for the repository.&lt;/p>
&lt;p>For example, the repository &lt;code>public.ecr.aws/aws-controllers-k8s&lt;/code> never matched Flux&amp;rsquo;s regular expression
for the &lt;code>aws&lt;/code> provider, but the controller would still allow the &lt;code>spec.provider&lt;/code> to be set to &lt;code>aws&lt;/code> in
this case and would simply ignore it. This specific configuration would work correctly because this
particular repository is public and does not require authentication.&lt;/p>
&lt;p>Similarly, a private repository that did not match any of Flux&amp;rsquo;s validations for the three container
registry providers (&lt;code>aws&lt;/code>, &lt;code>azure&lt;/code>, &lt;code>gcp&lt;/code>) would also work with the &lt;code>spec.provider&lt;/code> set to one of
these values, as long as it was also configured with one of the &lt;code>spec.secretRef&lt;/code> or
&lt;code>spec.serviceAccountName&lt;/code> fields for using image pull secrets. In these cases, the controller
would simply ignore the &lt;code>spec.provider&lt;/code> and use the image pull secret instead.&lt;/p>
&lt;p>Starting with &lt;code>v2.6.0&lt;/code>, Flux is fixing this behavior. The repository URL must now match the provider
set in &lt;code>spec.provider&lt;/code>, otherwise the controller will reject the configuration and return an error.
For automatic OIDC authentication, the &lt;code>spec.provider&lt;/code> must be set to one of the three container
registry providers (&lt;code>aws&lt;/code>, &lt;code>azure&lt;/code>, &lt;code>gcp&lt;/code>). For public repositories or authentication using image
pull secrets, the &lt;code>spec.provider&lt;/code> must not be set, or set to &lt;code>generic&lt;/code>. These configuration
instructions were explicit in the Flux docs since many releases, but are only now in &lt;code>v2.6.0&lt;/code>
being strictly enforced by the controllers.&lt;/p>
&lt;h2 id="image-automation-digest-pinning">Image Automation Digest Pinning&lt;/h2>
&lt;p>In Flux v2.6, the image automation has been enhanced to support digest pinning
for container images. This feature allows users to configure the &lt;code>ImagePolicy&lt;/code>
to track the latest digest of a container image, and the &lt;code>ImageUpdateAutomation&lt;/code>
to update the manifests in the Git repository with the new digest.&lt;/p>
&lt;p>The &lt;code>ImagePolicy&lt;/code> can now be configured to select the latest image digest
with &lt;code>.spec.digestReflectionPolicy&lt;/code> set to &lt;code>Always&lt;/code>.
Once a policy is set to track the latest digest, the manifests in the Git repository
will be updated with digest references in the format &lt;code>&amp;lt;registry&amp;gt;/&amp;lt;name&amp;gt;:&amp;lt;tag&amp;gt;@&amp;lt;digest&amp;gt;&lt;/code>.&lt;/p>
&lt;p>A new marker has been introduced to allow setting the digest in custom resources
where &lt;code>repository&lt;/code>, &lt;code>tag&lt;/code> and &lt;code>digest&lt;/code> are separate values:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">image&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">repository&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>docker.io/my-org/my-app&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;flux-system:my-app:name&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">tag&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>latest &lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;flux-system:my-app:tag&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">digest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>sha256:ec0119...&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;flux-system:my-app:digest&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more details on how to configure image automation digest pinning,
see the following
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/guides/image-update/#digest-pinning">guide&lt;/a>.&lt;/p>
&lt;h2 id="object-level-workload-identity">Object-level Workload Identity&lt;/h2>
&lt;p>Starting with Flux v2.6, you can configure workload identity at the object level
in the &lt;code>Kustomization&lt;/code> API for SOPS decryption with KMS services, and in the
&lt;code>OCIRepository&lt;/code> and &lt;code>ImageRepository&lt;/code> APIs for accessing container registries.&lt;/p>
&lt;p>This feature allows cluster admins to use different cloud identities on multi-tenant
clusters. Instead of relying on static Secrets that require manual rotation,
you can now assign cloud identities per tenant by leveraging Kubernetes Workload Identity.&lt;/p>
&lt;p>To use this feature, cluster admins have to enable the feature gate
&lt;code>ObjectLevelWorkloadIdentity&lt;/code> which is opt-in from Flux v2.6.&lt;/p>
&lt;p>For more details on how to configure object-level workload identity for Flux,
see the following docs:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/aws/">AWS workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/azure/">Azure workload identity&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/integrations/gcp/">GCP workload identity&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="github-app-authentication">GitHub App Authentication&lt;/h2>
&lt;p>In Flux v2.6, we have completed the integration of GitHub App authentication for Git repositories.
This feature was introduced in
&lt;a href="https://fluxcd.io/blog/2025/02/flux-v2.5.0/#github-app-authentication-for-git-repositories" target="_blank">Flux v2.5&lt;/a>,
and it is now fully supported across all Flux APIs.&lt;/p>
&lt;p>The GitHub App authentication tokens are now cached by the Flux controllers
and reused for subsequent requests for the duration of the token lifetime.&lt;/p>
&lt;p>The notification-controller has also been updated to support GitHub App authentication
when updating
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/notification/providers/#git-commit-status-updates">Git commit statuses&lt;/a>
and for triggering
&lt;a href="flux/components/notification/providers/#github-dispatch">GitHub Actions workflows&lt;/a>.&lt;/p>
&lt;h2 id="notifications-improvements">Notifications Improvements&lt;/h2>
&lt;p>Starting with Flux v2.6, users can customize the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/notification/providers/#git-commit-status-updates">Git commit status&lt;/a>
identifier in the notifications sent to Git providers by using Common Expression Language (CEL) expressions.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>notification.toolkit.fluxcd.io/v1beta3&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Provider&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>github-status&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>github&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>https://github.com/my-gh-org/my-gh-repo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">secretRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>github-app-auth&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">commitStatusExpr&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;(event.involvedObject.kind + &amp;#39;/&amp;#39; + event.involvedObject.name + &amp;#39;/&amp;#39; + event.metadata.clusterName)&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Customizing the commit status ID is particularly useful when using a monorepo for a fleet of Kubernetes clusters,
as it allows you to differentiate the commit statuses for each cluster.&lt;/p>
&lt;p>Other improvements include:&lt;/p>
&lt;ul>
&lt;li>The notification-controller can now use Azure Workload Identity when sending notifications to Azure Event Hub.&lt;/li>
&lt;li>The &lt;code>github&lt;/code> and &lt;code>githubdispatch&lt;/code> providers now support authenticating with a GitHub App.&lt;/li>
&lt;/ul>
&lt;h2 id="controller-improvements">Controller Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>GitRepository&lt;/code> v1 API now supports sparse checkout by setting a list of directories in the &lt;code>.spec.sparseCheckout&lt;/code> field.
This allows for optimizing the amount of data fetched from the Git repository.&lt;/li>
&lt;li>The &lt;code>GitRepository&lt;/code> v1 API gains supports mTLS authentication for HTTPS Git repositories.&lt;/li>
&lt;li>The &lt;code>Kustomization&lt;/code> v1 API now supports the value &lt;code>WaitForTermination&lt;/code> for the &lt;code>.spec.deletionPolicy&lt;/code> field.
This instructs the controller to wait for the deletion of all resources managed by the Kustomization
before allowing the Kustomization itself to be deleted.&lt;/li>
&lt;li>The helm-controller v1.3.0 comes with a new feature gate called &lt;code>DisableChartDigestTracking&lt;/code>,
which allows disabling appending the digest of OCI Helm charts to the chart version.
This is useful for charts that do not follow Helm&amp;rsquo;s recommendation of using the app version
instead of the chart version as a label in the manifests.&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.3 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.6 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.31, 1.32, 1.33&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.18&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>Enterprise support&lt;/strong> Note that the CNCF Flux project offers support only for the latest three minor versions of Kubernetes.
Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide enterprise support for Flux.&lt;/p>
&lt;/blockquote>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Announcing Flux 2.5 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/02/flux-v2.5.0/</link><pubDate>Thu, 20 Feb 2025 12:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/02/flux-v2.5.0/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2025/02/flux-v2.5.0/featured-image_hu01632177776d3af78deffdce84473b92_598056_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.5.0" target="_blank">Flux v2.5.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="highlights">Highlights&lt;/h2>
&lt;p>Flux v2.5 marks a significant milestone in the project&amp;rsquo;s evolution, we have integrated Common Expression Language (CEL)
with the Flux controllers to enable long-awaited features such as custom health checks and webhook receiver filters.
Moreover, we have added support for GitHub App authentication, custom event metadata for notifications and Flux CLI helpers
for troubleshooting Flux resources.&lt;/p>
&lt;p>In ecosystem news, the
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a> v0.14 release brings
one of the most requested features: deploy app code and/or config changes made in a GitHub Pull Request
or GitLab Merge Request to an ephemeral environment for testing and validation.&lt;/p>
&lt;p>The Flux Operator has the ability to create, update and delete application instances on-demand based
on the
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/introduction/" target="_blank">ResourceSet&lt;/a>
definitions and Pull/Merge Requests state.&lt;/p>
&lt;p>For more details on how to use the ephemeral environments feature, see the following guides:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/github-pull-requests/" target="_blank">Ephemeral Environments for GitHub Pull Requests&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.control-plane.io/operator/resourcesets/gitlab-merge-requests/" target="_blank">Ephemeral Environments for GitLab Merge Requests&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="health-checks-for-custom-resources">Health Checks for Custom Resources&lt;/h3>
&lt;p>In this release, we have extended the Flux
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/kustomize/kustomizations/">Kustomization&lt;/a> API
with support for defining custom health checks using Common Expression Language (CEL).
The health checks are used to verify the readiness of the resources managed by Flux and are a key feature
for ensuring that the desired state of the cluster is achieved.&lt;/p>
&lt;p>While Flux performs a series of built-in health checks for Kubernetes core resources, the new feature
allows users to teach Flux how to check the health of Kubernetes custom resources.
This is particularly useful for custom resources that do not subscribe to the Kubernetes API conventions
or for resources that require additional logic to determine if they reached the desired state.&lt;/p>
&lt;p>A common use case for custom health checks is to verify the status of &lt;code>Cluster&lt;/code> objects reconciled by
the
&lt;a href="https://cluster-api.sigs.k8s.io/" target="_blank">Cluster API&lt;/a> controllers. When Flux is used to manage a fleet
of Kubernetes clusters, the health checks can be used to ensure that the clusters are ready before
deploying cluster addons and applications.&lt;/p>
&lt;p>Example of a Kustomization with a custom health check for Cluster API:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>kustomize.toolkit.fluxcd.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Kustomization&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prod-clusters&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>infra&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>30m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">retryInterval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>5m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">prune&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>GitRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fleet&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;./production&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">timeout&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>15m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">wait&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">healthCheckExprs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>cluster.x-k8s.io/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Cluster&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">failed&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;status.conditions.filter(e, e.type == &amp;#39;Ready&amp;#39;).all(e, e.status == &amp;#39;False&amp;#39;)&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">current&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;status.conditions.filter(e, e.type == &amp;#39;Ready&amp;#39;).all(e, e.status == &amp;#39;True&amp;#39;)&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above example configures Flux to wait for all the &lt;code>Cluster&lt;/code> objects to reach the Ready state
before proceeding with the reconciliation of other Kustomizations that have a
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/kustomize/kustomizations/#dependencies">dependsOn&lt;/a> relationship
defined for the &lt;code>prod-clusters&lt;/code>.&lt;/p>
&lt;p>We have published a
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/cheatsheets/cel-healthchecks/">health check library&lt;/a> that contains CEL
expressions for popular custom resources. The library is community-maintained, and we encourage
users to contribute new health checks.&lt;/p>
&lt;p>Other kustomize-controller improvements include:&lt;/p>
&lt;ul>
&lt;li>Fine-grained control of garbage collection with
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/#deletion-policy" target="_blank">.spec.deletionPolicy&lt;/a>.&lt;/li>
&lt;li>SOPS support for decryption of Kubernetes secrets generated by Kustomize components.&lt;/li>
&lt;/ul>
&lt;h3 id="github-app-authentication-for-git-repositories">GitHub App Authentication for Git Repositories&lt;/h3>
&lt;p>Starting with Flux v2.5, you can configure source-controller and image-automation-controller
to authenticate against GitHub repositories using a GitHub App installation.&lt;/p>
&lt;p>Instead of relying on personal access tokens or SSH keys that require manual rotation,
you can now configure Flux to authenticate against GitHub repositories using an identity
that is not tied to a specific user account.&lt;/p>
&lt;p>We have added a new command to the Flux CLI that can be used to create the Kubernetes Secret
required for the GitHub App authentication.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux create secret githubapp github-auth &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-id&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#40a070">1&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-installation-id&lt;span style="color:#666">=&lt;/span>&lt;span style="color:#40a070">2&lt;/span> &lt;span style="color:#4070a0;font-weight:bold">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-weight:bold">&lt;/span> --app-private-key&lt;span style="color:#666">=&lt;/span>~/private-key.pem
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The Kubernetes Secret generated by the above command can be referenced in a &lt;code>GitRepository&lt;/code>
and &lt;code>ImageUpdateAutomation&lt;/code> with &lt;code>.spec.secretRef.name&lt;/code>.&lt;/p>
&lt;p>For more details on how to configure the GitHub App authentication, see the
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#github" target="_blank">GitRepository API documentation&lt;/a>.&lt;/p>
&lt;h3 id="custom-event-metadata-for-notifications">Custom event metadata for notifications&lt;/h3>
&lt;p>Starting with Flux v2.5, users can enrich the metadata of the events sent by the notification-controller
by adding annotations on the Flux &lt;code>Kustomization&lt;/code> and &lt;code>HelmRelease&lt;/code> resources.
The metadata is included in the notifications sent to the configured providers, such as Slack, Microsoft Teams, etc.,
and can be used to provide additional context about a particular application or environment.&lt;/p>
&lt;p>One highly requested feature was the ability to include the image tag in the notifications send when
Flux image automation updates the container image tag in HelmRelease values.&lt;/p>
&lt;p>Example of a HelmRelease with custom event metadata containing the image tag:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apps&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">annotations&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">event.toolkit.fluxcd.io/image&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>docker.io/org/my-app:1.0.0&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;apps:my-app&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chart&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>my-app&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sourceRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>podinfo&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">image&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">tag&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">1.0.0&lt;/span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#60a0b0;font-style:italic"># {&amp;#34;$imagepolicy&amp;#34;: &amp;#34;apps:my-app:tag&amp;#34;}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the image automation updates the &lt;code>my-app&lt;/code> HelmRelease with a new image tag e.g. &lt;code>1.0.1&lt;/code>,
the notification sent after the Helm release upgrade will include &lt;code>image: docker.io/org/my-app:1.0.1&lt;/code>
in message body.&lt;/p>
&lt;p>For more details on how to configure custom event metadata, see the
&lt;a href="https://fluxcd.io/flux/components/notification/alerts/#event-metadata-from-object-annotations" target="_blank">Alert API documentation&lt;/a>.&lt;/p>
&lt;p>Other notifications improvements include:&lt;/p>
&lt;ul>
&lt;li>The notification-controller is now capable of updating
&lt;a href="https://fluxcd.io/flux/cheatsheets/oci-artifacts/#git-commit-status-updates" target="_blank">Git commit statuses&lt;/a>
from events about Kustomizations that consume OCIRepositories.&lt;/li>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/notification/receivers/#filtering-reconciled-objects-with-cel" target="_blank">Receiver API&lt;/a>
now supports filtering the declared resources that match a given Common Expression Language (CEL) expression.&lt;/li>
&lt;/ul>
&lt;h3 id="cli-improvements">CLI Improvements&lt;/h3>
&lt;p>To help users troubleshoot Flux, we&amp;rsquo;ve added a new &lt;code>flux debug&lt;/code> command the following subcommands:&lt;/p>
&lt;ul>
&lt;li>&lt;code>flux debug kustomization --show-vars&lt;/code> used to inspect the final variables values by merging the Flux &lt;code>Kustomization&lt;/code>
inline vars with the vars coming from Kubernetes ConfigMaps/Secrets.&lt;/li>
&lt;li>&lt;code>flux debug helmrelease --show-values&lt;/code> used to inspect the final Helm values by merging the &lt;code>HelmRelease&lt;/code>
inline values with the values coming from Kubernetes ConfigMaps/Secrets.&lt;/li>
&lt;/ul>
&lt;p>Note that these commands will print sensitive information if Kubernetes Secrets are referenced in
the Flux &lt;code>Kustomization&lt;/code> or &lt;code>HelmRelease&lt;/code> resources.&lt;/p>
&lt;p>Other CLI improvements include:&lt;/p>
&lt;ul>
&lt;li>A new command was added, &lt;code>flux create secret githubapp&lt;/code> that can be used to generate a Kubernetes Secret
for GitHub App authentication.&lt;/li>
&lt;li>The &lt;code>flux create source git&lt;/code> command now supports the &lt;code>--provider=github&lt;/code> flag to configure GitHub App authentication
for Git repositories.&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.2 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.5 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.30, 1.31, 1.32&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.17&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Enterprise support&lt;/h4>
&lt;p>Note that the CNCF Flux project offers support only for the latest
three minor versions of Kubernetes.&lt;/p>
&lt;p>Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors
such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide
enterprise support for Flux.&lt;/p>
&lt;/div>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Announcing Flux 2.4 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/09/flux-v2.4.0/</link><pubDate>Mon, 30 Sep 2024 12:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/09/flux-v2.4.0/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/09/flux-v2.4.0/featured-image_hub25ad32b7d77a2743cffc7dca43de13f_611199_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.4.0" target="_blank">Flux v2.4.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="general-availability-of-flux-s3-compatible-source-api">General availability of Flux S3-compatible Source API&lt;/h2>
&lt;p>This release marks the General Availability (GA) of Flux &lt;code>Bucket&lt;/code> API which allows storing
the desired state of Kubernetes clusters in S3-compatible storage services such as
Amazon S3, Azure Blob Storage, Google Cloud Storage, Alibaba Cloud, MinIO, and others.&lt;/p>
&lt;p>The &lt;code>Bucket&lt;/code> v1 API comes with new features including: proxy support, mTLS and custom STS
configuration for AWS S3 and MinIO LDAP authentication.&lt;/p>
&lt;p>New fields in the &lt;code>source.toollkit.fluxcd.io/v1&lt;/code> API:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.spec.proxySecretRef&lt;/code> allows configuring HTTP/S Proxy authentication for the S3-compatible storage service.&lt;/li>
&lt;li>&lt;code>.spec.certSecretRef&lt;/code> allows custom TLS client certificate and CA for secure communication with the S3-compatible storage service.&lt;/li>
&lt;li>&lt;code>.spec.sts&lt;/code> allows custom STS configuration for AWS S3 and MinIO LDAP authentication.&lt;/li>
&lt;/ul>
&lt;p>For more details, please see the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/buckets/">Bucket documentation&lt;/a>.&lt;/p>
&lt;p>To upgrade, make sure the new CRDs and controllers are deployed, and then change the manifests in Git:&lt;/p>
&lt;ol>
&lt;li>Set &lt;code>apiVersion: source.toolkit.fluxcd.io/v1&lt;/code> in the YAML files that contain &lt;code>Bucket&lt;/code> definitions.&lt;/li>
&lt;li>Commit, push and reconcile the API version changes.&lt;/li>
&lt;/ol>
&lt;p>Bumping the APIs version in manifests can be done gradually.
It is advised to not delay this procedure as the deprecated versions will be removed after 6 months.&lt;/p>
&lt;h2 id="azure-devops-oidc-authentication">Azure DevOps OIDC Authentication&lt;/h2>
&lt;p>Starting with Flux v2.4, you can configure source-controller and image-automation-controller
to authenticate against Azure DevOps repositories using AKS Workload Identity.&lt;/p>
&lt;p>Instead of using Azure personal access tokens or SSH keys that require manual rotation,
you can now use OIDC tokens to authenticate against Azure DevOps repositories by leveraging
Kubernetes Workload Identity.&lt;/p>
&lt;p>For more details on how to configure the Azure DevOps OIDC authentication, see the
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#provider" target="_blank">GitRepository API documentation&lt;/a>.&lt;/p>
&lt;h2 id="controller-improvements">Controller Improvements&lt;/h2>
&lt;ul>
&lt;li>The &lt;code>OCIRepository&lt;/code> v1beta2 API gains support for proxy configuration thus allowing
dedicated
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/ocirepositories/#proxy-secret-reference">HTTP/S Proxy&lt;/a>
authentication on multi-tenant Kubernetes clusters.&lt;/li>
&lt;li>The &lt;code>HelmRelease&lt;/code> v2 API gains support for disabling JSON schema validation of the Helm release values
during installation and upgrade. And allows adopting existing Kubernetes resources during Helm release
installation.&lt;/li>
&lt;li>The notification-controller allows transitioning the Microsoft Teams alerting from the deprecated
Office 365 connector to MS Workflows and the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/notification/providers/#microsoft-teams">Adaptive Card format&lt;/a>.&lt;/li>
&lt;li>The Flux Kustomization and HelmRelease APIs now support defining dependencies between resources
managed by different controller shards.&lt;/li>
&lt;/ul>
&lt;h2 id="cli-improvements">CLI Improvements&lt;/h2>
&lt;ul>
&lt;li>A new command was added, &lt;code>flux create secret proxy&lt;/code> that can be used to generate a Kubernetes Secret
for HTTP/S Proxy authentication referenced by &lt;code>Bucket&lt;/code>, &lt;code>GitRepository&lt;/code> and &lt;code>OCIRepository&lt;/code>.&lt;/li>
&lt;li>The &lt;code>flux create source git&lt;/code> command now supports the &lt;code>--provider=azure&lt;/code> flag to configure OIDC authentication
for Azure DevOps repositories.&lt;/li>
&lt;li>The &lt;code>flux diff kustomization&lt;/code> command now supports the &lt;code>--recursive&lt;/code> flag to recursively diff encountered Kustomizations.&lt;/li>
&lt;li>On Windows, the Flux CLI can now be installed using the WinGet tool by running &lt;code>winget install -e --id FluxCD.Flux&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported Versions&lt;/h2>
&lt;p>Flux v2.1 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.4 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.29, 1.30, 1.31&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.16&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Enterprise support&lt;/h4>
&lt;p>Note that the CNCF Flux project offers support only for the latest
three minor versions of Kubernetes.&lt;/p>
&lt;p>Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors
such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide
enterprise support for Flux.&lt;/p>
&lt;/div>
&lt;h2 id="flux-operator-and-openshift-compatibility">Flux Operator and OpenShift Compatibility&lt;/h2>
&lt;p>Flux can be installed on Red Hat OpenShift cluster directly from
&lt;a href="https://operatorhub.io/operator/flux-operator" target="_blank">OperatorHub&lt;/a> or by using the
&lt;a href="https://artifacthub.io/packages/helm/flux-operator/flux-operator" target="_blank">Flux Operator Helm chart&lt;/a>.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/controlplaneio-fluxcd/flux-operator" target="_blank">Flux Operator&lt;/a>
is an open-source project developed by ControlPlane that offers an alternative to the
Flux Bootstrap procedure, it removes the operational burden of managing Flux across
fleets of clusters by fully automating the installation, configuration, and upgrade
of the Flux controllers based on a declarative API.&lt;/p>
&lt;p>The operator simplifies the configuration of Flux multi-tenancy lockdown, sharding,
horizontal and vertical scaling, persistent storage, and allows fine-tuning
the Flux controllers with Kustomize patches. The operator streamlines the
transition from Git as the delivery mechanism for the cluster desired state
to OCI artifacts and S3-compatible storage.&lt;/p>
&lt;p>After installing the Flux Operator on OpenShift, you can deploy the Flux controllers
using the &lt;code>FluxInstance&lt;/code> custom resource e.g.:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>fluxcd.controlplane.io/v1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>FluxInstance&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flux&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">distribution&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">version&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;2.x&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">registry&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;ghcr.io/fluxcd&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">artifact&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests:latest&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">components&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- source-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- kustomize-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- helm-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- notification-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- image-reflector-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- image-automation-controller&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">cluster&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>openshift&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">multitenant&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">networkPolicy&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">domain&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;cluster.local&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sharding&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">shards&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;shard1&amp;#34;&lt;/span>,&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;shard2&amp;#34;&lt;/span>&lt;span style="color:#bbb"> &lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">sync&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;oci://ghcr.io/my-org/my-fleet-manifests&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;latest&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;clusters/my-cluster&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">pullSecret&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;flux-system&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more details on how to use configure Flux using the operator, please see the
&lt;a href="https://fluxcd.control-plane.io/operator/" target="_blank">Flux Operator documentation&lt;/a>.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Announcing Flux 2.3 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/05/flux-v2.3.0/</link><pubDate>Mon, 13 May 2024 12:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/05/flux-v2.3.0/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/05/flux-v2.3.0/featured-image_hue07ae75357d039bdf47d8003dd7d4c65_254854_640x0_resize_box_3.png" width="640" height="360"/>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.3.0" target="_blank">Flux v2.3.0&lt;/a>!
In this post, we will highlight some of the new features and improvements included in this release.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="">&lt;/p>
&lt;h2 id="general-availability-of-flux-helm-features-and-apis">General availability of Flux Helm features and APIs&lt;/h2>
&lt;p>This release marks a significant milestone for the Flux project, after almost four years of development,
the helm-controller and the Helm related APIs have reached general availability.&lt;/p>
&lt;p>The following Kubernetes CRDs have been promoted to GA:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/helmreleases/">HelmRelease&lt;/a> - &lt;code>helm.toolkit.fluxcd.io/v2&lt;/code>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/helmcharts/">HelmChart&lt;/a> - &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/helmrepositories/">HelmRepository&lt;/a> - &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The Helm features and APIs have been battle-tested by the community in production and are now considered stable.
Future changes to the Helm APIs will be made in a backwards compatible manner,
and we will continue to support and maintain them for the foreseeable future.&lt;/p>
&lt;h3 id="enhanced-helm-oci-support">Enhanced Helm OCI support&lt;/h3>
&lt;p>The &lt;code>HelmRelease&lt;/code> v2 API comes with a new field
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/helm/helmreleases/#chart-reference">&lt;code>.spec.chartRef&lt;/code>&lt;/a>
that adds support for referencing &lt;code>OCIRepository&lt;/code> and &lt;code>HelmChart&lt;/code> objects in a &lt;code>HelmRelease&lt;/code>.
When using &lt;code>.spec.chartRef&lt;/code> instead of &lt;code>.spec.chart&lt;/code>, the controller allows the reuse
of a Helm chart version across multiple &lt;code>HelmRelease&lt;/code> resources.&lt;/p>
&lt;p>Starting with this version, the recommended way of referencing Helm charts stored
in container registries is through
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/ocirepositories/">OCIRepository&lt;/a>.&lt;/p>
&lt;p>Using &lt;code>OCIRepository&lt;/code> objects instead of &lt;code>HelmRepository&lt;/code>
improves the controller&amp;rsquo;s performance and simplifies the debugging process.
The &lt;code>OCIRepository&lt;/code> provides more flexibility in managing Helm charts,
as it allows targeting a Helm chart version by &lt;code>tag&lt;/code>, &lt;code>semver&lt;/code> or OCI &lt;code>digest&lt;/code> pinning.
If a chart version gets overwritten in the container registry, the controller
will detect the change in the upstream OCI digest and reconcile the &lt;code>HelmRelease&lt;/code>
resources accordingly.&lt;/p>
&lt;p>Example of a &lt;code>HelmRelease&lt;/code> referencing an &lt;code>OCIRepository&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>helm.toolkit.fluxcd.io/v2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HelmRelease&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>10m&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">chartRef&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>enabled&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">values&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">apiService&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">create&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#007020;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#0e84b5;font-weight:bold">---&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>source.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>OCIRepository&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">interval&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>12h&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">layerSelector&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mediaType&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;application/vnd.cncf.helm.chart.content.v1.tar+gzip&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">operation&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>copy&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">url&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>oci://docker.io/bitnamicharts/metrics-server&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ref&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">semver&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#4070a0">&amp;#34;&amp;gt;=7.0.0&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="improved-observability-of-helm-releases">Improved observability of Helm releases&lt;/h3>
&lt;p>By popular demand, the helm-controller now emits Kubernetes events annotated with the Helm chart &lt;code>appVersion&lt;/code>
in addition to the &lt;code>version&lt;/code> info. When configuring
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/notification/alerts/">alerts&lt;/a> for Helm releases,
the &lt;code>appVersion&lt;/code> is now available as a field in the alert metadata and is displayed in the notification messages.
The &lt;code>appVersion&lt;/code> field is also included in the &lt;code>HelmRelease&lt;/code> status, and in the &lt;code>gotk_resource_info&lt;/code> Prometheus metrics.&lt;/p>
&lt;p>When using an &lt;code>OCIRepository&lt;/code> as the &lt;code>HelmRelease&lt;/code> chart source, the controller will also include the OCI
digest of the Helm chart artifact in the Kubernetes events and the &lt;code>HelmRelease&lt;/code> status.&lt;/p>
&lt;h3 id="benchmark-results">Benchmark results&lt;/h3>
&lt;p>To measure the real world impact of the helm-controller GA, we have set up benchmarks that measure
Mean Time To Production (MTTP). The MTTP benchmark measures the time it takes for Flux to deploy
application changes into production. Below are the results of the benchmark that ran on a GitHub
hosted runner (Ubuntu, 16 cores):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Objects&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Flux component&lt;/th>
&lt;th>Duration&lt;/th>
&lt;th>Max Memory&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>25s&lt;/td>
&lt;td>40Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>28s&lt;/td>
&lt;td>190Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>45s&lt;/td>
&lt;td>68Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>2m45s&lt;/td>
&lt;td>250Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>1m30s&lt;/td>
&lt;td>110Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>8m1s&lt;/td>
&lt;td>490Mi&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Compared to Flux v2.2, in this version the memory consumption of the helm-controller
has improved a lot, especially when the cluster has hundreds of CRDs registered.
In Flux v2.2, helm-controller on Kubernetes v1.28 runs out of memory
with only 100 CRDs registered. Whereas, in Flux v2.3 on Kubernetes v1.29, it can handle
500+ CRDs without issues. Given these results, it is recommended
to upgrade the Kubernetes control plane to v1.29 and Flux to v2.3.&lt;/p>
&lt;h2 id="image-update-automation-improvements">Image update automation improvements&lt;/h2>
&lt;p>The &lt;code>ImageUpdateAutomation&lt;/code> API has been promoted to v1beta2 and
the image-automation-controller has been refactored to enhance the reconciliation process.&lt;/p>
&lt;p>The v1beta2 API comes with a new
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/image/imageupdateautomations/#message-template">template model&lt;/a>
that can be used to customize the commit message when the controller updates the
image references in the Git repository. The commit template supports old and new values
for the changes made to the files containing the policy markers.
In addition, the commit message is included in the Kubernetes events emitted by the controller,
offering better visibility into the automation process.&lt;/p>
&lt;p>The &lt;code>ImageUpdateAutomation&lt;/code> API now supports selecting &lt;code>ImagePolicies&lt;/code> using label selectors
in the new field
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/image/imageupdateautomations/#policyselector">&lt;code>.spec.policySelector&lt;/code>&lt;/a>.&lt;/p>
&lt;h3 id="migration-to-v1beta2-template-model">Migration to v1beta2 template model&lt;/h3>
&lt;p>To migrate to the v1beta2 API,
update the &lt;code>apiVersion&lt;/code> field in the &lt;code>ImageUpdateAutomation&lt;/code> resources to &lt;code>image.toolkit.fluxcd.io/v1beta2&lt;/code>,
and modify the &lt;code>messageTemplate&lt;/code> to use the &lt;code>Changed&lt;/code> template data.&lt;/p>
&lt;p>Example template:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>image.toolkit.fluxcd.io/v1beta2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>ImageUpdateAutomation&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&amp;lt;automation-name&amp;gt;&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">git&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">commit&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">messageTemplate&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|-&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> Automated image update
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> Changes:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ range .Changed.Changes -}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - {{ .OldValue }} -&amp;gt; {{ .NewValue }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ end -}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> Files:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ range $filename, $_ := .Changed.FileChanges -}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> - {{ $filename }}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> {{ end -}}&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Example generated commit message:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Automated image update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Changes:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- docker.io/nginx:1.25.4 -&amp;gt; docker.io/nginx:1.25.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- docker.io/org/app:1.0.0 -&amp;gt; docker.io/org/app:1.0.1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Files:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- apps/my-app/deployment.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more examples and details,
see the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/image/imageupdateautomations/#message-template">ImageUpdateAutomation documentation&lt;/a>.&lt;/p>
&lt;h2 id="signatures-verification-with-notation">Signatures verification with Notation&lt;/h2>
&lt;p>The Flux source-controller now supports verifying the authenticity of OCI artifacts signed with
&lt;a href="https://github.com/notaryproject/notation" target="_blank">Notation&lt;/a> (CNCF Notary project).&lt;/p>
&lt;p>To enable Notation signature verification, please see the following documentation:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/helmcharts/#notation">HelmChart verify&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/ocirepositories/#notation">OCIRepository verify&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>In addition, the Flux CLI now supports generating Kubernetes secrets with Notation trust policies,
using the &lt;code>flux create secret notation&lt;/code> command.&lt;/p>
&lt;p>Big thanks to Microsoft for contributing to the development of this feature!&lt;/p>
&lt;h2 id="terraform-provider-improvements">Terraform provider improvements&lt;/h2>
&lt;p>The
&lt;a href="https://github.com/fluxcd/terraform-provider-flux" target="_blank">Flux Terraform provider&lt;/a> has undergone a major refactoring
and now supports air-gapped bootstrap, drift detection and correction for Flux components, and the ability to
upgrade and restore the Flux controllers in-cluster. Starting with this release, the provider is fully
compatible with OpenTofu.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/fluxcd/terraform-provider-flux?tab=readme-ov-file#guides" target="_blank">provider documentation&lt;/a>
has been updated with examples and detailed usage instructions.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">New maintainer&lt;/h4>
We are very happy to announce that
&lt;a href="https://github.com/swade1987" target="_blank">Steven Wade&lt;/a> has joined the Flux project
as a maintainer of the Terraform provider. Steven has been a long-time contributor to the Flux project
and we are excited to have him on board!
&lt;/div>
&lt;h2 id="controllers-improvements">Controllers improvements&lt;/h2>
&lt;ul>
&lt;li>The Flux &lt;code>Kustomization&lt;/code> API gains two optional fields &lt;code>.spec.namePrefix&lt;/code> and &lt;code>.spec.nameSuffix&lt;/code>
that can be used to specify a prefix and suffix to be added to the names of all managed resources.&lt;/li>
&lt;li>The kustomize-controller now supports the &lt;code>--feature-gates=StrictPostBuildSubstitutions=true&lt;/code>
flag, when enabled the post-build substitutions will fail if a variable without a default value is
declared in files but is missing from the input vars.&lt;/li>
&lt;li>The notification-controller &lt;code>Receiver&lt;/code> API has been extended to support
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/notification/receivers/#cdevents">CDEvents&lt;/a>.&lt;/li>
&lt;li>The &lt;code>OCIRepository&lt;/code> API has been extended with support for
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source/ocirepositories/#semverfilter-example">semver filtering&lt;/a>.&lt;/li>
&lt;li>The &lt;code>HelmChart&lt;/code> API v1 comes with a new optional field
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/components/source//helmcharts/#ignore-missing-values-files">&lt;code>.spec.ignoreMissingValuesFiles&lt;/code>&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h2 id="cli-improvements">CLI improvements&lt;/h2>
&lt;ul>
&lt;li>The bootstrap capabilities have been extended to support
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/installation/bootstrap/oracle-vbs-git-repositories/">Oracle VBS&lt;/a> repositories.&lt;/li>
&lt;li>The bootstrap procedure for
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/installation/bootstrap/azure-devops/#bootstrap-using-ssh-keys">Azure DevOps&lt;/a> repositories has been update with support for SSH RSA SHA-2 keys.&lt;/li>
&lt;li>The &lt;code>flux bootstrap&lt;/code> command gains a new flag &lt;code>--ssh-hostkey-algos&lt;/code> that can be used to specify the host key algorithms to be used for SSH connections.&lt;/li>
&lt;li>The &lt;code>flux bootstrap&lt;/code> and &lt;code>flux install&lt;/code> commands now support the &lt;code>--registry-creds&lt;/code> flag that can be used for generating an image pull secret for container images stored in private registries.&lt;/li>
&lt;li>A new command was added, &lt;code>flux envsubst&lt;/code> that can be used to replicate the behavior of the Flux &lt;code>Kustomization&lt;/code> post-build substitutions.&lt;/li>
&lt;li>The &lt;code>flux create source oci&lt;/code> command now supports the &lt;code>--verify-subject&lt;/code> and &lt;code>--verify-issuer&lt;/code> for cosign keyless verification.&lt;/li>
&lt;li>New commands were added for managing HelmChart objects: &lt;code>flux create|delete|export source chart&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="breaking-changes-and-deprecations">Breaking changes and deprecations&lt;/h2>
&lt;p>Deprecated fields have been removed from the &lt;code>HelmRelease&lt;/code> v2 API:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.spec.chart.spec.valuesFile&lt;/code> replaced by &lt;code>.spec.chart.spec.valuesFiles&lt;/code>&lt;/li>
&lt;li>&lt;code>.spec.postRenderers.kustomize.patchesJson6902&lt;/code> replaced by &lt;code>.spec.postRenderers.kustomize.patches&lt;/code>&lt;/li>
&lt;li>&lt;code>.spec.postRenderers.kustomize.patchesStrategicMerge&lt;/code> replaced by &lt;code>.spec.postRenderers.kustomize.patches&lt;/code>&lt;/li>
&lt;li>&lt;code>.status.lastAppliedRevision&lt;/code> replaced by &lt;code>.status.history.chartVersion&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>The following APIs have been deprecated and will be removed in a future release:&lt;/p>
&lt;ul>
&lt;li>&lt;code>HelmRelease&lt;/code> v2beta2 and v2beta1&lt;/li>
&lt;li>&lt;code>HelmChart&lt;/code> v1beta2 and v1beta1&lt;/li>
&lt;li>&lt;code>HelmRepository&lt;/code> v1beta2 and v1beta1&lt;/li>
&lt;li>&lt;code>ImageUpdateAutomation&lt;/code> v1beta1&lt;/li>
&lt;/ul>
&lt;h2 id="supported-versions">Supported versions&lt;/h2>
&lt;p>Flux v2.0 has reached end-of-life and is no longer supported.&lt;/p>
&lt;p>Flux v2.3 supports the following Kubernetes versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Distribution&lt;/th>
&lt;th style="text-align:left">Versions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Kubernetes&lt;/td>
&lt;td style="text-align:left">1.28, 1.29, 1.30&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">OpenShift&lt;/td>
&lt;td style="text-align:left">4.15&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Flux v2.3 is the first release end-to-end tested on OpenShift. Big thanks to
&lt;a href="https://www.replicated.com/" target="_blank">Replicated&lt;/a> for sponsoring the Flux project
with on-demand OpenShift clusters. For more information on how to bootstrap Flux on OpenShift,
see the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/installation/configuration/openshift/">OpenShift installation guide&lt;/a>.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Enterprise support&lt;/h4>
&lt;p>Note that the CNCF Flux project offers support only for the latest
three minor versions of Kubernetes.&lt;/p>
&lt;p>Backwards compatibility with older versions of Kubernetes and OpenShift is offered by vendors
such as
&lt;a href="https://control-plane.io/enterprise-for-flux-cd/" target="_blank">ControlPlane&lt;/a> that provide
enterprise support for Flux.&lt;/p>
&lt;/div>
&lt;h2 id="installing-or-upgrading-flux">Installing or upgrading Flux&lt;/h2>
&lt;p>To install Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/installation/" target="_blank">installation&lt;/a> and
&lt;a href="https://fluxcd.io/flux/get-started/" target="_blank">get started&lt;/a> guides.&lt;/p>
&lt;p>To upgrade Flux from &lt;code>v2.x&lt;/code> to &lt;code>v2.3.0&lt;/code>, either
&lt;a href="https://fluxcd.io/flux/installation/#bootstrap-upgrade" target="_blank">rerun &lt;code>flux bootstrap&lt;/code>&lt;/a>
or use the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action" target="_blank">Flux GitHub Action&lt;/a>.&lt;/p>
&lt;p>To upgrade the APIs in the manifests stored in Git:&lt;/p>
&lt;ol>
&lt;li>Before upgrading, ensure that the &lt;code>HelmRelease&lt;/code> v2beta2 YAML manifests
are not using deprecated fields. Search for &lt;code>valuesFile&lt;/code> and replace it with &lt;code>valuesFiles&lt;/code>,
replace &lt;code>patchesJson6902&lt;/code> and &lt;code>patchesStrategicMerge&lt;/code> with &lt;code>patches&lt;/code>.&lt;/li>
&lt;li>Commit and push the changes to the Git repository, then wait for Flux to reconcile the changes.&lt;/li>
&lt;li>Upgrade the controllers and CRDs on the cluster using Flux v2.3 release.&lt;/li>
&lt;li>Update the &lt;code>apiVersion&lt;/code> field of the &lt;code>HelmRelease&lt;/code> resources to &lt;code>helm.toolkit.fluxcd.io/v2&lt;/code>.&lt;/li>
&lt;li>Update the &lt;code>apiVersion&lt;/code> field of the &lt;code>HelmRepository&lt;/code> resources to &lt;code>source.toolkit.fluxcd.io/v1&lt;/code>.&lt;/li>
&lt;li>Update the &lt;code>apiVersion&lt;/code> field of the &lt;code>ImageUpdateAutomation&lt;/code> resources to &lt;code>image.toolkit.fluxcd.io/v1beta2&lt;/code>.&lt;/li>
&lt;li>Commit and push the changes to the Git repository.&lt;/li>
&lt;/ol>
&lt;p>Bumping the APIs version in manifests can be done gradually.
It is advised to not delay this procedure as the deprecated versions will be removed after 6 months.&lt;/p>
&lt;h2 id="whats-next-for-flux">What&amp;rsquo;s next for Flux?&lt;/h2>
&lt;p>The next milestone for the Flux project is v2.4, which is planned for Q3 2024
and will focus on the image automation APIs and S3-compatible storage APIs.
For more details on the upcoming features and improvements, see the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/roadmap/">Flux project roadmap&lt;/a>.&lt;/p>
&lt;p>After the introduction of OCI Artifacts in 2022, we had a recurring ask from users about improving
the UX of running Flux fully decoupled from Git. In response, we made a proposal for a
&lt;code>flux bootstrap oci&lt;/code> command and a new Terraform/OpenTofu provider that relies on
container registries as the unified data storage for the desired state of Kubernetes clusters.
The RFC can be found at
&lt;a href="https://github.com/fluxcd/flux2/pull/4749" target="_blank">fluxcd/flux2#4749&lt;/a> and we
welcome feedback from the community.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved,
here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Flux project gains New Corporate Support and Ecosystem in 2024</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/03/flux-project-gains-new-corporate-support-and-ecosystem-in-2024/</link><pubDate>Tue, 19 Mar 2024 08:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2024/03/flux-project-gains-new-corporate-support-and-ecosystem-in-2024/</guid><description>
&lt;p>The CNCF graduated Flux project is proud to announce that it will receive
enhanced support from dedicated companies in 2024.
These organizations are committed to the ongoing maintenance
and development of Flux GitOps tools.
&lt;a href="https://fluxcd.io/kubecon/" target="_blank">At KubeCon EU 2024 in Paris, the Flux project has keynote highlights, sessions, and a booth.&lt;/a>&lt;/p>
&lt;h2 id="vendors-and-clouds-are-stepping-up-contributions">Vendors and clouds are stepping up contributions&lt;/h2>
&lt;p>Major vendors are ramping up their ecosystem involvement in Flux moving forward.
&lt;a href="https://about.gitlab.com/blog/2024/03/05/the-continued-support-of-fluxcd-at-gitlab/" target="_blank">GitLab announced its continued support for Flux&lt;/a> and working with partners.
In early 2023, GitLab integrated Flux with its agent for Kubernetes offering as the recommended GitOps solution.&lt;/p>
&lt;p>Similarly, Flux continues to be the GitOps engine for cloud vendors such as Microsoft and AWS.
Lachie Evenson at Microsoft affirms that &amp;ldquo;Flux is the engine that powers several GitOps
experiences on Azure as well as in our customer’s environments&amp;rsquo; and that Microsoft
is committed to upstream contributions.&lt;/p>
&lt;blockquote>
&lt;p>Flux is the engine that powers several GitOps experiences on Azure
as well as in our customer’s environments. We will continue to invest
in Flux through upstream contributions for the long-term health and
support of the project, and downstream partnerships to help customers&lt;/p>
&lt;p>Lachie Evenson, Principal PDM Manager – Cloud Native Ecosystem, Microsoft&lt;/p>
&lt;/blockquote>
&lt;p>Both Azure and AWS use Flux to streamline
Kubernetes cluster and application management, adopting GitOps principles
for enhanced automation, security, and reliability in cloud-native application
deployments for Azure Arc Kubernetes and EKS-Anywhere.&lt;/p>
&lt;h2 id="new-enterprise-adopters-silva-project-cisco-tchibo-and-more">New Enterprise adopters: Silva project, Cisco, Tchibo, and more&lt;/h2>
&lt;p>Flux’s significant benefits show in its widespread adoption by large-scale
enterprises across various sectors, including telecommunications and financial services.
The new Sylva project showcases
&lt;a href="https://sylva-projects.gitlab.io/release-note/" target="_blank">the critical role of Flux for its complex telecom cloud native environments&lt;/a>.
Sylva streamlines the management of Kubernetes workload clusters, specifically designed
to deploy Containerized Network Functions (CNF) provided by both external CNF vendors
and telecom operators&amp;rsquo; in-house services. As Orange VP of Software Engineering affirms,
Flux’s security, modularity, resilience, and community all contribute to how it is the GitOps framework of choice.&lt;/p>
&lt;blockquote>
&lt;p>We are really happy to observe new big tech shops bringing their support to Flux.
It should give to everyone the confidence to keep committing and investing.
The level of quality and security, and the modularity of Flux have been prime
reasons for our decision to use it two years ago to automate the deployment
and lifecycle management of network functions. Our Linux Foundation Sylva-based
cloud native infrastructure relies on the strength and resilience of the Flux community.
Flux’s technology and community make it the GitOps framework in our Telco networks.&lt;/p>
&lt;p>Philippe Ensarguet, VP Software Engineering, Orange&lt;/p>
&lt;/blockquote>
&lt;p>Other long-time Flux
&lt;a href="https://fluxcd.io/adopters/" target="_blank">adopters&lt;/a> who have added themselves to the public
list recently include Cisco and German retailer, Tchibo.&lt;/p>
&lt;h2 id="new-support-and-ecosystem-hirings-and-value-add-extensions">New Support and Ecosystem: Hirings and Value-Add Extensions&lt;/h2>
&lt;p>While several ecosystem companies are coordinating to step up as maintainers,
contributors, and supporters of Flux,
&lt;a href="https://control-plane.io/posts/controlplane-backs-the-cncf-flux-project-by-employing-maintainers/" target="_blank">ControlPlane was first to hire Stefan Prodan&lt;/a> (Flux project maintainer and architect as well as Flagger creator)
and Soulé Ba (core maintainer) to continue their contributions.
As ControlPlane CEO, Andrew Martin, has reinforced their commitment to help maintain the project,
which is part of their offering of an enterprise-grade distribution of Flux,
including support services for critical system.&lt;/p>
&lt;blockquote>
&lt;p>ControlPlane is delighted to continue supporting the Flux project for all users,
and to provide organisations utilising Flux with access to a hardened,
FIPS-compliant, enterprise-grade distribution of Flux.&lt;/p>
&lt;p>Andrew Martin, CEO, ControlPlane&lt;/p>
&lt;/blockquote>
&lt;p>In addition, companies such as Aviator, OpsMX, OpsWorks Group,
OSO and Teracloud began providing support for Flux among their offerings.&lt;/p>
&lt;p>At KubeCon EU 2024 in Paris, these and other companies in the ecosystem
will meet at a
&lt;a href="https://kccnceu2024.sched.com/event/1akzm?iframe=no" target="_blank">Birds of a Feather meeting&lt;/a>
to kick off further commitments
to add value to Flux’s extensibility and ecosystem reach.&lt;/p>
&lt;h2 id="cloud-native-computing-foundation-exemplar-project">Cloud Native Computing Foundation Exemplar Project&lt;/h2>
&lt;p>At this juncture, the Flux project is a strong graduated project within the
Cloud Native Computing Foundation with continued recognition from CNCF CTO,
Chris Aniszczyk, who states how Flux exemplifies the strength and resilience of the community.
Flux reached General Availability in December 2023 and blew through its
second security audit with the CNCF with no CVEs.
The project’s published
&lt;a href="https://fluxcd.io/blog/2023/12/flux-v2.2.0/#benchmark-results" target="_blank">benchmarks&lt;/a>
results demonstrate why cloud vendors
and enterprises alike have been trusting Flux with their needs for scale.&lt;/p>
&lt;blockquote>
&lt;p>I am glad to see the continued support across the open source cloud native community for Flux.
I encourage other organizations to get involved as there&amp;rsquo;s never a bad time to contribute
to an open source project you depend on. Also, this is a great example of the strength
and resilience of our community and we look forward to Flux&amp;rsquo;s continued evolution and growth.&lt;/p>
&lt;p>Chris Aniszczyk, CTO, CNCF&lt;/p>
&lt;/blockquote>
&lt;p>If you’re at KubeCon in Paris this week, visit the
&lt;a href="https://fluxcd.io/kubecon/" target="_blank">Flux project booth and the many sessions,&lt;/a>
including Stefan’s maintainer talk on the
&lt;a href="https://github.com/fluxcd/flux2/discussions/4663" target="_blank">Flux roadmap&lt;/a> at the event.&lt;/p></description></item><item><title>Blog: Announcing Flux 2.2 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/12/flux-v2.2.0/</link><pubDate>Tue, 12 Dec 2023 15:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/12/flux-v2.2.0/</guid><description>
&lt;p>We are thrilled to announce the release of
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.2.0" target="_blank">Flux v2.2.0&lt;/a>! In this post, we will highlight some of the new features and improvements included in this release, with the primary theme being the many changes made to the
&lt;a href="https://fluxcd.io/flux/components/helm/" target="_blank">helm-controller&lt;/a>.&lt;/p>
&lt;p>This new release will also be demoed by Priyanka &amp;ldquo;Pinky&amp;rdquo; Ravi and Max Werner on Monday, December 18. To attend this demo and ask any questions,
&lt;a href="https://www.meetup.com/weave-user-group/events/297818586/" target="_blank">you can register here&lt;/a>.&lt;/p>
&lt;h2 id="important-things-first-api-changes">Important things first: API changes&lt;/h2>
&lt;p>This release is accompanied by a series of (backwards compatible) API changes and introductions. Please refer to the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.2.0" target="_blank">release notes&lt;/a> for a comprehensive list, and make sure to read them before updating your Flux installation.&lt;/p>
&lt;h2 id="enhanced-helmrelease-reconciliation-model">Enhanced &lt;code>HelmRelease&lt;/code> reconciliation model&lt;/h2>
&lt;p>The reconciliation model of the helm-controller has been rewritten to be able to better determine the state a Helm release is in, to then decide what Helm action should be performed to reach the desired state.&lt;/p>
&lt;p>Effectively, this means that the controller is now capable of continuing where it left off, and to run
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#test-configuration" target="_blank">Helm tests&lt;/a> as soon as they are enabled without a Helm upgrade having to take place first.&lt;/p>
&lt;p>In addition, it now takes note of releases &lt;em>while they are happening&lt;/em>, instead of making observations &lt;em>afterward&lt;/em>. Ensuring that when performing a rollback remediation, the version we revert to is always exactly the same as the one previously released by the controller. In cases where it is uncertain about state, it will always decide to (reattempt to) perform a Helm upgrade.&lt;/p>
&lt;p>This also allows it with certainty to only count release attempts that did cause a mutation to the Helm storage as failures towards retry attempts, improving continuity due to it retrying instantly instead of remediating first.&lt;/p>
&lt;h2 id="improved-observability-of-helm-releases">Improved observability of Helm releases&lt;/h2>
&lt;p>An additional thing the enhanced reconciliation model allowed us to work on is making improvements to how we report state back to you, as a user.&lt;/p>
&lt;p>The improvements range from the introduction of &lt;code>Reconciling&lt;/code> and &lt;code>Stalled&lt;/code> Condition types to become
&lt;a href="https://github.com/kubernetes-sigs/cli-utils/tree/master/pkg/kstatus" target="_blank">&lt;code>kstatus&lt;/code> compatible&lt;/a>, to an enriched overview of Helm releases up to the previous successful release in the Status, and more informative Kubernetes Event and Condition messages.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-console" data-lang="console">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888">Events:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Type Reason Age From Message
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> ---- ------ ---- ---- -------
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal HelmChartCreated 25s helm-controller Created HelmChart/demo/demo-podinfo with SourceRef &amp;#39;HelmRepository/demo/podinfo&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal InstallSucceeded 20s helm-controller Helm install succeeded for release demo/podinfo.v1 with chart podinfo@6.5.3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888"> Normal TestSucceeded 12s helm-controller Helm test succeeded for release demo/podinfo.v1 with chart podinfo@6.5.3: 3 test hooks completed successfully
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more details around these changes, refer to the
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#helmrelease-status" target="_blank">Status section&lt;/a> in the HelmRelease v2beta2 specification.&lt;/p>
&lt;h2 id="recovery-from-pending--helm-release-state">Recovery from &lt;code>pending-*&lt;/code> Helm release state&lt;/h2>
&lt;p>A much-reported issue was the helm-controller being unable to recover from &lt;code>another operation (install/upgrade/rollback) is in progress&lt;/code> errors, which could occur when the controller Pod was forcefully killed. From this release on, the controller will recover from such errors by unlocking the Helm release from a &lt;code>pending-*&lt;/code> to a &lt;code>failed&lt;/code> state, and retrying it with a Helm upgrade.&lt;/p>
&lt;h2 id="helm-release-drift-detection-and-correction">Helm Release drift detection and correction&lt;/h2>
&lt;p>Around April we launched cluster state drift detection and correction for Helm releases as an experimental feature. At that time, it could only be enabled using a controller global feature flag, making it impractical to use at scale due to the wide variability in charts and unpredictability of the effects on some Helm charts.&lt;/p>
&lt;p>For charts with lifecycle hooks, or cluster resources like Horizontal/Vertical Pod Autoscalers for which controllers may write updates back into their own spec, those updates would always be considered as drift by the helm-controller unless the resource would be ignored in full.&lt;/p>
&lt;p>To address the above pain points, Helm drift detection can now be enabled on the &lt;code>HelmRelease&lt;/code> itself, while also allowing you to ignore specific fields using
&lt;a href="https://datatracker.ietf.org/doc/html/rfc6901" target="_blank">JSON Pointers&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">driftDetection&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>enabled&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">ignore&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">paths&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#4070a0">&amp;#34;/spec/replicas&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">target&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>Deployment&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using these settings, any drift detected will now be corrected by recreating and patching the Kubernetes objects (instead of doing a Helm upgrade) while changes to the &lt;code>.spec.replicas&lt;/code> fields for Deployments will be ignored.&lt;/p>
&lt;p>For more information, refer to the
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#drift-detection" target="_blank">drift detection section&lt;/a> in the HelmRelease v2beta2 specifiation.&lt;/p>
&lt;h2 id="forcing-and-retrying-helm-releases">Forcing and retrying Helm releases&lt;/h2>
&lt;p>Another much-reported issue was the impractical steps one had to take to recover from &amp;ldquo;retries exhausted&amp;rdquo; errors. To instruct the helm-controller to retry installing or upgrading a Helm release when it is out of retries, you can now either:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Instruct it to reset the failure counts, allowing it to retry the number of times as configured in the remediation strategy&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux reconcile helmrelease &amp;lt;release&amp;gt; --reset
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Instruct it to force a one-off Helm install or upgrade&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>flux reconcile helmrelease &amp;lt;release&amp;gt; --force
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>For in-depth explanations about these new command options, refer to the
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#resetting-remediation-retries" target="_blank">&amp;ldquo;resetting remediation retries&amp;rdquo;&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/helm/helmreleases/#forcing-a-release" target="_blank">&amp;ldquo;forcing a release&amp;rdquo;&lt;/a> sections in the HelmRelease v2beta2 specification.&lt;/p>
&lt;h2 id="benchmark-results">Benchmark results&lt;/h2>
&lt;p>To measure the real world impact of the helm-controller overhaul, we have set up benchmarks that measure Mean Time To Production (MTTP). The MTTP benchmark measures the time it takes for Flux to deploy application changes into production. Below are the results of the benchmark that ran on a GitHub hosted runner (Ubuntu, 16 cores):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Objects&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Flux component&lt;/th>
&lt;th>Duration&lt;/th>
&lt;th>Max Memory&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>OCIRepository&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>25s&lt;/td>
&lt;td>38Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>Kustomization&lt;/td>
&lt;td>kustomize-controller&lt;/td>
&lt;td>27s&lt;/td>
&lt;td>32Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>25s&lt;/td>
&lt;td>40Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>31s&lt;/td>
&lt;td>140Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>OCIRepository&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>45s&lt;/td>
&lt;td>65Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>Kustomization&lt;/td>
&lt;td>kustomize-controller&lt;/td>
&lt;td>2m2s&lt;/td>
&lt;td>72Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>45s&lt;/td>
&lt;td>68Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>500&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>2m55s&lt;/td>
&lt;td>350Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>OCIRepository&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>1m30s&lt;/td>
&lt;td>67Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>Kustomization&lt;/td>
&lt;td>kustomize-controller&lt;/td>
&lt;td>4m15s&lt;/td>
&lt;td>112Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmChart&lt;/td>
&lt;td>source-controller&lt;/td>
&lt;td>1m30s&lt;/td>
&lt;td>110Mi&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>1000&lt;/td>
&lt;td>HelmRelease&lt;/td>
&lt;td>helm-controller&lt;/td>
&lt;td>8m2s&lt;/td>
&lt;td>620Mi&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>The benchmark uses a single application (
&lt;a href="https://github.com/stefanprodan/podinfo" target="_blank">podinfo&lt;/a>) for all tests with intervals set to &lt;code>60m&lt;/code>. The results may change when deploying Flux objects with a different configuration.&lt;/p>
&lt;/blockquote>
&lt;p>For more information about the benchmark setup and how you can run them on your machine, check out the
&lt;a href="https://github.com/fluxcd/flux-benchmark" target="_blank">fluxcd/flux-benchmark&lt;/a> repository.&lt;/p>
&lt;h2 id="breaking-changes-to-kustomizations">Breaking changes to Kustomizations&lt;/h2>
&lt;p>All Flux components have been updated from Kustomize v5.0.3 to
&lt;a href="https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.3.0" target="_blank">v5.3.0&lt;/a>.&lt;/p>
&lt;p>You should be aware that this update comes with a breaking change in Kustomize, as components are now applied after generators. If you use Kustomize components or &lt;code>.spec.components&lt;/code> in Kustomizations along with generators, then please make necessary changes before upgrading to avoid any undesirable behavior. For more information, see the relevant
&lt;a href="https://github.com/kubernetes-sigs/kustomize/issues/5141" target="_blank">Kustomize issue&lt;/a>.&lt;/p>
&lt;h2 id="other-notable-changes">Other notable changes&lt;/h2>
&lt;ul>
&lt;li>&lt;code>flux install&lt;/code> and &lt;code>flux bootstrap&lt;/code> now have guardrails to protect users from destructive operations.&lt;/li>
&lt;li>Gitea support has been added to &lt;code>flux bootstrap&lt;/code>. To bootstrap Flux onto a cluster using Gitea as the Git provider, run &lt;code>flux bootstrap gitea --repository &amp;lt;repo&amp;gt; --owner &amp;lt;owner&amp;gt;&lt;/code>.&lt;/li>
&lt;li>The OIDC issuer and identity subject can now be verified for images signed using Cosign. Refer to the
&lt;a href="https://fluxcd.io/flux/components/source/helmcharts/#keyless-verification" target="_blank">HelmChart&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/source/ocirepositories/#keyless-verification" target="_blank">OCIRepository&lt;/a> specifications for more information.&lt;/li>
&lt;li>
&lt;a href="https://fluxcd.io/flux/components/source/buckets/#prefix" target="_blank">Prefix based file filtering&lt;/a> support has been added to the Bucket API for &lt;code>generic&lt;/code>, &lt;code>aws&lt;/code> and &lt;code>gcp&lt;/code> providers.&lt;/li>
&lt;li>Support for insecure (non-TLS HTTP) container registries has been added to the
&lt;a href="https://fluxcd.io/flux/components/image/imagerepositories/#insecure" target="_blank">ImageRepository&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/source/helmrepositories/#insecure" target="_blank">HelmRepository&lt;/a> APIs.&lt;/li>
&lt;li>The Flux alerting capabilities have been extended with
&lt;a href="https://fluxcd.io/flux/components/notification/provider/#nats" target="_blank">NATS&lt;/a> and
&lt;a href="https://fluxcd.io/flux/components/notification/provider/#bitbucket-serverdata-center" target="_blank">Bitbucket Server &amp;amp; Data Center&lt;/a> support.&lt;/li>
&lt;/ul>
&lt;h2 id="installing-or-upgrading-flux">Installing or upgrading Flux&lt;/h2>
&lt;p>To install Flux, take a look at our
&lt;a href="https://fluxcd.io/flux/installation/" target="_blank">installation&lt;/a> and
&lt;a href="https://fluxcd.io/flux/get-started/" target="_blank">get started&lt;/a> guides.&lt;/p>
&lt;p>To upgrade Flux from &lt;code>v2.x&lt;/code> to &lt;code>v2.2.0&lt;/code>, either
&lt;a href="https://fluxcd.io/flux/installation/#bootstrap-upgrade" target="_blank">rerun &lt;code>flux bootstrap&lt;/code>&lt;/a> or use the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action" target="_blank">Flux GitHub Action&lt;/a>.&lt;/p>
&lt;p>To upgrade the APIs, make sure the new Custom Resource Definitions and controllers are deployed, and then change the manifests in Git:&lt;/p>
&lt;ol>
&lt;li>Set &lt;code>apiVersion: helm.toolkit.fluxcd.io/v2beta2&lt;/code> in the YAML files that contain &lt;code>HelmRelease&lt;/code> definitions.&lt;/li>
&lt;li>Set &lt;code>apiVersion: notification.toolkit.fluxcd.io/v1beta3&lt;/code> in the YAML files that contain &lt;code>Alert&lt;/code> and &lt;code>Provider&lt;/code> definitions.&lt;/li>
&lt;li>Commit, push and reconcile the API version changes.&lt;/li>
&lt;/ol>
&lt;p>Bumping the APIs version in manifests can be done gradually. It is advised to not delay this procedure as the deprecated versions will be removed after 6 months.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you have any questions, or simply just like what you read and want to get involved. Here are a few good ways to reach us:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you need help with.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, or join the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Blog: Second Flux Security Audit has concluded</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/11/flux-security-audit/</link><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/11/flux-security-audit/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/11/flux-security-audit/featured-image_hudd23c93a0b637265205ddee09c3d9da3_82354_640x0_resize_box_3.png" width="640" height="185"/>
&lt;p>Precisely 2 years after
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/11/flux-security-audit/">performing our first security Audit&lt;/a>,
we had the chance to put Flux through a second audit this year, again
facilitated by the CNCF and the
&lt;a href="https://ostif.org/" target="_blank">Open Source Technology Improvement Fund&lt;/a>.
&lt;a href="https://www.trailofbits.com/" target="_blank">Trail of Bits&lt;/a> partnered with us this time
to make Flux even more secure. Flux passed the &amp;ldquo;General Availability&amp;rdquo;
milestone earlier this year and the focus was on the features shipped in
the Flux GA release.&lt;/p>
&lt;p>The Flux maintainers and community are very grateful for the work put
into this by everyone and the opportunity to grow and improve as a
project. Thanks to Trail of Bits, notably Maciej Domański, Sam Alws, Sam Greenup and Jeff Braswell, who have always been extremely responsive during the process.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="TOB, CNCF, OSTIF">&lt;/p>
&lt;h2 id="no-new-cves">No new CVEs&lt;/h2>
&lt;p>Good news first: No new CVEs have been published for Flux in response to
this second audit. Trail of Bits highlight that they found Flux was &amp;ldquo;well
structured and generally written defensively&amp;rdquo; and the &amp;ldquo;audit uncovered
only low- and informational-severity findings&amp;rdquo;, 10 in total. 8 of the
discovered issues have been fixed as of publication of this announcement. From the remaining two issues to be fixed, one is in the process of being resolved and for the other one we have decided to accept the very low risk due to reasons mentioned in the report.&lt;/p>
&lt;p>The assessment was kicked off with a list of 23 questions to be answered,
circling around potential data leaks, security documentation, access
control or denial of service vulnerabilities. Since the focus was on the
GA components, the following parts of Flux have been put under scrutiny:&lt;/p>
&lt;ul>
&lt;li>source-controller&lt;/li>
&lt;li>kustomize-controller&lt;/li>
&lt;li>notification-controller&lt;/li>
&lt;li>Flux CLI&lt;/li>
&lt;li>The &lt;code>pkg&lt;/code> library, and &lt;code>git/gogit/fs&lt;/code> in particular&lt;/li>
&lt;/ul>
&lt;h2 id="details-on-the-discovered-issues">Details on the discovered issues&lt;/h2>
&lt;p>You will find the full report
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux-security-report-with-review-2023.pdf">here&lt;/a>. The following table shows all the findings together with links to the pull requests fixing them:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Issue&lt;/th>
&lt;th>Severity&lt;/th>
&lt;th>Fix&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1: SetExpiration does not set the expiration for the given key&lt;/td>
&lt;td>low&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/source-controller/pull/1185" target="_blank">source-controller#1185&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2: Inappropriate string trimming function&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/notification-controller/pull/590" target="_blank">notification-controller#590&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3: Go’s default HTTP client uses a shared value that can be modified by other components&lt;/td>
&lt;td>low&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/pull/4182" target="_blank">flux2#4182&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4: Unhandled error value&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/pull/4181" target="_blank">flux2#4181&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5: Potential implicit memory aliasing in for loops&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/source-controller/pull/1257" target="_blank">source-controller#1257&lt;/a>,
&lt;a href="https://github.com/fluxcd/notification-controller/pull/627" target="_blank">notification-controller#627&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/pull/4329" target="_blank">flux2#4329&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6: Directories created via os.MkdirAll are not checked for permissions&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>n/a&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7: Directories and files created with overly lenient permissions&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/pkg/pull/663" target="_blank">pkg#663&lt;/a>,
&lt;a href="https://github.com/fluxcd/pkg/pull/681" target="_blank">pkg#681&lt;/a>,
&lt;a href="https://github.com/fluxcd/source-controller/pull/1276" target="_blank">source-controller#1276&lt;/a>,
&lt;a href="https://github.com/fluxcd/kustomize-controller/pull/1005" target="_blank">kustomize-controller#1005&lt;/a>,
&lt;a href="https://github.com/fluxcd/flux2/pull/4380" target="_blank">flux2#4380&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8: No restriction on minimum SSH RSA public key bit size&lt;/td>
&lt;td>informational&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/flux2/pull/4177" target="_blank">flux2#4177&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>9: Flux macOS release binary susceptible to dylib injection&lt;/td>
&lt;td>low&lt;/td>
&lt;td>in progress&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10: Path traversal in SecureJoin implementation&lt;/td>
&lt;td>undetermined&lt;/td>
&lt;td>
&lt;a href="https://github.com/fluxcd/pkg/pull/650" target="_blank">pkg#650&lt;/a>,
&lt;a href="https://github.com/go-git/go-billy/pull/31" target="_blank">go-git/go-billy#31&lt;/a>,
&lt;a href="https://github.com/go-git/go-billy/pull/34" target="_blank">go-git/go-billy#34&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>In addition to the pull requests linked above we also enabled security
and quality CI checks through CodeQL via
&lt;a href="https://github.com/fluxcd/flux2/issues/4121" target="_blank">flux2#4121&lt;/a> to prevent any avoidable regressions.&lt;/p>
&lt;h2 id="conclusion-and-next-steps">Conclusion and next steps&lt;/h2>
&lt;p>From our perspective as Flux maintainers, 2 years feel like a lifetime. We added lots of new features and fixed even more bugs in that timeframe. That&amp;rsquo;s why we
are particularly grateful that CNCF and OSTIF gave us the opportunity to
let a team of security experts assess Flux another time. We are proud
of having been able to learn from the first assessment and kept on making
Flux more and more secure over these past 2 years, leading to only low-
and informational-severity security findings within the GA components of
Flux.&lt;/p>
&lt;p>Our
&lt;a href="https://fluxcd.io/roadmap/#flux-helm-ga-q3-2023" target="_blank">next milestone&lt;/a> is the general availability of Flux’s Helm features and the subsequent general availability of the remaining Flux components. If you are interested in contributing to this, we are very much looking forward to working with you. We welcome contributions in helping resolve issues of the road, additional comments on our security posture and also
welcome contributions in the form of extending our fuzzing
infrastructure. Finally, if you have any additional security feedback,
please come and talk to us.&lt;/p>
&lt;p>Again we would like to thank the Cloud Native Computing Foundation for
sponsoring the audit, the Open Source Technology Improvement Fund for
the coordination and Trail of Bits for the careful review and advice
during the audit period.&lt;/p>
&lt;p>We are happy and proud to be part of this community!&lt;/p></description></item><item><title>Blog: Announcing Flux 2.1 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/</link><pubDate>Mon, 04 Sep 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/</guid><description>
&lt;h2 id="new-releases">New releases&lt;/h2>
&lt;p>We are happy to announce the latest GA releases for Flux and Flagger.&lt;/p>
&lt;h3 id="flux-v210">Flux v2.1.0&lt;/h3>
&lt;p>This new release comes with lots of new features,
fixes, restructured documentation and performance improvements.
Everyone is encouraged to upgrade for the best experience.&lt;/p>
&lt;p>The
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.1.0#api-changes" target="_blank">Flux APIs&lt;/a>
were extended with new opt-in features in a backwards-compatible manner.&lt;/p>
&lt;p>The Flux Git capabilities have been improved with support for
Git push options, Git refspec, Gerrit, HTTP/S and SOCKS5 proxies.&lt;/p>
&lt;p>In case you missed it, Flux reached General Availability in June.
You can read the announcement
&lt;a href="https://fluxcd.io/blog/2023/07/flux-ga/" target="_blank">here&lt;/a>.&lt;/p>
&lt;p>You can now check the end-of-life(EOL) dates and support information for
different Flux versions at
&lt;a href="https://endoflife.date/flux" target="_blank">https://endoflife.date/flux&lt;/a>.&lt;/p>
&lt;h4 id="features">Features&lt;/h4>
&lt;ul>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#proxy-secret-reference" target="_blank">GitRepository API&lt;/a>
has a new field &lt;code>.spec.proxySecretRef&lt;/code> that is used for specifying proxy configuration to use
for all remote Git operations related to the particular object.&lt;/li>
&lt;li>The&lt;code>.spec.verify.mode&lt;/code> field of the
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#verification" target="_blank">GitRepository API&lt;/a>
now accepts one of the following values &lt;code>HEAD&lt;/code>, &lt;code>Tag&lt;/code>, &lt;code>TagAndHEAD&lt;/code>. These values are used to specify
how the Git tags and commits are verified.&lt;/li>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/kustomize/kustomizations/#controlling-the-apply-behavior-of-resources" target="_blank">server-side apply behaviour&lt;/a>
in the kustomize-controller has been extended with two extra policies:
&lt;code>IfNotPresent&lt;/code> and &lt;code>Ignore&lt;/code>. These policies are specified with the &lt;code>kustomize.toolkit.fluxcd.io/ssa&lt;/code>
annotation on the resource manifest. The &lt;code>IfNotPresent&lt;/code> policy is useful to have Flux create an object
that will later be managed by another controller.&lt;/li>
&lt;li>Support for sending notifications to
&lt;a href="https://fluxcd.io/flux/components/notification/providers/#datadog" target="_blank">DataDog&lt;/a>.&lt;/li>
&lt;li>The
&lt;a href="https://fluxcd.io/flux/components/image/imageupdateautomations/#push" target="_blank">ImageUpdateAutomation API&lt;/a> has two
new optional fields - &lt;code>.spec.git.push.refspec&lt;/code> and &lt;code>.spec.git.push.options&lt;/code> for to specify a refspec and push
options that will be used when pushing commits upstream.&lt;/li>
&lt;/ul>
&lt;h4 id="fixes-and-improvements">Fixes and improvements&lt;/h4>
&lt;p>Here is a short list of features and improvements in this release:&lt;/p>
&lt;ul>
&lt;li>A new flag &lt;code>--concurrent-ssa&lt;/code> has been introduced in the kustomize-controller to set the number of concurrent
server-side operations that will be performed by the controller per object. This increases speed when
reconciling Kustomization with a considerable amount of objects.&lt;/li>
&lt;li>Performance improvement when loading helm repositories with large indexes (up to 80% memory reduction).&lt;/li>
&lt;li>The load distribution has been improved when reconciling Flux objects in parallel to reduce CPU and memory spikes.&lt;/li>
&lt;li>The Installation and Monitoring sections of the Flux documentation have been restructured to make navigation
and locating guides easier. We are always open to receiving feedback on how we can improve the documentation.&lt;/li>
&lt;/ul>
&lt;h4 id="deprecation">Deprecation&lt;/h4>
&lt;ul>
&lt;li>All APIs that accept TLS data have been modified to support Kubernetes TLS style secrets.
The keys &lt;code>caFile&lt;/code>, &lt;code>certFile&lt;/code> and &lt;code>keyFile&lt;/code> have been deprecated. For more details about the TLS changes
please see the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.1.0#kubernetes-tls-secrets" target="_blank">Kubernetes TLS Secrets section&lt;/a>.&lt;/li>
&lt;li>⚠️ Breaking changes: This release comes with breaking changes to the Flux monitoring stack (Prom+Grafana).
The stack now leverages the
&lt;a href="https://github.com/kubernetes/kube-state-metrics/blob/main/docs/customresourcestate-metrics.md" target="_blank">kube-state-metrics Custom Resource State metrics&lt;/a>
to report some Flux resource metrics. This will allow users to extend the Flux metrics with custom metadata. The
&lt;a href="https://github.com/fluxcd/flux2/tree/v2.1.0/manifests/monitoring#warning-deprecation-notice" target="_blank">monitoring configuration in the fluxcd/flux2 repository&lt;/a>
is now deprecated and will be removed in a future release. The new monitoring configuration is located at
&lt;a href="https://github.com/fluxcd/flux2-monitoring-example/" target="_blank">fluxcd/flux2-monitoring-example&lt;/a>.
Please see the new monitoring guide
&lt;a href="https://fluxcd.io/flux/monitoring" target="_blank">https://fluxcd.io/flux/monitoring&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;h4 id="upgrade">Upgrade&lt;/h4>
&lt;p>To upgrade Flux from v0.x to v2.1.0 please follow the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.0.0#upgrade" target="_blank">Flux GA upgrade procedure&lt;/a>.&lt;/p>
&lt;p>To Upgrade Flux from v2.0.x to v2.1.0 either by
&lt;a href="https://fluxcd.io/flux/installation/#bootstrap-upgrade" target="_blank">rerunning bootstrap&lt;/a>
or by using the
&lt;a href="https://github.com/fluxcd/flux2/tree/main/action" target="_blank">Flux GitHub Action&lt;/a>.&lt;/p>
&lt;p>You can take a look at the
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v2.1.0" target="_blank">changelog&lt;/a> for the full list of changes.&lt;/p>
&lt;p>❣️Big thanks to all the Flux contributors who helped us with this release!&lt;/p>
&lt;h4 id="flux-grafana-dashboards">Flux Grafana Dashboards&lt;/h4>
&lt;p>The Flux monitoring stack comes with two dashboards
for easy visualization of Flux controllers and resource metrics.
You can follow this
&lt;a href="https://github.com/fluxcd/flux2-monitoring-example" target="_blank">link&lt;/a>
to learn how to set it up.&lt;/p>
&lt;script src="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/lazy/jquery.lazy.min.js">&lt;/script>
&lt;script src="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/swipebox/js/jquery.swipebox.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/swipebox/css/swipebox.min.css">
&lt;script src="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/justified_gallery/jquery.justifiedGallery.min.js">&lt;/script>
&lt;link rel="stylesheet" href="https://deploy-preview-2413--fluxcd.netlify.app/shortcode-gallery/justified_gallery/justifiedGallery.min.css"/>
&lt;style>
&lt;/style>
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-0-wrapper" class="gallery-wrapper">
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-0" class="justified-gallery">
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p4.png"
class="galleryImg"
>
&lt;img
width="900" height="487"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABEAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMGUtjK59OKdHCrZ3L&amp;#43;lSxxxuVaWdFXupDZ&amp;#43;nSmmCPnbcI30U/4U7kjXhQLlV5qIx4H3f0qaMIZ187/AFfv9KsyWNosLPHqKOyqSFEZ59qL2FexXf7i0ifdalf7i0ifdaqKEk/h&amp;#43;lIvRvpSyfw/SkXo30pAf//Z"
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p4_hu201245b1982bb73ddf40e45e9f3f5a39_95443_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p3.png"
class="galleryImg"
>
&lt;img
width="900" height="516"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABIAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APNkgjk2M8sYHde&amp;#43;KQ2afNieI7RxjvVmG2gmtw8s5Dj&amp;#43;HcBR9ktwjlZzkKSAGHNFzO5V8uJoSTt3jOAMf7P/ANeozGnlKQBuycj24x/WpGG5CWYkqBgU1htRCrH5ly3PuRQixshOF57URk889qJOi/SkTv8ASqAWQnC89qEPytRJ0X6UJ91qAP/Z"
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p3_hu1156cb5cfac01e13989ff6af2100baec_91817_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p2.png"
class="galleryImg"
>
&lt;img
width="900" height="457"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABAAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMWDFQDjHbOKaIwT0UflUm0FAWk257YzVqKPSgFMtxOT/EAgA&amp;#43;lNuxLdiiYxk4Ax&amp;#43;FJ5fB4FaciaM7lkluI1PRQucVE8Om&amp;#43;U5jnnLhTtBQAE0uYXMf/2Q=="
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p2_hudf42a147e343155ca9de7f080b35789e_75366_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p1.png"
class="galleryImg"
>
&lt;img
width="900" height="596"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABUAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMf4c87vzGKaUHoc/jUmZf4c49xSZn9P0qiRpRAoxu3Y59BzTjHHtzvbPpg4pf3&amp;#43;MgZH0oIn2nK8Y5ouFmO85kjG0kU0XEjZDNkEU1v9WKavWiyGSmQqgIJH400Ss2QSSMUjf6sU1ev4UWQH//Z"
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cp-dashboard-p1_hu362193d857697ff83f9d307bf6bd12e8_238723_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p2.png"
class="galleryImg"
>
&lt;img
width="900" height="457"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABAAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APNY4GkXLJx24FDWhCkqhJ&amp;#43;lKiK0Yyc/8Co8lPb86dySL7O45MRwOvFKwhx8oqRokVScDj/aqEsnUJj8aaYH/9k="
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p2_huc341510254a55f96a82b79cb041ec5da_93103_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p1-featured.png"
class="galleryImg"
>
&lt;img
width="900" height="570"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABQAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMiD5QYsQwONuDz700kFc5wR2qzcyy3CICEHloOAD/jUllo9/fpK9uqMIQN2Wx1z/ga0ipSdktSLpK7KbgGPcSVbOMDI49aawBXdvOc4xk1YDzxoQjLhRk/IKsQaXqOopNPGI2EA&amp;#43;foOMH/AOvSSlJ2SG2krso&amp;#43;Y2D05GKvadrd1pqTpAsRE4AbepOMZ6c&amp;#43;9Z1KKE3F3TH6i725569as22qXlnFLHBLtWb742g5qpRSHGTi7p2P/9k="
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/images/grafana-cluster-dashboard-p1-featured_hude207f97d92789b4c840614d361d3a03_148210_900x900_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-12fc869a24b5eab5137df38e0bad16ae-0");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "150",
margins : "5",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;h3 id="flagger-v1330">Flagger v1.33.0&lt;/h3>
&lt;p>This release fixes bugs related to the Canary lifecycle. The &lt;code>confirm-traffic-increase&lt;/code> webhook
is no longer called if the Canary is in the &lt;code>WaitingPromotion&lt;/code> phase. Furthermore, a bug which
caused downtime when initializing the Canary deployment has been fixed. Also, a bug in the
&lt;code>request-duration&lt;/code> metric for Traefik which assumed the result to be in milliseconds
instead of seconds has been addressed.&lt;/p>
&lt;p>The loadtester now also supports running &lt;code>kubectl&lt;/code> commands.&lt;/p>
&lt;p>Please see the
&lt;a href="https://github.com/fluxcd/flagger/blob/main/CHANGELOG.md#1310" target="_blank">changelog&lt;/a> for the full changes.&lt;/p>
&lt;h2 id="community-news">Community News&lt;/h2>
&lt;p>This section highlights additions to our community -
new contributors, project members, maintainers or adopters.&lt;/p>
&lt;h3 id="new-adopters">New adopters&lt;/h3>
&lt;style>
&lt;/style>
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-1-wrapper" class="gallery-wrapper">
&lt;div id="gallery-12fc869a24b5eab5137df38e0bad16ae-1" class="justified-gallery">
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/zeit-online.png"
class="galleryImg"
>
&lt;img
width="300" height="32"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAMAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AO4twJNhZVO&amp;#43;JC3A5Jdif1JqJz/xNbdBwCirxwcbR3/E1Lafdh/64x/&amp;#43;hGopP&amp;#43;Qzb/RP/QRQBZCKIo7gDEnmx8jpwxxx07fz9TSbFMPnEfO8r7j68qenTuad/wAuMf8A10j/APQjSf8ALkn/AF1k/mlAH//Z"
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/zeit-online_hu99482b6cbd12e071c0514667a8a12e65_7716_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/sonatype.png"
class="galleryImg"
>
&lt;img
width="300" height="52"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAYAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APQxpt3Np01tay&amp;#43;RcoqxyypcOplkBUliwGeQOvU5I460LoWsNO7yaq4G7coSaQAtuJBxngYIG3kfLnua1rD/AF17/wBdz/IVdrWpJuQlrqcbc6Xq&amp;#43;lwG/k1JnuARHG3nSOFLvEBweqlg&amp;#43;QegbjOKkh0bWbqN2g1eeONbh0Gbly7hXkUEkg7SPl4Aw23mtjxL/wAggf8AX1b/APo5KsaT/wAecn/X1cf&amp;#43;jnqL6DP/2Q=="
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/sonatype_hu2a6cbc4f347084885b3b76f1317ca75e_22254_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/prophesee.png"
class="galleryImg"
>
&lt;img
width="300" height="78"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAgAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APWyL7cm0x4w24MenHHbnn6fjS4vcZBQYU4DdSecZx&amp;#43;H61aooAqn7ZubkAbONoBGcn19se1GbvnKkfd6FT25/WrVFAH/2Q=="
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/prophesee_hu6dd4d3bf9b9e20eb7ca56fac2ac1b45b_12107_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/infolegale.png"
class="galleryImg"
>
&lt;img
width="300" height="156"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIABEAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/APMEiklYLGjMSQoAGeT0FSx2N3MN0VvI4xnKrkf54qKOWSIt5cjJvBVtpxkelTRahdwxrHHO6ovRc8dc9K79Ti66jfsV3kD7NKcgEYQnr0/mKZLbzQECWJ0zyNwxn/OaujXtS8tka5Lhl2/OAcDPOPrzn6n1qvdX93e7PtM7y7M7dx6Z60aj0K9FFFIYUUUUAf/Z"
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/infolegale_hu057ae4f958f54eee3d2b2592151ae740_17067_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;div>
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/ecovadis.png"
class="galleryImg"
>
&lt;img
width="300" height="54"
style="filter: blur(25px);"
src="data:image/jpeg;base64,/9j/2wCEAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4&amp;#43;JS5ESUM8SDc9PjsBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAAYAIAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOsTxBdw2sk17f3Dxw3AhuBBEqsHw33CScrkD06e5FWodavy1&amp;#43;0dw8klkwjlSXaEMjOVG3AztAOeeeB755y&amp;#43;/wCQPqv/AGFF/wDZ61bL/XeJf&amp;#43;v2L/0bQBPc61eWt7dWhv7ppLNWNw2EwYwVIKcfe2Z68bj&amp;#43;VRNZktrU3UFxMomdWTKLvk3STkB27duRnGOhyar6r/yMfiP/AK9m/wDQVqm//IEsv96H/wBDnoA//9k="
class="lazy"
data-src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/08/flux-v2.1.0/logos/ecovadis_hudad5832af0dfb7e826b2092aefde89bf_31967_300x300_fit_q90_lanczos_3.png"
>
&lt;/a>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
if (!jQuery) {
alert("jquery is not loaded");
}
$( document ).ready(() => {
const gallery = $("#gallery-12fc869a24b5eab5137df38e0bad16ae-1");
let swipeboxInstance = null;
gallery.on('jg.complete', () => {
$(() => {
$('.lazy').Lazy({
visibleOnly: true,
afterLoad: element => element.css({filter: "none", transition: "filter 1.0s ease-in-out"})
});
});
swipeboxInstance = $('.galleryImg').swipebox(
jQuery.extend({},
{ }
)
);
});
gallery.justifiedGallery({
rowHeight : "20",
margins : "20",
border : 0,
randomize : false ,
waitThumbnailsLoad : false,
lastRow : "nojustify",
captions : false,
});
});
&lt;/script>
&lt;p>We are very pleased to announce that the following adopters of Flux have
come forward and added themselves to our website:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://www.zeit.de" target="_blank">Zeit Online&lt;/a>: a German-language platform for demanding online journalism
and reader discussions with level.&lt;/li>
&lt;li>
&lt;a href="https://sonatype.com" target="_blank">Sonatype&lt;/a>: a developer-friendly full-spectrum software supply chain management
platform helps organizations and software developers.&lt;/li>
&lt;li>
&lt;a href="https://www.prophesee.ai" target="_blank">Prophesee&lt;/a>: a company using sensor design and AI algorithms
to develop computer vision systems.&lt;/li>
&lt;li>
&lt;a href="https://www.infolegale.fr" target="_blank">Infolegale&lt;/a>: a legal information platform to monitor company solvency.&lt;/li>
&lt;li>
&lt;a href="https://ecovadis.com/" target="_blank">Eco Vadis&lt;/a>: a collaborative platform that allows companies to assess the environmental
and social performance of their suppliers.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>If you have not already done so,
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/adopters/">use the instructions here&lt;/a>
or give us a ping and we will help to add you. Not only
is it great for us to get to know and welcome you to our community. It
also gives the team a big boost in morale to know where in the world
Flux is used everywhere.&lt;/em>&lt;/p>
&lt;h3 id="new-contributors">New Contributors&lt;/h3>
&lt;p>Shoutout to all our new contributors:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://github.com/arukiidou" target="_blank">Arukiidou&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/bdols" target="_blank">Brian Dols&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/chipxoller" target="_blank">Chip Zoller&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/kellyfj" target="_blank">Frank J Kelly&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/GJKrupa" target="_blank">Gerard Krupa&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/mraerino" target="_blank">Marcus Weiner&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/mihaiandreiratoiu" target="_blank">Mihai Ratoiu&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/sestegra" target="_blank">Stéphane Este-Gracias&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://github.com/scheying" target="_blank">Stephan Scheying&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Thanks to all of our old and new contributors, and reach out if you&amp;rsquo;d like to become one as well.&lt;/p>
&lt;h3 id="people-writingtalking-about-flux">People writing/talking about Flux&lt;/h3>
&lt;p>We love it when you all write about Flux and share your experience,
write how-tos on integrating Flux with other pieces of software or other
things. Give us a shout-out and we will link it from this section!&lt;/p>
&lt;h4 id="how-to-build-a-self-service-platform-on-upbound-day-1httpsblogupboundioupbound-day-1">
&lt;a href="https://blog.upbound.io/upbound-day-1" target="_blank">How to Build a Self-Service Platform on Upbound: Day 1&lt;/a>&lt;/h4>
&lt;p>Our friends at Upbound wrote a great blog post on how you can use the power of Flux and Crossplane to
drive control plane interactions and configure your control plane for GitOps Flows.&lt;/p>
&lt;h4 id="canary-deployment-with-flagger-and-istio-on-devtronhttpswwwcncfioblog20230823canary-deployment-with-flagger-and-istio-on-devtron">
&lt;a href="https://www.cncf.io/blog/2023/08/23/canary-deployment-with-flagger-and-istio-on-devtron/" target="_blank">Canary deployment with Flagger and Istio on Devtron&lt;/a>&lt;/h4>
&lt;p>Rupin Solanki describes how to leverage Flagger and Istio, to automate the canary release process, ensure seamless
traffic shifting and real-time application health monitoring.&lt;/p>
&lt;h2 id="events">Events&lt;/h2>
&lt;p>It&amp;rsquo;s important to keep you up to date with events
in Flux and provide simple ways to see our work in action and chat with
our engineers.&lt;/p>
&lt;h3 id="recent-events">Recent Events&lt;/h3>
&lt;p>In August here are a couple of talks we would like to highlight.&lt;/p>
&lt;h4 id="cloud-native-islamabad---harnessing-the-power-of-gitops-with-flux">Cloud Native Islamabad - Harnessing the Power of GitOps with Flux&lt;/h4>
&lt;p>Flux maintainer, Stefan Prodan spoke at Cloud Native Islamabad on Harnessing the Power of GitOps with Flux.
It is packed with a informed introduction to the concept of GitOps and a demo of Flux and the Weave GitOps UI!
Click on the video below to watch it.&lt;/p>
&lt;div class="responsive-video">
&lt;iframe src="https://www.youtube.com/embed/tkC6qrIzA_s" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h3 id="upcoming-events">Upcoming Events&lt;/h3>
&lt;p>We are happy to announce that we have a number of events coming up.
Tune in to learn more about Flux and GitOps best practices,
get to know the team and join our community.&lt;/p>
&lt;h4 id="share-your-story-at-gitopscon-euvirtual-this-year-">Share your story at GitOpsCon EU(virtual) this year! 📆&lt;/h4>
&lt;p>If you wish to speak at GitOpsCon EU, reach out to us to collaborate on proposals
on a range of topics related to Kubernetes. We are happy to provide our writing
expertise to your proposal and to collaborate on ideas. The
&lt;a href="https://events.linuxfoundation.org/gitopscon-europe/program/cfp/" target="_blank">CFP&lt;/a> deadline is October 4,
so kindly contact
&lt;a href="mailto:tamao@weave.works">tamao@weave.works&lt;/a> ASAP if you’re interested.
The conference will take place virtually on the 5th - 6th of December.&lt;/p>
&lt;h4 id="cncf-on-demand-webinar">CNCF On-Demand Webinar&lt;/h4>
&lt;p>Flux Maintainer, Kingdon B will be giving a talk titled
&lt;code>How to start building a self-service infrastructure platform on Kubernetes&lt;/code> on the 14th of September.
It’s going to be packed with knowledge on how to use Backstage and GitOps.
Register
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-how-to-start-building-a-self-service-infrastructure-platform-on-kubernetes/" target="_blank">here&lt;/a>.&lt;/p>
&lt;h3 id="project-meetings-and-bug-scrub">Project meetings and Bug Scrub&lt;/h3>
&lt;p>Our Flux Bug Scrubs still are happening on a weekly basis and remain one of
the best ways to get involved in Flux. They are a friendly and welcoming way
to learn more about contributing and how Flux is organised as a project.&lt;/p>
&lt;ul>
&lt;li>2023-09-05 22:00 UTC, 00:00 CEST
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/#calendar">The Flux Bug Scrub (AEST)&lt;/a>&lt;/li>
&lt;li>2023-09-06 12:00 UTC, 14:00 CEST
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/#calendar">The Flux Bug Scrub&lt;/a>&lt;/li>
&lt;li>2023-09-07 15:00 UTC, 17:00 CEST
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/#calendar">CNCF Flux Project Meeting (late)&lt;/a>&lt;/li>
&lt;li>2023-09-13 12:00 UTC, 14:00 CEST
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/#calendar">CNCF Flux Project Meeting (early)&lt;/a>&lt;/li>
&lt;li>2023-09-14 17:00 UTC, 19:00 CEST
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/#calendar">The Flux Bug Scrub&lt;/a>&lt;/li>
&lt;li>2023-09-19 22:00 UTC, 00:00 CEST
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/#calendar">The Flux Bug Scrub (AEST)&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;em>We are flexible with subjects and often go with the interests of the
group or of the presenter. If you want to come and join us in either
capacity, just show up or if you have questions, reach out to Kingdon B on
Slack.&lt;/em>&lt;/p>
&lt;h2 id="flux-ecosystem">Flux Ecosystem&lt;/h2>
&lt;h3 id="terraform-controller">Terraform-controller&lt;/h3>
&lt;p>The ecosystem is buzzing with news about the licensing changes to Hashicorp’s open-source projects
including Terraform. Weaveworks has released a
&lt;a href="https://web.archive.org/web/20230925073503/https://www.weave.works/blog/statement-for-terraform-hashicorp-license-changes" target="_blank">statement&lt;/a>
on this and the impact on the tf-controller.&lt;/p>
&lt;h3 id="vs-code-gitops-extension">VS Code GitOps Extension&lt;/h3>
&lt;p>Significant performance upgrades and code refactoring has been introduced with VS Code GitOps Tools
extension version 0.25.0. Previously cluster metadata was loaded using &lt;code>kubectl get&lt;/code> commands.
Now, a new javascript client is also used which permits faster loading and real-time watching of cluster resources.
&lt;code>kubectl proxy&lt;/code> is executed in the background for the new client. Rendering of resource treeviews has been reworked
to minimise data reloading, to maintain collapsible state and to allow visualising resource errors grouped
by namespaces. Timeout settings were added and bad cluster connections should no longer slow down Clusters treeview rendering.&lt;/p>
&lt;p>UI refinements and bug fixes for the new client are ongoing. The most up-to-date UI features can be previewed by
selecting “Install Pre-Release Version” in the VS Code Extension Browser.&lt;/p>
&lt;h2 id="flux-fun-fact">Flux Fun Fact!&lt;/h2>
&lt;p>Did you know …
🔒 Flux is designed with security in mind: Pull vs. Push,
least amount of privileges, adherence to Kubernetes security
policies and tight integration with security tools and
best-practices. Read more about our security considerations.&lt;/p>
&lt;h2 id="over-and-out">Over and out&lt;/h2>
&lt;p>If you like what you read and would like to get involved, here are a few good ways to do that:&lt;/p>
&lt;ul>
&lt;li>Join our
&lt;a href="https://fluxcd.io/community/#meetings" target="_blank">upcoming dev meetings&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://lists.cncf.io/g/cncf-flux-dev" target="_blank">Flux mailing list&lt;/a> and let us know what you&amp;rsquo;d like to see.&lt;/li>
&lt;li>Talk to us in the #flux channel on
&lt;a href="https://slack.cncf.io/" target="_blank">CNCF Slack&lt;/a>.&lt;/li>
&lt;li>Join the
&lt;a href="https://github.com/fluxcd/flux2/discussions" target="_blank">planning discussions&lt;/a>.&lt;/li>
&lt;li>And if you are completely new to Flux, take a look at our
&lt;a href="https://fluxcd.io/docs/get-started/" target="_blank">Get Started guide&lt;/a>
and give us feedback.&lt;/li>
&lt;li>Social media: Follow
&lt;a href="https://twitter.com/fluxcd" target="_blank">Flux on Twitter&lt;/a>, join the discussion in the
&lt;a href="https://www.linkedin.com/groups/8985374/" target="_blank">Flux LinkedIn group&lt;/a>.&lt;/li>
&lt;li>We are looking forward to working with you.&lt;/li>
&lt;/ul>
&lt;p>&amp;#x2764;&amp;#xfe0f; Your Flux maintainer, Somtochi Onyekwere, and project member, Tamao Nakahara.&lt;/p></description></item><item><title>Blog: Announcing Flux 2.0 GA</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/07/flux-ga/</link><pubDate>Thu, 20 Jul 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/07/flux-ga/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2023/07/flux-ga/infographic-featured_hu2a92eae87e340a4ebd5a8ebe2a1ddc11_580683_640x0_resize_box_3.png" width="640" height="213"/>
&lt;h2 id="flux-20-and-general-availability">Flux 2.0 and General Availability!&lt;/h2>
&lt;p>&lt;img src="infographic-featured.png" alt="FluxCD community stats">&lt;/p>
&lt;p>On July 5, 2023, Flux reached a major landmark with Flux 2.0 and the general
availability of its GitOps components! Flux has continued to grow during its
incredible journey. Its early iteration was built at Weaveworks for their own
needs and for a previous SaaS product built on Flux. Flux led to Weaveworks
CEO Alexis Richardson to coin the term, GitOps, which has taken the world by
storm with a CNCF Working Group, GitOpsCon, GitOps Days, and several GitOps
community groups. Moreover, leaders such as Kubernetes co-creators Brendan Burns
and Joe Beda have stated how GitOps is a natural evolution of Kubernetes itself.&lt;/p>
&lt;blockquote>
&lt;p>“GitOps practices and Flux has elevated our engineering: code infra
as software, eliminate human intervention, accelerate lead time for changes -
without compromising security requirements.”&lt;/p>
&lt;p>Tahir Raza, Staff Engineer - Cloud &amp;amp; Platform Engineering at Best Buy&lt;/p>
&lt;/blockquote>
&lt;p>Intending to be the best GitOps tool available, the Flux project has evolved into a
mature and trustworthy software. During its evolution, Flux has accomplished several
goals such as low resource consumption by adopting a microservices architecture,
safe multi-tenancy through its security-first design and support for bleeding edge innovation by having
first-class support for technologies like OCI and Cosign.&lt;/p>
&lt;p>We are proud to see that Flux is one of the few CNCF graduated projects
and the GitOps tool that companies such as Microsoft, AWS, GitLab, D2iQ,q
and more trust to deliver GitOps to their customers.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Safaricom PLC provides mobile telephony, mobile money transfer, consumer electronics, e-commerce,
cloud computing, data, music streaming, and fiber optic services to the Kenyan
Market predominantly and to the wider East Africa. So, Flux has been an essential
part of critical areas such as deployment frequency, standardization, and security,
among other GitOps capabilities that help us to be competitive. We are excited
about Flux 2.0 and the project&amp;rsquo;s continued maturity.&amp;rdquo;&lt;/p>
&lt;p>Winnie Gakuru, DevSecOps Engineer II at Safaricom PLC&lt;/p>
&lt;/blockquote>
&lt;h2 id="flux-general-availability">Flux General Availability&lt;/h2>
&lt;blockquote>
&lt;p>&amp;ldquo;EKS Anywhere has been providing GitOps capabilities with Flux
to our happy enterprise customers. We&amp;rsquo;ve been
testing Flux 2.0 since our EKS-A v0.16.0 release and it has been solid. Flux,
as a CNCF Graduated project and now with its GitOps components at GA, has been
reliable and enterprise grade so that we can deliver the best experience to the
customers who depend on our quality of product.&amp;rdquo;&lt;/p>
&lt;p>Joey Wang, Senior Software Engineer at Amazon Web Services&lt;/p>
&lt;/blockquote>
&lt;h3 id="what-does-general-availability-ga-mean-for-you-as-a-flux-user">What does General Availability (GA) mean for you as a Flux user:&lt;/h3>
&lt;blockquote>
&lt;p>&amp;ldquo;Flux is often my go-to technology choice for building multi-cluster
and even multi-region deployment patterns. It helps me enable teams in
evolving their applications from one cluster to many with consistent and repeatable config.&amp;rdquo;&lt;/p>
&lt;p>Bryan Oliver, Principal Engineer at Thoughtworks&lt;/p>
&lt;/blockquote>
&lt;p>This signifies that the APIs that have achieved GA (Generally Available) status
are now considered stable and can be used with confidence in production environments.
They offer backward compatibility, ensuring that existing implementations will continue
to function as expected. Flux encompasses various APIs, but not all of them have attained GA status yet.&lt;/p>
&lt;p>The APIs that have reached GA include:&lt;/p>
&lt;ul>
&lt;li>GitRepository: This API facilitates pulling configurations from Git repositories.&lt;/li>
&lt;li>Kustomization: It enables the application and synchronization of Kubernetes manifests defined in Git.&lt;/li>
&lt;li>Receiver API: This API triggers the reconciliation of Flux Custom Resources using webhooks.&lt;/li>
&lt;/ul>
&lt;p>It is important to note that these GA APIs will not undergo backwards-incompatible
changes unless accompanied by a major version update and appropriate advance announcements
As for the remaining Flux APIs, they will undergo further development and enhancements
before being promoted to GA status at a later stage.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;GitLab picked Flux for its official GitOps integration within our GitLab agent for Kubernetes.
Flux&amp;rsquo;s maturation and reliability have continued to show as we&amp;rsquo;ve tested Flux 2.0 in development.
Now with Flux&amp;rsquo;s GA, we can continue to build the best user experience for our enterprise
customers on solid foundations.&amp;rdquo;&lt;/p>
&lt;p>Viktor Nagy, Senior Product Manager, Environments group at GitLab&lt;/p>
&lt;/blockquote>
&lt;h3 id="releases">Releases&lt;/h3>
&lt;blockquote>
&lt;p>“It has been a fantastic journey of rebuilding the original
Flux into a microservices architecture, adding Flagger as a subproject, getting
validated as a graduated project in the CNCF, and now reaching GA with Flux 2.0.
I am grateful to work with great teams, maintainers, contributors, and partners,
and then to see major enterprises and cloud providers relying on Flux to start
or mature their Kubernetes journey. Keeping great company with users (the likes
of Amazon AWS, D2iQ, Microsoft Azure, VMware, Weaveworks, GitLab, Volvo, SAP,
Xenit and many more) keeps me motivated for the future innovations and growth for Flux.”&lt;/p>
&lt;p>Stefan Prodan, Principal Developer Experience Engineer at Weaveworks, Flux maintainer and
Flagger creator&lt;/p>
&lt;/blockquote>
&lt;p>Release Cadence: Flux will have at least three minor releases in a year
following the Kubernetes release cadence. The release will happen roughly
two weeks after a new Kubernetes release. The two weeks timeline can be adjusted if more
time is needed for testing compatibility with the new Kubernetes version.&lt;/p>
&lt;p>API Versioning: The Flux project follows the semver standard for versioning.
Release candidates are marked as &lt;code>x.y.z-rc.a&lt;/code> (e.g v1.0.0-rc.3) and stable
releases are marked as &lt;code>x.y.z&lt;/code>.&lt;/p>
&lt;p>Support: Flux will support the last three minor release versions of a major
release and the previous major release version for a year after its release.
A newly released Flux version offers support for Kubernetes N-2 minor versions.&lt;/p>
&lt;p>CVE Backport: We will backport bug fixes and security fixes to the last three minor
releases as patch releases. Users are advised to run the latest patch release of
a given minor release.&lt;/p>
&lt;p>For more details on the release procedure, take a look at
&lt;a href="https://fluxcd.io/flux/releases" target="_blank">https://fluxcd.io/flux/releases&lt;/a>.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Xenit is proud to be contributors and maintainers
of the Flux project, which is the GitOps tool of choice for enterprises and cloud
providers such as Volvo, GitLab, Microsoft, and AWS. We are particularly proud
to be part of Flux&amp;rsquo;s major milestones: not only graduating in the Cloud Native
Computing Foundation some months ago, but now getting Flux to 2.0 and general
availability. We enjoy being part of the Flux community and look forward to
the next stages of this growing community.&amp;rdquo;&lt;/p>
&lt;p>Simon Gottschlag, CTO at Xenit&lt;/p>
&lt;/blockquote>
&lt;h2 id="how-to-get-started">How to get started?&lt;/h2>
&lt;ul>
&lt;li>Watch our
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-flux-20-what-you-need-to-know/" target="_blank">CNCF webinar on Flux 2.0&lt;/a>,
which has an intro to GitOps for newcomers and Flux 2.0-specific updates for existing users.&lt;/li>
&lt;li>Need extra support for Flux and Flagger? Check out the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/support/#commercial-support">Flux support page&lt;/a> and this
&lt;a href="https://www.youtube.com/watch?v=94ZMibHBszI" target="_blank">August 2 webinar&lt;/a>
on Flux 2.0-specific support.&lt;/li>
&lt;/ul>
&lt;p>❤️ Your Flux maintainer, Somtochi Onyekwere, and project member, Tamao Nakahara.&lt;/p></description></item><item><title>Blog: Flux is a CNCF Graduated project</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2022/11/flux-is-a-cncf-graduated-project/</link><pubDate>Wed, 30 Nov 2022 09:00:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2022/11/flux-is-a-cncf-graduated-project/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2022/11/flux-is-a-cncf-graduated-project/flux-graduation-featured_huaab76a8c9c06cffcb342651c1a7caf26_37219_640x0_resize_box_3.png" width="640" height="198"/>
&lt;p>&lt;img src="flux-graduation-featured.png" alt="Flux is CNCF Graduated project">&lt;/p>
&lt;h2 id="flux-has-graduated">Flux has graduated&lt;/h2>
&lt;p>Today is a very exciting day for the Flux community! Flux is now a
&lt;a href="https://www.cncf.io/announcements/2022/11/30/flux-graduates-from-cncf-incubator/" target="_blank">graduated project&lt;/a>
in the Cloud Native Computing Foundation and joining the ranks of
Kubernetes, Helm, Prometheus and others in this category.&lt;/p>
&lt;h2 id="flux-history">Flux History&lt;/h2>
&lt;p>We all worked very hard to make this happen - it is another important
milestone in the Flux success story. Started in July 2016, engineers at
Weaveworks built the first version of Flux to guarantee predictable
deployments internally. This was way before Kubernetes had won the Cloud
Native market.&lt;/p>
&lt;p>In the coming years at Weaveworks, the learnings with Flux helped to
establish and refine the principles of GitOps. Flux was integrated ever
more closely with Kubernetes, and later on Helm and Kustomize. It also
grew a community and an ecosystem. In 2018, Flagger was born, a Flux
companion that made progressive delivery a natural extension of GitOps.&lt;/p>
&lt;p>When Weaveworks donated Flux and Flagger to the CNCF, we already saw
large-scale adoption growing and cloud vendors making the Flux suite
core of their offerings to provide GitOps functionality.&lt;/p>
&lt;p>This was also the point where we decided to rewrite Flux from scratch,
using modern tooling such as controller-runtime and as a set of targeted
controllers, which made Flux development a lot more straight-forward. In
the past weeks we archived Legacy Flux and are very close to making Flux
v2 GA. Watch this space for the announcement!&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;We created Flux as open source from the beginning, in order to work
out in the open. It was very gratifying therefore, and far from
inevitable, that a loyal and mutually supportive community grew around
it. Making that happen takes a lot of empathy and patience from all
involved &amp;ndash; so, thank you everyone, for carrying Flux ever further.&amp;rdquo;&lt;/p>
&lt;p>&amp;ndash; Michael Bridgen, co-creator of Flux&lt;/p>
&lt;/blockquote>
&lt;h2 id="fluxs-home-the-cncf">Flux&amp;rsquo;s home: the CNCF&lt;/h2>
&lt;p>Today is a great time to look back at our time in the CNCF. We wouldn&amp;rsquo;t
be where we are today without the services and help of people at the
CNCF. It wasn&amp;rsquo;t just the great benefits and infrastructure we enjoy as a
project, but also the careful guidance and collaboration of CNCF groups
such as the TOC, TAG Security / TAG Contributor Experience and all the
adjacent project communities which also live at the CNCF. We also would
like to thank our TOC sponsor, Matt Farina, who helped us navigate this
process and encouraged us to take Flux even further!&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;I feel humbled and honored to be part of the Flux &amp;amp; Flagger team for
the past five years. With the help of our community, we have come a
long way since Flux inception and the start of the GitOps movement.
Today, Flux is an established continuous delivery solution for
Kubernetes, trusted by organisations around the world and backed by
vendors like Amazon AWS, D2iQ, Microsoft Azure, VMware, Weaveworks and
others that offer Flux to their users. The Flux team is very grateful
to the cloud-native community and CNCF who supported us over the years
and made Flux what it is today&amp;rdquo;&lt;/p>
&lt;p>&amp;ndash; Stefan Prodan, Flux maintainer and creator of Flagger&lt;/p>
&lt;/blockquote>
&lt;p>During the Graduation process, we particularly reflected on security and
governance. We threat-modelled the Flux components, which resulted in
documented security best practice. We will continue to educate our user
community on how to use Flux securely. Today both Flux and Flagger are
100% compliant with the CLO monitor, which is the
&lt;a href="https://clomonitor.io/search?maturity=graduated&amp;amp;foundation=cncf&amp;amp;page=1" target="_blank">highest score
amongst graduated CNCF
projects&lt;/a>.
We streamlined our security processes, and have regular conversations
with security professionals from CNCF tag-security. Soon we are going to
undergo a second security audit for an external validation of all the
great work we have done over the last few years.&lt;/p>
&lt;p>We are incredibly proud of what we have achieved and what we have given
to the wider ecosystem. GitOps is close to becoming the de-facto
standard. Cloud vendors offer GitOps capabilities to their customers
these days, a lot of this is based on Flux as a technology and the
learnings we made until today. We are extremely pleased to have this
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/ecosystem/">huge ecosystem&lt;/a> built on
top of and around Flux, including recent
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/ecosystem/#flux-uis--guis">Flux
UIs&lt;/a>!&lt;/p>
&lt;h2 id="next-up-flux-going-ga">Next up: Flux going GA&lt;/h2>
&lt;p>The 2.0.0 release of Flux is drawing near as well!&lt;/p>
&lt;p>While Flux has been production ready for quite some time, we have an
extremely strict backwards compatibility policy and take major versions
very seriously.&lt;/p>
&lt;p>The Flux community was working on a number of concurrent projects at the
same time: qualifying for Graduation, refactoring the controllers to
standardise the internal APIs, stabilizing the use of APIs of e.g. Helm
and Git, integrating OCI artifacts and Cosign verification fully into
Flux, and more. All of these workstreams were happening at the same
time. To make it clear to everyone what a GA release for Flux would look
like, we&amp;rsquo;ve updated
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/roadmap/">our GA
roadmap&lt;/a>. There are many
important details here for those following the 2.0.0 release, but one
thing that is very important to us is further stabilizing Flux and its
APIs so it will be even easier for new community members to contribute
and build on top of Flux!&lt;/p>
&lt;h2 id="-huge-thank-you">💖 Huge thank-you&lt;/h2>
&lt;p>You are all rock stars! 🤩 Continued thanks to everyone of our Flux
community members who have, in ways small and large, contributed to the
success of Flux!&lt;/p>
&lt;p>If you want to celebrate with us or are now more curious about Flux, please join us at our Flux Graduation Ask-Us-Anything sessions:&lt;/p>
&lt;ul>
&lt;li>
&lt;a href="https://zoom.us/j/4381188348" target="_blank">December 7, 12:00 UTC&lt;/a> with Flux maintainers: Daniel, Max, Philip, Sanskar, Stefan, Somtochi&lt;/li>
&lt;li>
&lt;a href="https://weaveworks.zoom.us/j/85821738864?pwd=cjk4QjRabEpUVlRlcFBqMm9UZ2xNZz09" target="_blank">December 8, 18:00 UTC&lt;/a> with Flux maintainers: Kingdon, Paulo, Somtochi, Soulé&lt;/li>
&lt;/ul>
&lt;p>We are looking forward to seeing you and getting to know you there!&lt;/p></description></item><item><title>Blog: Flagger adds Gateway API Support</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2022/03/flagger-adds-gateway-api-support/</link><pubDate>Fri, 11 Mar 2022 13:30:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2022/03/flagger-adds-gateway-api-support/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2022/03/flagger-adds-gateway-api-support/featured-flagger-gatewayapi-canary_hu41784555f600d29144a66dede7382f17_40869_640x0_resize_box_3.png" width="640" height="282"/>
&lt;p>The Flagger team is proud to bring you Kubernetes Gateway API support as
part of the
&lt;a href="https://github.com/fluxcd/flagger/releases/tag/v1.19.0" target="_blank">1.19.0 release&lt;/a>.
Read here about why this is a significant development in Flagger and how
you can make use of it.&lt;/p>
&lt;h2 id="what-is-flagger">What is Flagger?&lt;/h2>
&lt;p>Flagger is a progressive delivery tool that automates the release process for applications running on Kubernetes.
It reduces the risk of introducing a new software version in production by gradually shifting traffic to the
new version while measuring metrics and running conformance tests.&lt;/p>
&lt;p>&lt;img src="featured-flagger-gatewayapi-canary.png" alt="Flagger using Gateway API">&lt;/p>
&lt;p>
&lt;a href="https://github.com/fluxcd/flagger" target="_blank">Flagger&lt;/a> was designed to give developers confidence in automating production
releases using delivery techniques such as:&lt;/p>
&lt;ul>
&lt;li>Canary release (progressive traffic shifting)&lt;/li>
&lt;li>A/B Testing (HTTP headers and cookies traffic routing)&lt;/li>
&lt;li>Blue/Green (traffic switching and mirroring)&lt;/li>
&lt;/ul>
&lt;h2 id="what-is-the-gateway-api">What is the Gateway API?&lt;/h2>
&lt;p>The
&lt;a href="https://kubernetes.io/blog/2021/04/22/evolving-kubernetes-networking-with-the-gateway-api/" target="_blank">announcement blog
post&lt;/a>
defines its design principles as&lt;/p>
&lt;blockquote>
&lt;ul>
&lt;li>&lt;strong>Expressiveness&lt;/strong> - In addition to HTTP host/path matching and TLS,
Gateway API can express capabilities like HTTP header
manipulation, traffic weighting &amp;amp; mirroring, TCP/UDP routing, and
other capabilities that were only possible in Ingress through
custom annotations.&lt;/li>
&lt;li>&lt;strong>Role-oriented design&lt;/strong> - The API resource model reflects the
separation of responsibilities that is common in routing and
Kubernetes service networking.&lt;/li>
&lt;li>&lt;strong>Extensibility&lt;/strong> - The resources allow arbitrary configuration
attachment at various layers within the API. This makes granular
customization possible at the most appropriate places.&lt;/li>
&lt;li>&lt;strong>Flexible conformance&lt;/strong> - The Gateway API defines varying
conformance levels - core (mandatory support), extended (portable
if supported), and custom (no portability guarantee), known
together as
&lt;a href="https://gateway-api.sigs.k8s.io/concepts/guidelines/#conformance" target="_blank">flexible
conformance&lt;/a>.
This promotes a highly portable core API (like Ingress) that still
gives flexibility for Gateway controller implementers.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>&lt;img src="api-model.png" alt="Gateway API Model">&lt;/p>
&lt;p>Gateway API exposes a more general API than Ingress for proxying and you
can use it for more protocols than just HTTP (although most
implementations support just HTTP for now). It models more
infrastructure components to provide better deployment and management
options. There are three core components to the Gateway API:&lt;/p>
&lt;ul>
&lt;li>&lt;code>GatewayClass&lt;/code>: This lets us define which controller implementation we
want to use.&lt;/li>
&lt;li>&lt;code>Gateway&lt;/code>: A &lt;code>Gateway&lt;/code> resource is attached to a &lt;code>GatewayClass&lt;/code> and
has a 1:1 relationship with the actual load balancing infra. It lets
us define a set of listeners, through which we can specify which
Route resources to evaluate for routing, amongst other things.&lt;/li>
&lt;li>&lt;code>HTTPRoute&lt;/code>: This is a &lt;code>Route&lt;/code> resource that is specific for HTTP
requests. It defines routing rules such as filters, path and
header matches, etc. and which services should the request be
forwarded to.&lt;/li>
&lt;/ul>
&lt;h2 id="how-does-this-work-in-flagger">How does this work in Flagger?&lt;/h2>
&lt;p>Flagger makes use of the fact that &lt;code>HTTPRoute&lt;/code> allows users to define a
weight related to each reference to a service inside a routing rule. These weights are used to determine
which service should receive a request. For example, if we want to send
10% of our traffic to another service, we can define a &lt;code>HTTPRoute&lt;/code> like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>gateway.networking.k8s.io/v1alpha2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>HTTPRoute&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>foo-route&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">parentRefs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>example-gateway&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">hostnames&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#4070a0">&amp;#34;foo.example.com&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">rules&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">matches&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">path&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>PathPrefix&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">value&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>/login&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">backendRefs&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>foo-primary&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">port&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">8080&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">weight&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">90&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- &lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>foo-canary&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">port&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">8080&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">weight&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#40a070">10&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This sends 10% of all requests coming to foo.example.com/login to the
new service and the other 90% requests go to the stable service. You can
read more about traffic splitting in Gateway API
&lt;a href="https://gateway-api.sigs.k8s.io/v1alpha2/guides/traffic-splitting/" target="_blank">here&lt;/a>.&lt;/p>
&lt;p>Flagger fully automates the creation of &lt;code>HTTPRoutes&lt;/code> with the appropriate header matches,
path matches, etc and attaches the primary and canary service to the
&lt;code>HTTPRoute&lt;/code>. During the canary analysis, the weights related to both the
services are adjusted accordingly.&lt;/p>
&lt;p>&lt;img src="flagger-canary-steps.png" alt="Flagger canary">&lt;/p>
&lt;p>If you want to get started right away, have a look at
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flagger/tutorials/gatewayapi-progressive-delivery/">our
tutorial&lt;/a>,
which shows you how to use Contour&amp;rsquo;s Gateway API implementation and Flagger to automate canary
deployments. It won&amp;rsquo;t take long to follow, but will convey how powerful
this integration is.&lt;/p>
&lt;h2 id="flagger-works-with-all-implementations">Flagger works with all implementations&lt;/h2>
&lt;p>With added support for Gateway API, Flagger now works with all
&lt;a href="https://gateway-api.sigs.k8s.io/implementations/" target="_blank">implementations&lt;/a>,
which means that as of today these are natively supported: Contour,
Emissary-Ingress, Google Kubernetes Engine, HAProxy Ingress,
HashiCorp Consul, Istio, Kong and Traefik.&lt;/p>
&lt;p>The Flagger team has successfully tested Contour and Istio using
the &lt;code>v1beta2&lt;/code> Gateway API. Starting with Flagger v1.19, the Gateway API
is part of our end-to-end test suite using the Contour implementation.&lt;/p>
&lt;h2 id="how-metrics-work">How metrics work&lt;/h2>
&lt;p>The Gateway API defines a common interface for traffic management, which
saves us from doing anything vendor specific. But the metrics related to
the traffic, still are specific to the Ingress/Service Mesh you&amp;rsquo;re
using. Flagger lets you define a custom resource &lt;code>MetricTemplate&lt;/code>,
which runs queries against your metrics provider and calculates stats
like error rate, latency, etc. For example, if you&amp;rsquo;re using Istio with
Gateway API, the below &lt;code>MetricTemplate&lt;/code> would calculate the error rate
using Prometheus as a provider during a canary analysis:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flagger.app/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>MetricTemplate&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>error-rate&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>istio-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prometheus&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>http://prometheus.istio-system:9090&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">query&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> 100 - sum(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> rate(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> istio_requests_total{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> reporter=&amp;#34;source&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload_namespace=&amp;#34;{{ namespace }}&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload=~&amp;#34;{{ target }}&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> response_code!~&amp;#34;5.*&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> }[{{ interval }}]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> /
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> sum(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> rate(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> istio_requests_total{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> reporter=&amp;#34;source&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload_namespace=&amp;#34;{{ namespace }}&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> destination_workload=~&amp;#34;{{ target }}&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> }[{{ interval }}]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> ) * 100&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Similarly the below MetricTemplate allows Flagger to compute the latency
when using any Envoy based Ingress/Service Mesh:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#062873;font-weight:bold">apiVersion&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flagger.app/v1beta1&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">kind&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>MetricTemplate&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">metadata&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>latency&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">namespace&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>flagger-system&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>&lt;span style="color:#062873;font-weight:bold">spec&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">provider&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">type&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>prometheus&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">address&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>http://flagger-prometheus:9090&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#062873;font-weight:bold">query&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>|&lt;span style="color:#4070a0;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> histogram_quantile(0.99,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> sum(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> rate(
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> envoy_cluster_upstream_rq_time_bucket{
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> envoy_cluster_name=~&amp;#34;{{ namespace }}_{{ target }}-canary_[0-9a-zA-Z-]+&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> }[{{ interval }}]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> )
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> ) by (le)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4070a0;font-style:italic"> ) / 1000&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="further-reading">Further Reading&lt;/h2>
&lt;ul>
&lt;li>
&lt;a href="https://gateway-api.sigs.k8s.io/" target="_blank">Kubernetes Gateway API&lt;/a>&lt;/li>
&lt;li>
&lt;a href="https://kubernetes.io/blog/2021/04/22/evolving-kubernetes-networking-with-the-gateway-api/" target="_blank">Evolving Kubernetes networking with the Gateway API | Kubernetes
Blog&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>The Gateway API is in alpha. As of 2022-03-11 its
&lt;a href="https://github.com/kubernetes-sigs/gateway-api#status" target="_blank">GitHub
README&lt;/a>
says&lt;/p>
&lt;blockquote>
&lt;p>The latest supported version is &lt;code>v1alpha2&lt;/code> as released by the
&lt;a href="https://github.com/kubernetes-sigs/gateway-api/releases/tag/v0.4.0" target="_blank">v0.4.0
release&lt;/a>
of this project. This version of the API is expected to graduate to
beta in the future with relatively minimal changes.&lt;/p>
&lt;/blockquote>
&lt;p>We as the Flux project will update the integration once the API becomes
beta/stable.&lt;/p>
&lt;p>Thanks a lot
&lt;a href="https://github.com/aryan9600" target="_blank">Sanskar Jaiswal&lt;/a> for working on
&lt;a href="https://github.com/fluxcd/flagger/pull/1108" target="_blank">the
implementation&lt;/a>!&lt;/p>
&lt;p>We are excited to bring this feature to you and we love feedback! Please
let us know if you have feedback, questions or how you are going to use
this!&lt;/p></description></item><item><title>Blog: Flux Security Audit has concluded</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/11/flux-security-audit/</link><pubDate>Wed, 10 Nov 2021 12:30:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/11/flux-security-audit/</guid><description>
&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/11/flux-security-audit/featured-image_hu64c248523c5fd6e7257d472c4637e51d_32255_640x0_resize_box_3.png" width="640" height="185"/>
&lt;p>As Flux is an Incubation project within the
&lt;a href="https://www.cncf.io/" target="_blank">Cloud Native Computing
Foundation&lt;/a>, we were graciously
granted a sponsored audit. The primary aim was to assess Flux&amp;rsquo;s
fundamental security posture and to identify next steps in its security
story. The audit was commissioned by the CNCF, and facilitated by
&lt;a href="https://ostif.org/" target="_blank">OSTIF&lt;/a> (the Open Source Technology
Improvement Fund).
&lt;a href="https://adalogics.com/" target="_blank">ADA Logics&lt;/a>
was quickly brought into the picture, and spent a month on the audit.&lt;/p>
&lt;p>The Flux maintainers and community are very grateful for the work put
into this by everyone and the opportunity to grow and improve as a
project.&lt;/p>
&lt;p>&lt;img src="featured-image.png" alt="ADA Logics, CNCF, OSTIF">&lt;/p>
&lt;h2 id="our-first-cve-in-flux">Our first CVE in Flux&lt;/h2>
&lt;p>Let&amp;rsquo;s start with what will likely interest you as a Flux user. The
engagement uncovered a privilege escalation vulnerability in Flux that
could enable users to gain cluster admin privileges. The issue has been
fixed and is assigned CVE 2021-41254, and the full disclosure advisory
is available at the following link:&lt;/p>
&lt;p>CVE-2021-41254:
&lt;a href="https://github.com/fluxcd/kustomize-controller/security/advisories/GHSA-35rf-v2jv-gfg7" target="_blank">Privilege escalation to cluster admin on multi-tenant
Flux&lt;/a>.&lt;/p>
&lt;p>Description:&lt;/p>
&lt;p>Users that can create Kubernetes Secrets, Service Accounts and Flux
&lt;code>Kustomization&lt;/code> objects, could execute commands inside the
&lt;code>kustomize-controller&lt;/code> container by embedding a shell script in a
Kubernetes Secret. This can be used to run &lt;code>kubectl&lt;/code> commands under the
Service Account of &lt;code>kustomize-controller&lt;/code>, thus allowing an authenticated
Kubernetes user to gain cluster admin privileges.&lt;/p>
&lt;p>Impact:&lt;/p>
&lt;p>Multi-tenant environments where non-admin users have permissions to
create Flux &lt;code>Kustomization&lt;/code> objects are affected by this issue.&lt;/p>
&lt;p>Fix:&lt;/p>
&lt;p>This vulnerability was fixed in &lt;code>kustomize-controller&lt;/code> v0.15.0 (included
in Flux v0.18.0) released on 2021-10-08. Starting with v0.15, the
&lt;code>kustomize-controller&lt;/code> no longer executes shell commands on the container
OS and the &lt;code>kubectl&lt;/code> binary has been removed from the container image.&lt;/p>
&lt;h2 id="audit-report-with-full-details">Audit report with full details&lt;/h2>
&lt;p>We are thankful for the great attention to detail by the team at ADA
Logics. The whole report can be found
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/FluxFinalReport-v1.1.pdf">here&lt;/a>.
To benefit from the analysis in all its detail, we created a
&lt;a href="https://github.com/orgs/fluxcd/projects/5" target="_blank">project
board&lt;/a> in
GitHub. If you take a look at it closely, you will see that we have
fixed some of the most immediate issues already.&lt;/p>
&lt;p>Broadly speaking, the issues fall into three categories:&lt;/p>
&lt;ol>
&lt;li>Enabling Fuzzing for the Flux project&lt;/li>
&lt;li>Documentation issues&lt;/li>
&lt;li>Concrete issues discovered in the Flux code&lt;/li>
&lt;/ol>
&lt;h3 id="flux-coming-to-oss-fuzz">Flux coming to OSS-Fuzz&lt;/h3>
&lt;p>The team at ADA Logics didn&amp;rsquo;t stop at reviewing Flux code. We were
pleasantly surprised to receive actual PRs by the team, who set down and
helped us integrate with the OSS-Fuzz project. Some of this work still
needs to be integrated into all of the Flux controllers, but we are very
pleased that a start has been made! OSS-Fuzz is a service for running
fuzzers continuously on important open source projects, and the goal is
to use sophisticated dynamic analysis to uncover security and
reliability issues. There are already numerous other CNCF projects
integrated, e.g. Kubernetes, Envoy and Fluent-bit, and we&amp;rsquo;re excited to
be a part of that.&lt;/p>
&lt;h3 id="our-documentation-from-an-outside-perspective">Our documentation from an outside perspective&lt;/h3>
&lt;p>One very important piece of feedback was that our documentation is
mostly geared towards end users, who need very concrete advice on how to
integrate Flux into their setups. We provide lots of examples, which are
helpful if you want Flux to behave the right way. What is missing to
date is an architectural overview and documentation which focuses on the
security-related aspects of Flux.&lt;/p>
&lt;h3 id="what-transpired-during-the-code-review">What transpired during the code review&lt;/h3>
&lt;p>The team at ADA Logics found 22 individual issues, some of which were
results from the fuzzers. 1 high severity (that&amp;rsquo;s the above mentioned
CVE), 3 medium severity, 13 low severity and 5 informational.&lt;/p>
&lt;p>We appreciate the attention to detail by the team at ADA Logics. The
issues range from dependency upgrades to oversights in the code (files
which aren&amp;rsquo;t closed during an operation, unhandled errors) to misleading
documentation.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Issue&lt;/th>
&lt;th>Severity&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1:
&lt;a href="https://github.com/fluxcd/kustomize-controller/security/advisories/GHSA-35rf-v2jv-gfg7" target="_blank">Arbitrary command execution via command injection in the kustomize controller by way of secrets&lt;/a>&lt;/td>
&lt;td>High&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2:
&lt;a href="https://github.com/fluxcd/image-automation-controller/issues/246" target="_blank">Nil-dereference in image-automation controller&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3:
&lt;a href="https://github.com/fluxcd/flux2/issues/2011" target="_blank">Credentials exposed in environment variables and command line arguments&lt;/a>&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4:
&lt;a href="https://github.com/fluxcd/flux2/issues/1658" target="_blank">Use of deprecated library&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5:
&lt;a href="https://github.com/fluxcd/community/issues/133" target="_blank">Invalid and missing testing documentation&lt;/a>&lt;/td>
&lt;td>Informational&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>6:
&lt;a href="https://github.com/fluxcd/.github/issues/8" target="_blank">Bug fixes do not always include regression tests&lt;/a>&lt;/td>
&lt;td>Informational&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7:
&lt;a href="https://github.com/fluxcd/source-controller/issues/467" target="_blank">Deprecated SHA-1 is used for checksums&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8:
&lt;a href="https://github.com/fluxcd/source-controller/issues/468" target="_blank">Missing checksum verification&lt;/a>&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>9:
&lt;a href="https://github.com/fluxcd/pkg/issues/172" target="_blank">Inconsistent and missing logging&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>10:
&lt;a href="https://github.com/fluxcd/source-controller/issues/470" target="_blank">Reading large files can crash flux with an out-of-memory bug&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>11:
&lt;a href="https://github.com/fluxcd/source-controller/issues/471" target="_blank">Files are opened but never closed&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>12:
&lt;a href="https://github.com/fluxcd/image-automation-controller/issues/242" target="_blank">Unhandled error&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>13:
&lt;a href="https://github.com/fluxcd/image-automation-controller/issues/243" target="_blank">Slice bounds out of range&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>14:
&lt;a href="https://github.com/fluxcd/image-automation-controller/issues/246" target="_blank">Possible nil-deref in image-automation controller&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>15:
&lt;a href="https://github.com/fluxcd/pkg/issues/173" target="_blank">Inconsistent code-styles and potential nil-dereferences&lt;/a>&lt;/td>
&lt;td>Informational&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>16:
&lt;a href="https://github.com/fluxcd/image-automation-controller/issues/244" target="_blank">Missing return statement after error&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>17:
&lt;a href="https://github.com/fluxcd/kustomize-controller/issues/476" target="_blank">File extension comparisons are case sensitive&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>18:
&lt;a href="https://github.com/fluxcd/source-controller/issues/472" target="_blank">Some dependencies are outdated&lt;/a>&lt;/td>
&lt;td>Informational&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>19:
&lt;a href="https://github.com/fluxcd/flux2/issues/2014" target="_blank">Lack of container security options in deployed pods&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>20:
&lt;a href="https://github.com/fluxcd/pkg/issues/174" target="_blank">Unhandled errors from deferred file close operations&lt;/a>&lt;/td>
&lt;td>Low&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>21:
&lt;a href="https://github.com/fluxcd/notification-controller/issues/278" target="_blank">x509 certificates are not used for Webex&lt;/a>&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>22:
&lt;a href="https://github.com/fluxcd/image-automation-controller/issues/245" target="_blank">Unnecessary conditions in the code&lt;/a>&lt;/td>
&lt;td>Informational&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>At the time of writing, 43% of the issues were still TODO, 21% WIP and 36% DONE.&lt;/p>
&lt;h2 id="the-road-ahead">The Road Ahead&lt;/h2>
&lt;p>We are very happy we were given the opportunity to work with and have
our assumptions and code reviewed and tested by security experts. Early
on we decided that we want to benefit from the findings as much as
possible. That&amp;rsquo;s why we created a
&lt;a href="https://github.com/orgs/fluxcd/projects/5" target="_blank">project
board&lt;/a> and added
a review of it as a standing agenda item in our weekly dev meetings.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;The Flux team also created a public and easy to track dashboard
showing all of the work we've done together and is a fantastic
example of good issue-tracking and remediation.&amp;rdquo;&lt;/p>
&lt;p>-- Derek Zimmer, President and Executive Director,
&lt;a href="https://ostif.org/" target="_blank">OSTIF&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;h3 id="growing-the-team">Growing the team&lt;/h3>
&lt;p>If you are interested in contributing to this, we are very much looking
forward to working with you. We welcome contributions in helping resolve
issues of the road, additional comments on our security posture and also
welcome contributions in the form of extending our fuzzing
infrastructure. Finally, if you have any additional security feedback,
please come and talk to us.&lt;/p>
&lt;p>We are working full steam on the
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/roadmap/">Flux Roadmap&lt;/a>, just recently got
more maintainers involved and continue to listen to feedback.&lt;/p>
&lt;p>Again we would like to thank the Cloud Native Computing Foundation for
sponsoring the audit, the Open Source Technology Improvement Fund for
the coordination and ADA Logics for the careful review and advice during
the audit period.&lt;/p>
&lt;p>We are happy and proud to be part of this community!&lt;/p></description></item><item><title>Blog: Server-side reconciliation is coming</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/09/server-side-reconciliation-is-coming/</link><pubDate>Tue, 28 Sep 2021 12:30:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/09/server-side-reconciliation-is-coming/</guid><description>
&lt;p>&lt;strong>tl;dr&lt;/strong>: Server-side reconciliation will make Flux more performant,
improve overall observability and going forward will allow us to add new
capabilities, like being able to preview local changes to manifests
without pushing to upstream.&lt;/p>
&lt;p>⚠ &lt;strong>Changes required&lt;/strong>: Due to a
&lt;a href="https://github.com/kubernetes/kubernetes/pull/91748" target="_blank">Kubernetes
issue&lt;/a>, we require
a certain set of Kubernetes releases (starting &lt;code>1.16.11&lt;/code> - more on this below)
as a minimum. The logs, events and alerts that report Kubernetes namespaced
object changes are now using the &lt;code>Kind/Namespace/Name&lt;/code> format instead of
&lt;code>Kind/Name&lt;/code>.&lt;/p>
&lt;hr>
&lt;p>We rarely do this, but this time we want to give you some advance notice
of a big upcoming feature you will be pleased about. Since Kubernetes
moved
&lt;a href="https://kubernetes.io/docs/reference/using-api/server-side-apply/" target="_blank">server-side
apply&lt;/a>
to GA, we are offering you a new reconciler based on it, and graduating
the API to &lt;code>v1beta2&lt;/code>.&lt;/p>
&lt;h2 id="whats-happening">What&amp;rsquo;s happening&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>When does this happen?&lt;/strong>&lt;br>
With the release of Flux 0.18, we will move to the new reconciler.
It will be released in the coming weeks. Refer to
&lt;a href="https://github.com/fluxcd/kustomize-controller/pull/426" target="_blank">this
PR&lt;/a>
for more information.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Do I have to use the new thing?&lt;/strong>&lt;br>
Yes. Flux will be more performant, less error-prone and from a
maintenance perspective will be a lot easier for us. We understand
that this new feature will require changes on your end, but we are
certain you are going to like the new experience!&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Will my clusters stop working?&lt;/strong>&lt;br>
No, but you will need to do a little preparation to make sure Flux
can still apply your configurations. See below.&lt;br>
&lt;em>Note:&lt;/em> The pre-flight checks should be able to catch issues like meeting the
minimum required Kubernetes version.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="here-is-what-you-get">Here is what you get&lt;/h2>
&lt;ul>
&lt;li>The new reconciler improves performance (CPU, memory, network, FD
usage) and reduces the number of calls to Kubernetes API by
replacing &lt;code>kubectl exec&lt;/code> calls with a specialized applier written in
Go.&lt;/li>
&lt;li>We are able to validate and reconcile sources that contain both CRDs
and CRs.&lt;/li>
&lt;li>Detects and reports drift between the desired state (git, s3, etc)
and cluster state reliably.&lt;/li>
&lt;li>In the future: Preview of local changes to manifests without pushing
to upstream (&lt;code>flux diff -k&lt;/code> command TBA).&lt;/li>
&lt;li>Being able to wait for all applied resources to become ready without
requiring users to fill in the health checks list.&lt;/li>
&lt;li>Improves the overall observability of the reconciliation process by
reporting in real-time the garbage collection and health
assessment actions.&lt;/li>
&lt;/ul>
&lt;h2 id="this-is-what-you-need-to-do-to-prepare">This is what you need to do to prepare&lt;/h2>
&lt;p>&lt;strong>Check the Kubernetes version you are running in your cluster.&lt;/strong>
All the versions below fix a regression in the
&lt;a href="https://github.com/kubernetes/kubernetes/pull/91748" target="_blank">managed fields and field
type&lt;/a>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Kubernetes version&lt;/th>
&lt;th>Minimum required*&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>v1.16&lt;/code>&lt;/td>
&lt;td>&lt;code>&amp;gt;= 1.16.11&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>v1.17&lt;/code>&lt;/td>
&lt;td>&lt;code>&amp;gt;= 1.17.7&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>v1.18&lt;/code>&lt;/td>
&lt;td>&lt;code>&amp;gt;= 1.18.4&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>v1.19&lt;/code> and later&lt;/td>
&lt;td>&lt;code>&amp;gt;= 1.19.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;em>* Update 2021-10-11:&lt;/em>&lt;/p>
&lt;p>If you are using &lt;code>APIService&lt;/code> objects (for example
&lt;a href="https://github.com/kubernetes-sigs/metrics-server" target="_blank">metrics-server&lt;/a>),
you will need to update to &lt;code>1.18.18&lt;/code>, &lt;code>1.19.10&lt;/code>, &lt;code>1.20.6&lt;/code> or &lt;code>1.21.0&lt;/code>
at least. See
&lt;a href="https://github.com/fluxcd/flux2/discussions/1916#discussioncomment-1458041" target="_blank">this
post&lt;/a>
for more information.&lt;/p>
&lt;p>&lt;strong>Namespaced objects must contain metadata.namespace, defaulting to the
default namespace is no longer supported&lt;/strong>. This means you will need to
chase down any namespaced resources in your configuration files that are
left to default, and give them a namespace. Keep in mind that
kustomizations are often used to assign a namespace, so even if a
particular file doesn&amp;rsquo;t have a namespace in it, it may not represent a
problem.&lt;/p>
&lt;p>&lt;strong>The logs, events and alerts that report Kubernetes namespaced object
changes are now using the &lt;code>Kind/Namespace/Name&lt;/code> format instead of
&lt;code>Kind/Name&lt;/code>&lt;/strong> e.g.:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-cli" data-lang="cli">Service/flux-demo/podinfo unchanged
Deployment/flux-demo/podinfo configured
HorizontalPodAutoscaler/flux-demo/podinfo deleted
&lt;/code>&lt;/pre>&lt;p>Any automation or monitoring that relies on a particular format in the
logs will need to be adapted. Ideally, you should try to handle both the
old and new formats.&lt;/p>
&lt;p>&lt;strong>In terms of API changes, the &lt;code>kustomize.toolkit.fluxcd.io/v1beta2&lt;/code> API
is backwards compatible with &lt;code>v1beta1&lt;/code>&lt;/strong>. This is done automatically by
the Kubernetes API server, and no preparation is required. You may wish
to translate your Flux &lt;code>Kustomization&lt;/code> resources, though, according to the
following table.&lt;/p>
&lt;p>Additions and deprecations:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Change in the new version&lt;/th>
&lt;th>What you should do&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Version is now &lt;code>v1beta2&lt;/code>&lt;/td>
&lt;td>Change the version: &lt;code>apiVersion: kustomize.toolkit.fluxcd.io/v1beta2&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>.spec.validation&lt;/code> deprecated&lt;/td>
&lt;td>Server-side validation is now assumed. Remove this field from &lt;code>.spec.&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>.spec.patchesStrategicMerge&lt;/code> deprecated in favour of &lt;code>.spec.patches&lt;/code>&lt;/td>
&lt;td>Convert each entry from &lt;code>.spec.patchesStrategicMerge&lt;/code> into an inline strategic merge patch, like
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patches/#patch-using-inline-strategic-merge" target="_blank">this example given in the Kustomize documentation&lt;/a>, and append to &lt;code>.spec.patches.&lt;/code>. Note that the value in the patch field is quoted; that is, it is the YAML or JSON of the patch, stringified.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>.spec.patchesJson6902&lt;/code> deprecated in favour of &lt;code>.spec.patches&lt;/code>&lt;/td>
&lt;td>Convert each entry from &lt;code>.spec.patchesJson6902&lt;/code> into
&lt;a href="https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patches/#patch-using-inline-json6902" target="_blank">an inline JSON6902 patch&lt;/a>, and append to &lt;code>.spec.patches&lt;/code>. Note that the value in the patch field is quoted; that is, it is the YAML or JSON of the patch, stringified.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>.status.snapshot&lt;/code> replaced by &lt;code>.status.inventory&lt;/code>&lt;/td>
&lt;td>&lt;code>.status&lt;/code> is not kept in files, so you will not need to account for this.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>.spec.wait&lt;/code> added&lt;/td>
&lt;td>When true, the controller will wait for all the reconciled resources to become ready, and ignore &lt;code>.spec.healthChecks&lt;/code>. There is no preparation needed for this, since it&amp;rsquo;s a new feature.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="why-we-are-doing-this">Why we are doing this&lt;/h2>
&lt;p>When we started Flux v2, we set a goal to stop relying on third party
binaries for core features. While we have successfully replaced the Git
CLI shell execs with Go libraries (go-git, git2go) and C libraries
(libgit2, libssh2), the kustomize CLI with Go libraries (kustomize/api,
kustomize/kyaml), we still depend on the kubectl CLI for the
three-way-merge apply feature. With Kubernetes &amp;ldquo;server-side apply&amp;rdquo;
&lt;a href="https://kubernetes.io/docs/reference/using-api/server-side-apply/" target="_blank">being promoted to
GA&lt;/a>,
we can finally get rid of kubectl and drive the reconciliation using
exclusively the controller-runtime Go client.&lt;/p>
&lt;p>Please take a look at
&lt;a href="https://github.com/fluxcd/kustomize-controller/pull/426" target="_blank">the PR introducing this
change&lt;/a>,
as it talks at length about the issues which are solved by this.&lt;/p>
&lt;h2 id="sneak-preview">Sneak-preview&lt;/h2>
&lt;p>&lt;strong>Updated on 2021-10-08&lt;/strong>&lt;/p>
&lt;p>The server-side reconciliation has been released in flux2
&lt;a href="https://github.com/fluxcd/flux2/releases/tag/v0.18.0" target="_blank">v0.18.0&lt;/a>.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next?&lt;/h2>
&lt;p>The biggest parts of the work have been done, here is what is still on
our TODO list until the release:&lt;/p>
&lt;ul>
&lt;li>Use the SSA manager in Flux CLI to for the &lt;code>flux create&lt;/code> commands&lt;/li>
&lt;li>Use the SSA manager in Flux CLI to implement &lt;code>flux build&lt;/code> and &lt;code>flux diff&lt;/code> commands&lt;/li>
&lt;/ul>
&lt;h2 id="this-is-great---i-want-to-participate-in-this">This is great - I want to participate in this&lt;/h2>
&lt;p>Please join us in the
&lt;a href="https://cloud-native.slack.com/archives/CLAJ40HV3" target="_blank">#flux
channel&lt;/a>
on CNCF Slack (
&lt;a href="https://slack.cncf.io" target="_blank">get an invite
here&lt;/a>) to discuss this.&lt;/p>
&lt;p>Or find out other ways of connecting (including our weekly meetings) on
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/community/">our Community page&lt;/a>.&lt;/p>
&lt;p>We are looking forward to having you in our community!&lt;/p></description></item><item><title>Blog: Flux is a CNCF Incubation project</title><link>https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/03/flux-is-a-cncf-incubation-project/</link><pubDate>Wed, 10 Mar 2021 06:30:00 +0000</pubDate><guid>https://deploy-preview-2413--fluxcd.netlify.app/blog/2021/03/flux-is-a-cncf-incubation-project/</guid><description>
&lt;p>&lt;img src="https://deploy-preview-2413--fluxcd.netlify.app/img/incubation.png" alt="Incubation">&lt;/p>
&lt;p>The Flux community is proud to announce that the CNCF Technical
Oversight Committee just promoted the Flux project to Incubating status!
🎉&lt;/p>
&lt;p>For us as a project, this is proof not only of the wide-spread use of
Flux (and Helm Operator) v1, but also of our big strides into becoming a
GitOps family of projects and bringing a toolkit approach to Continuous
and Progressive Delivery.&lt;/p>
&lt;p>We are particularly happy about the support from our community, the
project maintainers, contributors and end-users who helped us through
this process. Thanks to our friends at Deutsche Telekom, Lunar,
MediaMarktSaturn and Sortlist who spoke in favour of Flux and explained
their GitOps implementation in user interviews with the CNCF.&lt;/p>
&lt;p>&lt;img src="incubation-infographics.png" alt="Incubation Infographics">&lt;/p>
&lt;p>As a project we have come quite far in the last 5 years. From the time
when it was a Weaveworks-internal project to make simple deployments
happen to a buzzing and healthy project with maintainers from various
companies, hundreds of contributors and a regular release cycle. Thanks
a lot to
&lt;a href="https://flux.devstats.cncf.io/d/9/developer-activity-counts-by-repository-group-table?orgId=1" target="_blank">everyone who made Flux
possible&lt;/a>!&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;We created Flux as an open source project because we believe that is
the best environment in which to develop software. Since then I have
continually been shown that trusting your users and contributors is
rewarded. Although it is still a modest project, there is a loyal and
growing community around Flux and the methodology it engendered,
GitOps. I see the acceptance of Flux into CNCF incubation status as
validation of that community as much as the software itself.&amp;rdquo;&lt;/p>
&lt;p>-- Michael Bridgen, Flux co-creator&lt;/p>
&lt;/blockquote>
&lt;h2 id="whats-next-for-flux">What&amp;rsquo;s next for Flux&lt;/h2>
&lt;p>For 10 months we have been working on the new iteration of Flux. It is
based on modern tooling, very composable and we were able to add
long-requested features in next to no time.&lt;/p>
&lt;p>Flux as a project has been on this trajectory for a longer time already:
Flux was started in 2016, the Helm Operator was added in 2018, kustomize
support added in 2019. 2020 was the year in which re-started the project
to turn Flux into a GitOps family of projects, where simple and focused
controllers can naturally be composed. 2021 saw Flagger being moved into
the Flux organization and will see the GA release of Flux v2 in the
coming months.&lt;/p>
&lt;h2 id="flux-v2-getting-closer-to-ga">Flux v2 getting closer to GA&lt;/h2>
&lt;img alt="Flux v2 work" style="background-color:#1b8de2; width: 55vw; min-width: 330px;" src="https://deploy-preview-2413--fluxcd.netlify.app/img/building-blocks.svg" />
&lt;p>We are very proud of where Flux v2 is at now, and are carefully working
toward a GA release, at which point we&amp;rsquo;ll recommend that all Flux v1
users migrate to Flux v2.&lt;/p>
&lt;p>Now is the perfect time to familiarise yourself with
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/">Flux
v2&lt;/a> - the Get Started guide only takes a couple of minutes to complete.
If you prefer a video, check out
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/resources/">our resources section&lt;/a>.&lt;/p>
&lt;p>Migrating from v1 will require some work, but it will definitely be
worth it: in this iteration you are going to get&lt;/p>
&lt;ul>
&lt;li>Support for multiple Git repositories&lt;/li>
&lt;li>Operational insight through health checks, events and alerts&lt;/li>
&lt;li>Multi-tenancy capabilities&lt;/li>
&lt;li>Better performance&lt;/li>
&lt;li>And lots of other new features&lt;/li>
&lt;/ul>
&lt;p>We&amp;rsquo;ve taken our time to ensure that Flux v2 has feature parity with Flux
v1, and that end users have the best experience possible migrating to
Flux v2. Stay tuned for our upcoming announcement about the Flux v2
migration and support timeline.&lt;/p>
&lt;h2 id="get-started-today">Get started today&lt;/h2>
&lt;p>If you have been waiting to start your GitOps journey, today is a good
time to start!
Check out the following upcoming events&lt;/p>
&lt;blockquote>
&lt;p>Video Replay:
&lt;a href="https://www.meetup.com/GitOps-Community/events/276539791/" target="_blank">Migrating from Flux v1 to Flux v2 with Leigh
Capili&lt;/a>&lt;/p>
&lt;p>22 Mar 2021 -
&lt;a href="https://weaveworks.zoom.us/webinar/register/WN_rpXk5yhYQN2zxIRUNDxCow" target="_blank">Hands-On GitOps Patterns for Helm Users with Scott
Rigby&lt;/a>&lt;/p>
&lt;p>25 Mar 2021 -
&lt;a href="https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-on-demand-webinar-flux-is-incubating-the-road-ahead/" target="_blank">CNCF On-Demand Webinar: Flux is Incubating + The Road
Ahead&lt;/a>&lt;/p>
&lt;p>5 Apr 2021 -
&lt;a href="https://www.meetup.com/GitOps-Community/events/276674768/" target="_blank">Flux v2 on Azure with Leigh
Capili&lt;/a>&lt;/p>
&lt;p>19 Apr 2021 -
&lt;a href="https://www.meetup.com/GitOps-Community/events/276582835/" target="_blank">Setting up Notifications, Alerts, &amp;amp; Webhook with Flux
v2 by Alison Dowdney&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>Or dive straight into our
&lt;a href="https://deploy-preview-2413--fluxcd.netlify.app/flux/get-started/">Get Started guide&lt;/a>
to get started with the next generation of Flux today.&lt;/p></description></item></channel></rss>