Git-Ops구축

[Git-Ops구축] 5. 최종 테스트

SY정보 2025. 8. 3. 17:43

GitOps는 "Git을 단일 소스로 사용하여 인프라와 애플리케이션을 선언적으로 관리하고 자동화하는 운영 방식"을 말합니다.
쉽게 말해, 코드를 Git에 올리면 자동으로 배포와 인프라 구성이 이루어지는 방식입니다.

 

이글에서는 ArgoCD , Gitlab , Gitlab Container registry 3개의 프로그램을 이용해서 구성하도록 합니다.

설치방법은 이전글을 참고하시면 됩니다.

 

도커이미지 생성 및 push 준비

앞전에 Gitlab container registry 설치구성시에 생성한 이미지를 그대로 사용하겠습니다.

  • 작업디렉토리 : C:\Users\ky945\SYimage
  • 파일 : index.html, Dockerfile

 

Git저장소 생성

앞전에 Gitlab 설치구성시에 생성한 저장소를 그대로 사용하겠습니다.

  • 작업디렉토리 : C:\Users\ky945\SYgit

 

Gitlab 접근 토큰 생성

ArgoCD 와 containerd 가 registry에 접근하게 됩니다.

Gitlab에 엑세스 토큰을 이용하여 Gitlab repository 와 container registry 에 접근하도록 합니다.

Gitlab 로그인 -> 상단 아이콘 클릭 -> Edit profile -> Access tokens -> Add new token 클릭

아래 값을 입력하고 "Create personal access token" 클릭하면 token 값이 생성됩니다.

token name : SYtoken
Select scopes : read_repository, write_repository, read_registry, write_registry 

#토큰값 : glpat-5d3yb4HrWysGbrPTn-ou

 

containerd에 인증서 설정

containerd가 registry에 접근하기위해 regist.sytech.com  도메인을 인증하려고합니다.

/etc/rancher/k3s/registries.yaml 파일을 생성하고 다음 내용을 추가합니다.

mirrors:
  "regist.sytech.com:5050":
    endpoint:
      - "https://regist.sytech.com:5050"

configs:
  "regist.sytech.com:5050":
    tls:
      ca_file: "/etc/SYssl/sytech.com.crt"

주의!! 파일저장후 K3s 재기동 해야합니다.

 

containerd에 registry를 접근설정

containerd가 registry에 접근하기위한 로그인/패스워드 정보가 필요합니다.

K3s에 imagePullSecret 생성합니다.

~ #  kubectl create secret docker-registry sy-gitlab-sec \
> --docker-server=regist.sytech.com:5050 \
> --docker-username=SYtoken \
> --docker-password=glpat-5d3yb4HrWysGbrPTn-ou \
> --docker-email=admin@sytech.com \
> -n default
secret/sy-gitlab-sec created   <--- 성공입니다.
~ #

 

ArgoCD에 SSL인증서 적용

ArgoCD가 Gitlab에 https://gitlab.sytech.com/root/sygitops.git 접근하기전에 인증서정보를 적용해야합니다.

다음처럼 정해진 configmap에 인증서값을 적용합니다.

# K3s에 진입해서 작업합니다.
vi sy-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-tls-certs-cm
  namespace: argocd
data:
  gitlab.sytech.com: |
    -----BEGIN CERTIFICATE-----
    MIIDMDCCAhigAwIBAgIUVhlt6J3LHR27fWwmMJMSot5cGLgwDQYJKoZIhvcNAQEL
    BQAwFTETMBEGA1UEAwwKc3l0ZWNoLmNvbTAeFw0yNTAzMjExMjE5MDZaFw0yNjAz
    MjExMjE5MDZaMBUxEzARBgNVBAMMCnN5dGVjaC5jb20wggEiMA0GCSqGSIb3DQEB
    AQUAA4IBDwAwggEKAoIBAQC0nv17dLCz087VXLZ/slv3J1AIG87a6klu8PANzYXD
    R22Bi8aWcPCSc9Lvgb21b+mG2JjReaiqVpIMsnIJjSKCkaeGZ12VLy6lMX2qMuPn
    8lBeF6ZGc3NYyWCSCVPiTnVqtIwBaw6+xTDEnowDAzWGFjGgXTpQPByfc1LboV2i
    vXiLdg6cwSBDX+xgPmL88XMxZmTba3psyMeqI+AVjAdVpEPOqpnrC60mOK6slJLS
    v0yTZ21i4eX098Qib0aEFgzAmoUMWmrELCVWuanORM341JtOcIHnTX/DVJWqF+/g
    WyiBfEGIGrPsSgKbHM6VN0hNj5ptEYR9g66F64yH84jrAgMBAAGjeDB2MB0GA1Ud
    DgQWBBTJKVd711Q14Sgf1RN/hQab1hbT8TAfBgNVHSMEGDAWgBTJKVd711Q14Sgf
    1RN/hQab1hbT8TAPBgNVHRMBAf8EBTADAQH/MCMGA1UdEQQcMBqCCnN5dGVjaC5j
    b22CDCouc3l0ZWNoLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAmyQ6Tl9AmyFgTobV
    DVbwwKqMAsv+csKGANURn8kHrf3REMGyucO+pBxb4nEOdK9AX+sdBo5x4KUkOI8e
    UkTH4AK2IAlXfH2NssD4/KQq0BU7rceI2e9FijZNGbMBoByvkDgmOaSkVOgtzfeN
    HwRLZteQvm/YLBQZtR/TBK2pS+oBcInDuDozz5QRhNc3vsJwuvXIxrgRFEpKTf+O
    IwU8IKvgbMoPP7mE+75lbs6nh8wMLRRy50c19ADZ+LcFJY47Rf762qmPboymM2RC
    DovjGOo/w4Ai3KeSn5Sg9PhaawBHmbaWqaShsvi86RDM8wEUp16XxM6uguSG3nYW
    FLU8Uw==
    -----END CERTIFICATE-----

# argocd-tls-certs-cm : 정해진 이름입니다. 변경하면 안됩니다.

# configmap을 적용합니다.
kubectl apply -f sy-configmap.yaml
configmap/argocd-tls-certs-cm configured

 

모든 구성 설정이 끝났습니다.

테스트로 어플리케이션을 배포해보도록 하겠습니다.

 

매니페스트파일 생성

K3s에 배포할 컨테이너이미지 와 서비스 포트를 작성합니다.

PS C:\Users\ky945\SYgit> notepad deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sy-nginx
  labels:
    app: sy-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sy-nginx
  template:
    metadata:
      labels:
        app: sy-nginx
    spec:
      containers:
      - name: sy-nginx
        image: regist.sytech.com:5050/root/sygitops/sy-nginx:latest
        ports:
        - containerPort: 80
      imagePullSecrets:
        - name: sy-gitlab-sec

# sy-gitlab-sec : registry 접근을 위한 로그인/패스워드 정보가 있는 secret 지정

 

service 파일 생성

외부로 서비스를 오픈할 정보를 작성합니다.

PS C:\Users\ky945\SYgit> notepad service.yaml

apiVersion: v1
kind: Service
metadata:
  name: sy-nginx
spec:
  type: NodePort
  selector:
    app: sy-nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080

 

Git 저장소로 push

PS C:\Users\ky945\SYgit> git add .

PS C:\Users\ky945\SYgit> git commit -m "deploy, service 파일추가"
[main eec5ea6] deploy, service 파일추가
 2 files changed, 34 insertions(+)
 create mode 100644 deployment.yaml
 create mode 100644 service.yaml
 
PS C:\Users\ky945\SYgit> git push -u origin main
git: 'credential-manager-core' is not a git command. See 'git --help'.
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 678 bytes | 678.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://gitlab.sytech.com/root/sygitops.git
   6e78cd1..eec5ea6  main -> main
branch 'main' set up to track 'origin/main'.

 

ArgoCD에서 Repository 연결

ArgoCD 로그인 -> Settings -> CONNECT REPO -> 아래 내용 입력후 CONECT 클릭합니다.

Choose your connect method : VIA HTTPS
Type : git
Name : sy-repository
Project : default
Repository URL : https://gitlab.sytech.com/root/sygitops.git
Username : SYtoken
Password : glpat-5d3yb4HrWysGbrPTn-ou

 

CONNECTION STATUS 가 Successful 나오면 성공입니다.

 

AgroCD에서 어플리케이션 생성

왼쪽 Applications -> 상단 NEW APP -> 다음값을 입력하고 상단에 CREATE 클릭

Application Name : sy-nginx-app
Project Name : default
Repository URL : https://gitlab.sytech.com/root/sygitops.git
Path : .
Cluster URL : https://kubernetes.default.svc
Namespace : default

 

sy-nginx-app 박스가 생기면 성공입니다.

 

작은 박스안에 SYNC 클릭하고 기다리면 Status에 Healthy 와 Synced 가 green색으로 보이면 성공입니다.

 

Gitops구성이 정상완료 되었습니다.