클라우드/AWS
[AWS] EKS Automation- 7주차 - FLUX
Cloud_Park
2023. 6. 7. 00:35
참조 -https://malwareanalysis.tistory.com/612
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 제거하기