RBAC·ServiceAccount부터 Tekton·Argo CD, Autoscaler, GitOps까지
쿠버네티스 클러스터를 운영하면서 실제로 부딪힌 개념‧실습 내용을 개발 Velog에 기록하기 위해 정리했다.
한 번 읽고 끝내기보다 “필요할 때 바로 찾아보는 레퍼런스”를 목표로, 주요 토픽을 단계별로 모았다.
KUBECONFIG 환경 변수 $HOME/.kube/config /var/run/secrets/kubernetes.io/serviceaccount | 구분 | 권한 범위 | 예시 |
|---|---|---|
| Role | 하나의 Namespace | kubectl get pod ← 해당 Namespace 안의 Pod만 조회 |
| ClusterRole | 클러스터 전체 | kubectl get ns ← 모든 Namespace 조회 |
kaniko 컨테이너로 Docker Build & Push 수행 →containerd/crio)와 충돌 無 | 전략 | 특징 | 언제? |
|---|---|---|
| Rolling Update | Pod를 일정 비율로 교체maxSurge, maxUnavailable 조정 | 스키마 변화가 없는 소규모 기능 릴리즈 |
| Blue/Green | 두 세트를 완전히 분리해 한 번에 트래픽 스위칭 | DB 스키마 변경 등 단계적 교체가 불가한 경우 |
| Canary | 새 버전을 일부 트래픽에만 우선 적용 | 위험도 높은 기능 검증, A/B 테스트 |
Sidecar (Service Mesh)를 붙이면 Header·Path 기반 세밀 라우팅으로 Canary/Blue‑Green을 더 우아하게 운용할 수 있다.
| 오브젝트 | 스케일 대상 | 트리거 메트릭 | 설치 필요 |
|---|---|---|---|
| HPA | Pod Replica | CPU·Memory 사용률 등 | 기본 내장 |
| VPA | Pod 자원(Limit/Request) | CPU·Memory 실측치 | 별도 설치 |
| Cluster Autoscaler / Karpenter | Node 수 | Pod Pending 상태 | 별도 설치 |
metrics.k8s.io 구현체로 CPU/Memory 데이터 제공 custom.metrics.k8s.io 확장 type: Opaque etc.) tls.crt(Public Key) + tls.key(Private Key) → Ingress HTTPS 구간 종료 | QoS Class | 조건 | Eviction 우선순위 |
|---|---|---|
| Guaranteed | Request = Limit 모두 설정 | 가장 안전 |
| Burstable | Request ≠ Limit | 중간 |
| BestEffort | Request·Limit 미설정 | 가장 먼저 Kill |
| 도구 | 장점 | 단점 |
|---|---|---|
| Helm | 차트 패키징·버전 관리 ⬆ | “Pull 모드”라 대규모 릴리즈 시 느릴 수 있음 |
| Kustomize | Base + Overlay 구조로 가벼움 | 복잡한 템플릿 로직은 직접 스크립팅 필요 |
Argo CD는 두 방식을 모두 지원하므로 팀 선호도에 따라 선택 가능.
graph TD
A["Git Commit"] --> B[ⓐ Tekton Pipeline<br/>• Lint/Test<br/>• Kaniko Build/Push];
B --> C{이미지 배포?};
C -->|태그/버전 변경| D[(Harbor/ECR)];
D --> E[ⓑ Argo CD Sync<br/>• Helm/Kustomize Render<br/>• `kubectl apply`];
E --> F[Cluster State (Etcd)];
F -->|Diff 발생| G[Controller Patch/Scale];
# ServiceAccount 확인
kubectl get sa [-n <ns>]
# 토큰·CA 조회 (Pod 내부에서)
cat /var/run/secrets/kubernetes.io/serviceaccount/{token,ca.crt}
# ClusterRole·RoleBinding 권한 열람
kubectl get clusterrole admin -o yaml
kubectl describe rolebinding <name> -n <ns>
# HPA 생성 예시
kubectl autoscale deploy my-app \
--cpu-percent=50 --min=2 --max=10
# Ingress Path Rewrite Anotation
nginx.ingress.kubernetes.io/rewrite-target: /$2
| 특징 | 상세 설명 |
|---|---|
| 플러그인 생태계 | kubernetes-plugin, kaniko, docker-buildx 등 빌드·테스트 스테이지에 필요한 거의 모든 플러그인을 보유. |
| 파이프라인 DSL (Groovy) | SCM 브랜치별 CI 스크립트를 코드로 버전 관리. 복잡한 매트릭스 빌드도 선언적으로 작성. |
| 멀티‑에이전트 전략 | Label로 Node Selector/Pod Template 분리 → GPU/ARM 등 이질적 워커에 맞춤 빌드 가능. |
| Webhook 트리거 | Git Commit·PR 이벤트 감지 → Lint/Test/Build 파이프라인 자동 실행. |
▶ 한마디로, “코드를 이미지 로 변환하는 영역”에 최적화되어 있다.
kubectl apply, kubectl rollout status … kubectl rollout undo를 추가 스크립트로 처리해야 한다. | 핵심 기능 | Jenkins와의 차이 |
|---|---|
| GitOps Sync Loop | Git Repo를 지속적으로 Watch → Etcd 매니페스트와 자동 동기화(Prune 포함) |
| Declarative Rollout | kubectl 명령 필요 없이 Controller가 상태만 보고 Desired State 적용 |
| Health & Rollback 내장 | Progressing/Degraded 상태 판별 → 실패 시 Auto Rollback (옵션) |
| 멀티 Cluster 지원 | clusterSecret, project 단위로 여러 Cluster/Namespace 일괄 관리 |
▶ 요약하면, “배포 이후 계속 상태를 지켜보고 자동으로 맞춰주는 역할”이 Argo CD의 존재 이유다.
| 사용 시나리오 | 권장 툴 |
|---|---|
| 코드 → 컨테이너 이미지 빌드 & 테스트 | Jenkins/Tekton |
| 컨테이너 이미지 → 쿠버네티스 배포 + 상태 지속 모니터링 | Argo CD |
결론 : CI(Continuous Integration)과 CD(Continuous Delivery/Deployment)를 명확히 분리 하면 파이프라인이 단순해지고,
롤백·추적·보안(권한 최소화)까지 자연스럽게 확보된다. 🚀
쿠버네티스 = 선언적 오케스트레이션
결국 API Server ↔ Etcd ↔ Controller 간 이벤트 루프를 이해해야 실전에서 흔들리지 않는다.