🔧
DevOps
Skaffold
Kubernetes 애플리케이션 개발 자동화 도구
Kubernetes 애플리케이션 개발 자동화 도구
Skaffold는 Google에서 개발한 Kubernetes 애플리케이션의 로컬 개발과 CI/CD를 자동화하는 도구입니다. 코드 변경을 감지하면 자동으로 빌드, 푸시, 배포를 수행하여 개발자의 내부 루프(inner loop)를 크게 단축합니다.
Skaffold의 핵심 기능은 파일 동기화(File Sync)와 핫 리로드입니다. 코드 변경 시 전체 이미지를 다시 빌드하지 않고, 변경된 파일만 실행 중인 컨테이너에 동기화하여 몇 초 만에 변경사항을 확인할 수 있습니다. Docker, Jib, Buildpacks, Kaniko 등 다양한 빌드 도구를 지원하며, Helm, Kustomize, kubectl과 통합되어 다양한 배포 방식을 지원합니다.
# skaffold.yaml
apiVersion: skaffold/v4beta5
kind: Config
metadata:
name: my-app
build:
local:
push: false
useBuildkit: true
artifacts:
- image: my-app
context: .
docker:
dockerfile: Dockerfile
sync:
manual:
- src: "src/**/*.js"
dest: /app
- src: "src/**/*.css"
dest: /app
deploy:
kubectl:
manifests:
- k8s/*.yaml
portForward:
- resourceType: deployment
resourceName: my-app
port: 3000
localPort: 3000
profiles:
- name: dev
activation:
- command: dev
build:
local:
push: false
deploy:
kubectl:
manifests:
- k8s/dev/*.yaml
- name: prod
build:
googleCloudBuild:
projectId: my-project
deploy:
helm:
releases:
- name: my-app
chartPath: charts/my-app
valuesFiles:
- values-prod.yaml
# skaffold.yaml - 마이크로서비스 구성
apiVersion: skaffold/v4beta5
kind: Config
metadata:
name: microservices-app
build:
artifacts:
- image: api-gateway
context: services/api-gateway
docker:
dockerfile: Dockerfile
- image: user-service
context: services/user
docker:
dockerfile: Dockerfile
- image: order-service
context: services/order
docker:
dockerfile: Dockerfile
tagPolicy:
gitCommit:
ignoreChanges: true
deploy:
kustomize:
paths:
- k8s/overlays/dev
test:
- image: user-service
structureTests:
- ./test/container-structure-test.yaml
verify:
- name: integration-test
container:
name: integration-test
image: curlimages/curl
command: ["/bin/sh"]
args: ["-c", "curl -f http://api-gateway/health"]
#!/bin/bash
# Skaffold 개발 워크플로우
# 개발 모드 실행 (파일 감시 + 자동 배포)
skaffold dev --port-forward
# 특정 프로파일로 실행
skaffold dev -p dev --tail
# 한 번만 빌드하고 배포
skaffold run
# 디버그 모드 (원격 디버깅 지원)
skaffold debug --port-forward
# 로컬 클러스터에 렌더링된 매니페스트 확인
skaffold render
# 특정 모듈만 빌드
skaffold build -m user-service
# 배포된 리소스 정리
skaffold delete