Shoulder.dev Logo Shoulder.dev

Components and Controllers in Flux v2

Flux v2 is a GitOps tool for Kubernetes that automates the deployment and management of applications. A key aspect of Flux v2 is its use of components and controllers to manage the deployment process. In this documentation, we will provide an in-depth look at the various components and controllers in Flux v2.

What is Components and Controllers?

According to the Flux v2 documentation, components are the building blocks of a Flux deployment. They represent the desired state of a Kubernetes application, including its configuration and desired image version. Controllers, on the other hand, are the components that manage the deployment process. They monitor the actual state of the application in the cluster and ensure that it matches the desired state.

Why is Components and Controllers important?

Components and controllers are important because they enable Flux v2 to automate the deployment and management of applications in a GitOps workflow. By defining the desired state of an application as a component, and using controllers to manage the deployment process, Flux v2 can ensure that the actual state of the application in the cluster matches the desired state. This leads to a more reliable and consistent deployment process, as well as easier rollbacks and updates.

Source Controller

The Source Controller is responsible for syncing the desired state of applications from external sources, such as Git repositories, to the Kubernetes cluster. It monitors the external sources for changes, and when a change is detected, it updates the corresponding Kubernetes manifests in the cluster.

Example

Here is an example of using the Source Controller to deploy an application from a Git repository:

apiVersion: sourcer.fluxcd.io/v1beta2
      kind: GitRepository
      metadata:
      name: my-repo
      namespace: my-namespace
      spec:
      url: https://github.com/my-user/my-repo.git
      interval: 30s
      branch:
      name: main
      path: ./path/to/manifests
      secretRef:
      name: my-git-secret
      syncPolicy:
      automated: true
      preImage: true
      postImage: true
      automaticMerges:
      enabled: true
      automaticMergesOptions:
      strategy: Merge
      dependencyUpdates:
      enabled: true
      dependencyUpdatesOptions:
      strategy: Merge
      pr:
      enabled: false
      prPollingInterval: 5m
      prTimeout: 1h
      prMergeStrategy: Merge
      prMergeMessage: "Auto merge from ${{ .Git.Commit.Author.Name }}: ${{ .Git.Commit.Message }}"
      prReviewers:
      - name: reviewer1
      email: [email protected]
      - name: reviewer2
      email: [email protected]
      prLabels:
      - name: label1
      - name: label2
      prBranchProtection:
      enabled: false
      prBranchProtectionRules: []
      prMergeCommitMessage: "Auto merge from ${{ .Git.Commit.Author.Name }}: ${{ .Git.Commit.Message }}"
      prMergeCommitMessageTemplate: ""
      prMergeCommitMessageTemplateValues: {}
      prMergeCommitMessageTemplateFile: ""
      prMergeCommitMessageTemplateContent: ""
      prMergeCommitMessageTemplateAnnotations: {}
      prMergeCommitMessageTemplateAnnotationPrefix: ""
      prMergeCommitMessageTemplateAnnotationSuffix: ""
      prMergeCommitMessageTemplateAnnotationSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotations: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotations: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotations: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorMatchKinds: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelector: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchLabels: {}
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchExpressions: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchFields: []
      prMergeCommitMessageTemplateAnnotationSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorAnnotationsSelectorLabelSelectorMatchKinds
      

Explanation