argocd를 argocd로 배포하기 (gitops로 관리하기)

 

 

argocd로 배포하면서 가장 크게 좋았던 점은

배포하기 전에 변경되는 점이무엇인지 비교하기 쉬웠다는 점이다.

 

argocd도 버전도 업그레이드 해주거나 설정을 변경하거나 gitops로 관리하면 편해지기 때문에

gitops로 관리하는 방법을 공유한다. (helm차트 배포 X)

 

 

Argocd In Argocd

▪️ step 1.  kustomization.yaml 파일 만들기


apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: argocd

resources:
- https://raw.githubusercontent.com/argoproj/argo-cd/v2.9.6/manifests/install.yaml

 

argocd 공식 설치 방식은 kubectl 명령어를 이용한 설치이다.

kustomization을 사용해서 기본 설치 방식을 할 수 있도록 파일을 생성하고 소스저장소에 push한다.

 

 

▪️ step 2. argocd를 설치한다.


 

$ kubectl create ns argocd
namespace/argocd created

$ kustomize build . | kubectl apply -n argocd -f -
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-applicationset-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-notifications-controller created
serviceaccount/argocd-redis created
serviceaccount/argocd-repo-server created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-applicationset-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-notifications-controller created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-applicationset-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-notifications-controller created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created
configmap/argocd-cm created
configmap/argocd-cmd-params-cm created
configmap/argocd-gpg-keys-cm created
configmap/argocd-notifications-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created
secret/argocd-notifications-secret created
secret/argocd-secret created
service/argocd-applicationset-controller created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-notifications-controller-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server created
service/argocd-server-metrics created
deployment.apps/argocd-applicationset-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-notifications-controller created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
statefulset.apps/argocd-application-controller created
networkpolicy.networking.k8s.io/argocd-application-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-applicationset-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-dex-server-network-policy created
networkpolicy.networking.k8s.io/argocd-notifications-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-redis-network-policy created
networkpolicy.networking.k8s.io/argocd-repo-server-network-policy created
networkpolicy.networking.k8s.io/argocd-server-network-policy created

 

 

▪️ step 3. argocd 앱 생성 후 다시 재배포 


app 설정 내용
배포한 뒤

 

이렇게 배포 후, gitops 방식을 통해 쉽게 관리할 수 있습니다.

 


Argocd Gitops로 관리하기 

▪️ 추가 1.  업그레이드 방법


apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: argocd

resources:
#- https://raw.githubusercontent.com/argoproj/argo-cd/v2.9.6/manifests/install.yaml
- https://raw.githubusercontent.com/argoproj/argo-cd/v2.10.0/manifests/install.yaml

 

위처럼 버전 정보만 변경해서 push해주면 바뀐 버전으로 배포할 수 있다. 

 

 

그리고 변경할 버전을 배포하기 전에 바뀐 곳을 미리확인할 수 있다.

 

 

▪️ 추가 2. admin 계정 비밀번호 고정시키기 


처음에 argocd를 배포하면 초기 admin 계정이 생성된다.

$ kubectl get secrets -n argocd
NAME                          TYPE     DATA   AGE
argocd-initial-admin-secret   Opaque   1      31m
argocd-notifications-secret   Opaque   0      32m
argocd-secret                 Opaque   5      32m

 

이계정이 아니라 다른 계정으로 사용하고자 한다면 다음의 방법을 따라하면 된다

 

step 1 ) 비밀번호 키 생성

argocd cli을 설치한 뒤 비밀번호 키를 생성한다. 

$ argocd account bcrypt --password << 비밀번호 입력 >>
$2a$10$9MCAX3o6EOIrXxkGAKK4qOUB3hN8ywx9LI61NQX7eq09D7Ijz4uqu%

 

step 2 ) 날짜 정보 생성

그리고 생성 날짜도 확인한다

$ date +%FT%T%Z
2024-02-10T13:38:38KST

 

 

step 3 ) 소스저장소에 push 후 배포

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: argocd

resources:
- https://raw.githubusercontent.com/argoproj/argo-cd/v2.9.6/manifests/install.yaml


patches:
- path: ./overlays/argocd-secret.yaml # 기존 argocd-secret에 추가
# overlays/argocd-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  labels:
    app.kubernetes.io/instance: argocd
    app.kubernetes.io/name: argocd-secret
    app.kubernetes.io/part-of: argocd
  name: argocd-secret
type: Opaque
stringData:
  admin.password: $2a$10$9MCAX3o6EOIrXxkGAKK4qOUB3hN8ywx9LI61NQX7eq09D7Ijz4uqu%
  admin.passwordMtime: 2024-02-10T13:38:38KST

 

이 값을 argocd-secret에 추가해 준 뒤 push하고 배포한다.

admin.password와 admin.passwordMtime 추가된 모습

 

step 4 ) 초기 비밀번호가 담긴 secret 삭제 

$ kubectl delete secret argocd-initial-admin-secret -n argocd
secret "argocd-initial-admin-secret" deleted

 

이렇게 하면 admin 계정을 업데이트하거나 고정시켜 사용할 수 있다.

 

 

GitHub - nueavv/argocd-in-argocd

Contribute to nueavv/argocd-in-argocd development by creating an account on GitHub.

github.com

여기서 구조를 확인해볼 수 있습니다.