클라우드/AWS

[AWS] EKS Automation- 7주차 - FLUX

Cloud_Park 2023. 6. 7. 00:35

참조 -https://malwareanalysis.tistory.com/612

 

EKS 스터디 - 7주차 flux 예제

이 글은 flux가 무엇이고 간단한 예제를 살펴봅니다. 예제를 쉽게 따라하기 위해 모든 예제는 flux CLI를 사용합니다. flux란? flux는 쿠버네티스를 위한 gitops 도구입니다. flux는 git에 있는 쿠버네티스

malwareanalysis.tistory.com

 

Flux 설치 및 bootstrap  진행

# Flux CLI 설치
curl -s https://fluxcd.io/install.sh | sudo bash
. <(flux completion bash)

# 버전 확인
flux --version
flux version 2.0.0-rc.5

# 자신의 Github 토큰과 유저이름 변수 지정
export GITHUB_TOKEN=<your-token>
export GITHUB_USER=<your-username>
export GITHUB_TOKEN=ghp_###
export GITHUB_USER=gasida

# Bootstrap
## Creates a git repository fleet-infra on your GitHub account.
## Adds Flux component manifests to the repository.
## Deploys Flux Components to your Kubernetes Cluster.
## Configures Flux components to track the path /clusters/my-cluster/ in the repository.
flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=fleet-infra \
  --branch=main \
  --path=./clusters/my-cluster \
  --personal

# 설치 확인
kubectl get pods -n flux-system
kubectl get-all -n flux-system
kubectl get crd | grep fluxc
kubectl get gitrepository -n flux-system
NAME          URL                                       AGE    READY   STATUS
flux-system   ssh://git@github.com/gasida/fleet-infra   4m6s   True    stored artifact for revision 'main@sha1:4172548433a9f4e089758c3512b0b24d289e9702'

Github의 토큰은  로그인 > 우층상단 프로필 > setting > 좌측 개발자 > classic tocken 발급 

Gituser는  이메일이 아닌 nic name

 

 

---

자신의 Github에 private 저장소 확인 : my-cluster 폴더에 설치된 flux manifest 확인

 

gitops 도구 설치 - 링크 → flux 대시보드 설치 : admin / password

# gitops 도구 설치
curl --silent --location "https://github.com/weaveworks/weave-gitops/releases/download/v0.24.0/gitops-$(uname)-$(uname -m).tar.gz" | tar xz -C /tmp
sudo mv /tmp/gitops /usr/local/bin
gitops version

# flux 대시보드 설치
PASSWORD="password"
gitops create dashboard ww-gitops --password=$PASSWORD

# 확인
flux -n flux-system get helmrelease
kubectl -n flux-system get pod,svc

 

 

 

Ingress 설치 및 설정

MyDomain=[ingress로 사용할 도메인]
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN

# Ingress 설정
cat <<EOT > gitops-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gitops-ingress
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
    alb.ingress.kubernetes.io/group.name: study
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/success-codes: 200-399
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
  - host: gitops.$MyDomain
    http:
      paths:
      - backend:
          service:
            name: ww-gitops-weave-gitops
            port:
              number: 9001
        path: /
        pathType: Prefix
EOT
kubectl apply -f gitops-ingress.yaml -n flux-system

# 배포 확인
kubectl get ingress -n flux-system

# GitOps 접속 정보 확인 >> 웹 접속 후 정보 확인
echo -e "GitOps Web https://gitops.$MyDomain"

 

간편 예제

hello world (kubstomize) - Github(악분님)

   github에 있는 nginx manifest를 쿠버네티스에 배포합니다. 배포할 때 kusotmize를 사용

# 소스 생성 : 유형 - git, helm, oci, bucket
# flux create source {소스 유형}
# 악분(최성욱)님이 준비한 repo로 git 소스 생성
GITURL="https://github.com/sungwook-practice/fluxcd-test.git"
flux create source git nginx-example1 --url=$GITURL --branch=main --interval=30s

# 소스 확인
flux get sources git
kubectl -n flux-system get gitrepositories

flux 애플리케이션 생성 : 유형(kustomization) , 깃 소스 경로( —path ./nginx) → gitops 웹 대시보드에서 확인

# [터미널] 모니터링
watch -d kubectl get pod,svc nginx-example1

# flux 애플리케이션 생성 : nginx-example1
flux create kustomization nginx-example1 --target-namespace=default --interval=1m --source=nginx-example1 --path="./nginx" --health-check-timeout=2m

# 확인
kubectl get pod,svc nginx-example1
kubectl get kustomizations -n flux-system
flux get kustomizations

 

 

실습종료

삭제

# [터미널] 모니터링
watch -d kubectl get pod,svc nginx-example1

# flux 애플리케이션 삭제 >> 파드와 서비스는? flux 애플리케이션 생성 시 --prune 옵션 false(default 값)
flux delete kustomization nginx-example1
flux get kustomizations
kubectl get pod,svc nginx-example1

# flux 애플리케이션 다시 생성 :  --prune 옵션 true
flux create kustomization nginx-example1 \
  --target-namespace=default \
  --prune=true \
  --interval=1m \
  --source=nginx-example1 \
  --path="./nginx" \
  --health-check-timeout=2m

# 확인
flux get kustomizations
kubectl get pod,svc nginx-example1

# flux 애플리케이션 삭제 >> 파드와 서비스는? 
flux delete kustomization nginx-example1
flux get kustomizations
kubectl get pod,svc nginx-example1

# flux 소스 삭제
flux delete source git nginx-example1

# 소스 확인
flux get sources git
kubectl -n flux-system get gitrepositories

 

 


기타 

더보기
  • Clone the git repository
# Clone the git repository : 자신의 Github 의 Username, Token 입력
**git clone <https://github.com/$GITHUB_USER/fleet-infra**>
Username for '<https://github.com>': *<자신의 Github 의 Username>*
Password for '<https://gasida@github.com>': *<자신의 Github의 Token>*

# 폴더 이동
cd fleet-infra
tree
  • Add podinfo repository to Flux - 샘플
# GitRepository yaml 파일 생성
flux create source git podinfo \\
  --url=https://github.com/stefanprodan/podinfo \\
  --branch=master \\
  --interval=30s \\
  --export > ./**clusters/my-cluster/podinfo-source.yaml**

# GitRepository yaml 파일 확인
cat ./clusters/my-cluster/podinfo-source.yaml | yh

# Commit and push the podinfo-source.yaml file to the fleet-infra repository >> Github 확인
git config --global user.name "*Your Name*"
git config --global user.email "*you@example.com*"
git add -A && git commit -m "Add podinfo GitRepository"
**git push**
Username for '<https://github.com>': *<자신의 Github 의 Username>*
Password for '<https://gasida@github.com>': *<자신의 Github의 Token>*

# 소스 확인
flux get sources git
kubectl -n flux-system get gitrepositories
  • Deploy podinfo application : Configure Flux to build and apply the kustomize directory located in the podinfo repository **- 링크
# [터미널]
watch -d kubectl get pod,svc

# Use the flux create command to create a Kustomization that applies the podinfo deployment.
flux **create** **kustomization** podinfo \\
  --target-namespace=default \\
  --source=podinfo \\
  --path="./kustomize" \\
  --prune=true \\
  --interval=5m \\
  --export > ./clusters/my-cluster/podinfo-kustomization.yaml

# 파일 확인
cat ./clusters/my-cluster/podinfo-kustomization.yaml | yh

# Commit and push the Kustomization manifest to the repository:
git add -A && git commit -m "Add podinfo Kustomization"
git push

# 확인
kubectl get pod,svc
kubectl get kustomizations -n flux-system
flux get kustomizations
tree
  • Watch Flux sync the application
# [터미널]
watch -d kubectl get pod,svc

# 파드 갯수 변경 시도 >> 어떻게 되는가?
kubectl scale deployment podinfo --replicas 1
...
kubectl scale deployment podinfo --replicas 3
...
  • 삭제
#
flux delete kustomization podinfo
flux delete source git podinfo

#
flux uninstall --namespace=flux-system
  • Github에 fleet-infra Repo 제거하기