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구성이 정상완료 되었습니다.
'Git-Ops구축' 카테고리의 다른 글
| [Git-Ops구축] 4. Gitlab container registry 설치 (0) | 2025.08.03 |
|---|---|
| [Git-Ops구축] 3. Gitlab 설치 (1) | 2025.08.03 |
| [Git-Ops구축] 2. ArgoCD 설치 (3) | 2025.08.03 |
| [Git-Ops구축] 1. 사설인증서 생성 (0) | 2025.08.03 |