..

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대로 파드가 늘어나지 않아서 한우물이나 팔걸 생각했다..