/flux-intro

flux-intro

Primary LanguageMustache

Baixar binarios

curl -skL https://storage.googleapis.com/kubernetes-release/release/v1.19.10/bin/linux/amd64/kubectl > bin/kubectl
curl -sL https://github.com/kubernetes-sigs/kind/releases/download/v0.11.1/kind-linux-amd64 > bin/kind
curl -sL https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv4.1.3/kustomize_v4.1.3_linux_amd64.tar.gz | tar xzv -C bin/ kustomize
curl -sL https://github.com/instrumenta/kubeval/releases/latest/download/kubeval-linux-amd64.tar.gz | tar xzv -C bin/ kubeval
curl -sL https://github.com/fluxcd/flux2/releases/download/v0.14.2/flux_0.14.2_linux_amd64.tar.gz | tar xzv -C bin flux
curl -skL https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz | tar xz -C bin --transform=s,.*,helm, linux-amd64/helm

chmod +x bin/*
export PATH=$PWD/bin:$PATH

Criar cluster Kind

kind create cluster --name flux # --config kindconfig.yaml
kubectl get node -w

Instalar Flux2

flux install
kubectl get pod -A
kubectl get crds | grep fluxcd
kubectl api-resources | grep fluxcd

## kubens flux-system
kubectl config set contexts.$(kubectl config current-context).namespace flux-system

HelmRepository

flux create source helm bitnami --url=https://charts.bitnami.com/bitnami ### --export
flux create source helm ingress-nginx --url=https://kubernetes.github.io/ingress-nginx ### --export
kubectl get -A helmrepo

mostrar repositorio dentro do pod do source-controller

mostrar md5sum com formatacao flux mostrar interval

HelmRelease

DOCKER_CIDR=$(docker network inspect kind --format '{{(index .IPAM.Config 0).Subnet}}')
echo $DOCKER_CIDR

METALLB_RANGE=$(printf "%s-%s" $(cut -f1-2 -d. <<<$DOCKER_CIDR){.100.0,.200.0})
echo $METALLB_RANGE

sed -e "s/__METALLB_RANGE__/$METALLB_RANGE/" metallb-values.yaml.tpl > metallb-values.yaml
cat metallb-values.yaml

kubectl apply -f - <<EOF
$(flux create hr metallb \
        --chart metallb \
        --chart-version 2.0.2 \
        --source HelmRepository/bitnami \
        --target-namespace metallb-system \
        --values ./metallb-values.yaml \
        --export)
  install:
    createNamespace: true
EOF

kubectl describe hr/metallb
kubectl get hr -w
flux get hr
helm ls -A
kubectl apply -f - <<EOF
$(flux create hr ingress-nginx \
    --chart ingress-nginx \
    --chart-version 3.25.0 \
    --source HelmRepository/ingress-nginx \
    --target-namespace ingress-nginx \
    --export)
  install:
    createNamespace: true
  values:
    defaultBackend:
      enabled: true
EOF

kubectl get hr -w
kubectl describe hr/ingress-nginx

kubectl get svc -n ingress-nginx -w
INGRESS_IP=$(kubectl get service -n ingress-nginx ingress-nginx-ingress-nginx-controller -o jsonpath={.status.loadBalancer.ingress[0].ip})
echo $INGRESS_IP
kubectl edit hr/ingress-nginx
# udpate version 3.30.0
watch flux get hr

mostrar charts dentro do pod do source-controller

GitRepository

flux create source git app --url https://github.com/caruccio/flux-intro.git --branch main
kubectl get gitrepo -A
flux get source git

Simple app

flux create kustomization simple --source GitRepository/app --path /simple
kubectl get ks,gitrepo
flux get ks

curl --resolve kind.io:80:$INGRESS_IP http://kind.io/
kubectl delete ks simple -n flux-system
kubectl delete deploy,svc,ing --all -n default

Kustomize

cd kustomize
grep ^ base/ -r

grep ^ hlg/ -r
kustomize build hlg/ > hlg.yaml

grep ^ prd/ -r
kustomize build prd/ > prd.yaml

diff -pu hlg.yaml prd.yaml

cd ../

Complex app

cd complex/
cat bootstrap/hlg.yaml
kubectl apply -f bootstrap/hlg.yaml

kubectl get ks -n flux-system
kubectl get deploy,svc,ing -n default

kubectl delete deploy/nginx svc/nginx ing/nginx -n default
watch kubectl get deploy,svc,ing -n default

kubectl delete ks/app -n flux-system
kubectl get deploy,svc,ing -n default

Cleanup

cd ..
bash reset.sh

Image Automation

cd images/

flux install --components-extra=image-automation-controller,image-reflector-controller
kubectl get pod -A
kubectl get crds | grep fluxcd | egrep '^|.*image.*'
kubectl api-resources | grep fluxcd | egrep '^|.*image.*'
export DOCKER_REPO=XXX ## <----- Docker Hub username -----

make release APP_VERSION=1.0.0 DOCKER_REPO=$DOCKER_REPO
make run APP_VERSION=1.0.0 DOCKER_REPO=$DOCKER_REPO
docker ps
curl 127.0.0.1:8080
make stop
cat imagerepo.yaml
kubectl apply -f imagerepo.yaml
flux get image all

cat imagepolicy.yaml
kubectl apply -f imagepolicy.yaml
flux get image all
export GITHUB_USERNAME=caruccio
export GITHUB_PASSWORD=XXXXXXXX ## ---> https://github.com/settings/tokens (scope=repo)

flux create source git app \
    --url https://github.com/caruccio/flux-intro.git \
    --branch main \
    --username "$GITHUB_USERNAME" \
    --password "$GITHUB_PASSWORD"

flux get source git
kubectl describe secret app

flux create kustomization app \
    --source GitRepository/app \
    --path /images/app

flux get ks
kubectl get deployment app -n default -o wide
cat imageupdateautomation.yaml
kubectl apply -f imageupdateautomation.yaml
flux get image all
make release APP_VERSION=1.0.1 DOCKER_REPO=$DOCKER_REPO

flux reconcile image repository app
flux get image all
kubectl describe deployment app -n default
kubectl get deploy -n default -w   ## <---- outro terminal

make release APP_VERSION=1.0.2 DOCKER_REPO=$DOCKER_REPO
flux reconcile image repository app