karmada/docs/working-with-flux.md

5.6 KiB

Use flux support helm chart propagation

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

    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

    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
    
  4. 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

    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

    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
    
  4. 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