..
aews) flux
왜인지 스택이 제대로 배포되지 않아서 고민하다 gke에 flux를 올려 사용해봤다. 스터디 내내 너무 리소스 정리 없이 써서 뭔가 겹친건지.. 원래대로라면 스택이 파바박 여러개가 떠야하는데, 이유도 알 수 없이 아무 오류도 없이 스택이 하나로 끝나있다. gke의 모든 설정은 기본으로 두고 생성했다.
flux는 argocd와 같은 배포 도구이다. 소스인 깃이나 버킷 등을 등록해두면, flux가 주기적으로 소스를 확인하여 달라진 것이 있다면 리소스를 자동으로 배포해준다.
설치
❯ brew install fluxcd/tap/flux
...
❯ . <(flux completion bash)
/dev/fd/12:type:12114: bad option: -t 23:28:25
❯ flux --version
flux version 2.0.0-rc.5
export GITHUB_TOKEN=$TOKEN
export GITHUB_USER=$USER
# 완료 후 깃을 확인해보면 test4flux라는 비공개 레포가 보인다.
❯ flux bootstrap github \
--owner=$GITHUB_USER \
--repository=test4flux --branch=main \
--path=./clusters/my-cluster \
--personal
► connecting to github.com
✔ repository "https://github.com/nyoung08/test4flux" created
► cloning branch "main" from Git repository "https://github.com/nyoung08/test4flux.git"
✔ cloned repository
...
❯ kubectl get gitrepository -n flux-system
NAME URL AGE READY STATUS
flux-system ssh://git@github.com/nyoung08/test4flux 3m6s True stored artifact for revision 'main@sha1:b33fbc2a11ede771714c2c9c3e3d6da22e0096e9'
# 생성되는 리소스들
# helm controller / kustomize controller / notification controller / source controller
❯ k get deploy -n flux-system
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/helm-controller 1/1 1 1 2m37s
deployment.apps/kustomize-controller 1/1 1 1 2m37s
deployment.apps/notification-controller 1/1 1 1 2m37s
deployment.apps/source-controller 1/1 1 1 2m37s
source 추가
❯ flux get source git
NAME REVISION SUSPENDED READY MESSAGE
flux-system main@sha1:b33fbc2a False True stored artifact for revision 'main@sha1:b33fbc2a'
# 악분님의 깃헙을 잠시 빌려.. 등록해보았다.
❯ GITURL="https://github.com/sungwook-practice/fluxcd-test.git"
❯ flux create source git nginx-example1 --url=$GITURL --branch=main --interval=30s
✚ generating GitRepository source
► applying GitRepository source
✔ GitRepository source created
◎ waiting for GitRepository source reconciliation
✔ GitRepository source reconciliation completed
✔ fetched revision: main@sha1:4478b54cb7a8eaf1ee2665e2b3dd5bcfd55e9da9
# source git이 하나 더 추가됨
❯ flux get source git
NAME REVISION SUSPENDED READY MESSAGE
flux-system main@sha1:b33fbc2a False True stored artifact for revision 'main@sha1:b33fbc2a'
nginx-example1 main@sha1:4478b54c False True stored artifact for revision 'main@sha1:4478b54c'
어플리케이션 생성
# 어플리케이션을 만들게되면 리소스들이 생성된다.
❯ flux create kustomization nginx-example1 --target-namespace=default --interval=1m --source=nginx-example1 --path="./nginx" --health-check-timeout=2m
✚ generating Kustomization
► applying Kustomization
✔ Kustomization created
◎ waiting for Kustomization reconciliation
✔ Kustomization nginx-example1 is ready
✔ applied revision main@sha1:4478b54cb7a8eaf1ee2665e2b3dd5bcfd55e9da9
❯ k get po,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-example1 1/1 Running 0 39s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.72.0.1 <none> 443/TCP 107m
service/nginx-example1 ClusterIP 10.72.1.244 <none> 80/TCP 40s
❯ flux get kustomizations
NAME REVISION SUSPENDED READY MESSAGE
flux-system main@sha1:b33fbc2a False True Applied revision: main@sha1:b33fbc2a
nginx-example1 main@sha1:4478b54c False True Applied revision: main@sha1:4478b54c
삭제
❯ flux delete kustomization nginx-example1
Are you sure you want to delete this kustomization: y
► deleting kustomization nginx-example1 in flux-system namespace
✔ kustomization deleted
# flux application 삭제했음에도 생성되어있는 리소스들은 남아있는다.
# 이를 원치 않을 시, flux application 생성 할 때 --prune=true 옵션이 필요하다.
❯ k get po,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-example1 1/1 Running 0 6m12s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.72.0.1 <none> 443/TCP 112m
service/nginx-example1 ClusterIP 10.72.1.244 <none> 80/TCP 6m13s
sync 확인…을 하고 싶었는데
# private git을 source로 등록하기 위해 인증정보를 secret으로 생성
# flux-system ns에 있어야 flux가 인증 시 참조할 수 있다.
❯ k describe secret test -n flux-system
Name: test
Namespace: flux-system
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 40 bytes
username: 8 bytes
# source git 등록
❯ flux create source git nginx-example1 --url=https://github.com/nyoung08/demo --branch=main --interval=30s -u=.data.username -p=.data.password --secret-ref=test --export > ./clusters/my-cluster/test-source.yaml
✚ generating GitRepository source
► applying GitRepository source
✔ GitRepository source updated
◎ waiting for GitRepository source reconciliation
✔ GitRepository source reconciliation completed
✔ fetched revision: main@sha1:cfc6debd57a34d767049c63f68f6cd5952156678
❯ cat test-source.yaml
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: test
namespace: flux-system
spec:
interval: 30s
ref:
branch: main
secretRef:
name: test
url: https://github.com/nyoung08/demo
# flux application 생성
❯ flux create kustomization test --target-namespace=default --source=test --path="./kustomize" --prune=true --interval=5m --export > ./clusters/my-cluster/test-kustomization.yaml
❯ cat clusters/my-cluster/test-kustomization.yaml
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: test
namespace: flux-system
spec:
interval: 5m0s
path: ./kustomize
prune: true
sourceRef:
kind: GitRepository
name: test
targetNamespace: default
# 에서.. 끝났다. kustomization 을 확인해보는 명령어를 실행했을 때 아래와 같이 나온다.
# 위에서 틀린거 없이 잘 이어나간거같은데.. 뭔가 잘못 된 듯 하다...
NAME REVISION SUSPENDED READY MESSAGE
test False False kustomization path not found: stat /tmp/kustomization-2600187198/kustomize: no such file or directory
이거 말고도 독스 문서 시작하기에 있는 샘플로도 해보려 했었는데 설정한 hpa대로 파드가 늘어나지 않아서 한우물이나 팔걸 생각했다..