# Use flux support helm chart propagation [Flux](https://github.com/fluxcd/flux) is most useful when used as a deployment tool at the end of a Continuous Delivery pipeline. Flux will make sure that your new container images and config changes are propagated to the cluster. ## Start up Karmada clusters You just need to clone Karmada repo, and run the following script in Karmada directory. ``` hack/local-up-karmada.sh ``` ## Start up flux ``` curl -s https://fluxcd.io/install.sh | sudo bash ``` Install the toolkit controllers in the flux-system namespace: ``` flux install ``` tips: 1. The flux tool is installed on each cluster,Using flux Install requires scientific surfing 2. If flux is successfully installed, you can see the following Pod ``` [root@10-6-201-150 ~]# kubectl get pod -n flux-system NAME READY STATUS RESTARTS AGE helm-controller-55896d6ccf-dlf8b 1/1 Running 0 15d kustomize-controller-76795877c9-mbrsk 1/1 Running 0 15d notification-controller-7ccfbfbb98-lpgjl 1/1 Running 0 15d source-controller-6b8d9cb5cc-7dbcb 1/1 Running 0 15d ``` ## helm chart propagation 1. Define a HelmRepository source ```yaml apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: HelmRepository metadata: name: podinfo spec: interval: 1m url: https://stefanprodan.github.io/podinfo --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: helm-repo spec: resourceSelectors: - apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: HelmRepository name: podinfo placement: clusterAffinity: clusterNames: - member1 - member2 ``` 2. Define a HelmRelease source ```yaml apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: name: podinfo spec: interval: 5m chart: spec: chart: podinfo version: 5.0.3 sourceRef: kind: HelmRepository name: podinfo --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: helm-release spec: resourceSelectors: - apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease name: podinfo placement: clusterAffinity: clusterNames: - member1 - member2 ``` 3. Apply those YAML to karmada-apiserver ``` [root@10-6-201-150 helm]# kubectl apply -f ../helm/ helmrelease.helm.toolkit.fluxcd.io/podinfo created helmrepository.source.toolkit.fluxcd.io/podinfo created propagationpolicy.policy.karmada.io/helm-release created propagationpolicy.policy.karmada.io/helm-repo created ``` 5. Switch to the distributed cluster ``` [root@10-6-201-150 ~]# kubectl config use-context member2 Switched to context "member2". [root@10-6-201-150 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE podinfo-78c475b77-94x54 1/1 Running 0 104s [root@10-6-201-150 ~]# helm list -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION podinfo default 1 2022-05-21 07:14:50.73460681 +0000 UTC deployed podinfo-5.0.3 5.0.3 [root@10-6-201-150 ~]# ``` ## kustomize propagation 1. Define a Git repository source ```yaml apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: GitRepository metadata: name: podinfo spec: interval: 1m url: https://github.com/stefanprodan/podinfo ref: branch: master --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: kust-git spec: resourceSelectors: - apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: GitRepository name: podinfo placement: clusterAffinity: clusterNames: - member1 - member2 ``` 2. Define a kustomization ```yaml apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 kind: Kustomization metadata: name: podinfo-dev spec: interval: 5m path: "./deploy/overlays/dev/" prune: true sourceRef: kind: GitRepository name: podinfo validation: client timeout: 80s --- apiVersion: policy.karmada.io/v1alpha1 kind: PropagationPolicy metadata: name: kust-release spec: resourceSelectors: - apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 kind: Kustomization name: podinfo-dev placement: clusterAffinity: clusterNames: - member1 - member2 ``` 3. Apply those YAML to karmada-apiserver ``` [root@10-6-201-150 flux]# kubectl apply -f kust/ gitrepository.source.toolkit.fluxcd.io/podinfo created kustomization.kustomize.toolkit.fluxcd.io/podinfo-dev created propagationpolicy.policy.karmada.io/kust-git created propagationpolicy.policy.karmada.io/kust-release created ``` 5. Switch to the distributed cluster ``` [root@10-6-201-150 ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE backend-69c7655cb-rbtrq 1/1 Running 0 15s cache-bdff5c8dc-mmnbm 1/1 Running 0 15s frontend-7f98bf6f85-dw4vq 1/1 Running 0 15s ``` ## Reference - https://fluxcd.io - https://github.com/fluxcd/flux - https://github.com/fluxcd/helm-operator - https://github.com/fluxcd/kustomize-controller