docs/work-with-flux

Signed-off-by: learner0810 <zhongjun.li@daocloud.io>
This commit is contained in:
zhongjun.li 2022-05-26 12:23:54 +08:00 committed by learner0810
parent bad8959132
commit 26810bcbc5
1 changed files with 213 additions and 0 deletions

213
docs/working-with-flux.md Normal file
View File

@ -0,0 +1,213 @@
# 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