개인적인 용도로 사용하기 위해 계속해서 개발 중입니다.
K8s-Deploy-Watcher는 Kubernetes Deployment의 실시간 상태를 모니터링하고
배포 결과를 Slack 또는 이메일로 알려주는 Kubernetes Operator입니다.
-
실시간 배포 모니터링
- Deployment 상태 실시간 추적
- StatefulSet 상태 추적 (신규)
- 실시간 이미지 변경 감지
-
지원하는 리소스 타입
- Deployment
- StatefulSet
-
다양한 알림 채널
- Slack 웹훅 지원
- 이메일 알림 지원
- 알림 재시도 메커니즘
-
상세한 상태 정보
- 상세한 배포 상태 정보 제공
- 실시간 메트릭스 수집
- Kubernetes 이벤트와 통합
- Kubernetes >= 1.21
- Go >= 1.20 (개발 시)
- kubectl CLI
- Helm (선택사항)
# 프로젝트 클론
git clone https://github.com/ddukbg/k8s-deploy-watcher.git
cd k8s-deploy-watcher
# Helm 차트 설치
helm install deploy-watcher ./charts/k8s-deploy-watcher \
--namespace deploy-watcher \
--create-namespace
# Operator 설치
helm install deploy-watcher ddukbg/k8s-deploy-watcher \
--namespace deploy-watcher \
--create-namespace
# 1. CRD 및 RBAC 설정 적용
kubectl apply -f config/crd/deployment_tracker.yaml
kubectl apply -f config/rbac/role.yaml
kubectl apply -f config/rbac/role_binding.yaml
# 2. Operator Deployment 생성 및 적용
cat <<EOF > config/manager/manager.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-deploy-watcher
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: k8s-deploy-watcher
template:
metadata:
labels:
app: k8s-deploy-watcher
spec:
serviceAccountName: deployment-tracker
containers:
- name: manager
image: ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/k8s-deploy-watcher:latest
ports:
- containerPort: 8080
name: metrics
- containerPort: 8081
name: health
livenessProbe:
httpGet:
path: /healthz
port: 8081
readinessProbe:
httpGet:
path: /readyz
port: 8081
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 200m
memory: 128Mi
EOF
kubectl apply -f config/manager/manager.yaml
# 3. Operator Pod 실행 상태 확인
kubectl get pods -l app=k8s-deploy-watcher
kubectl logs -l app=k8s-deploy-watcher
# 4. 테스트용 Deployment 생성
cat <<EOF > nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
EOF
kubectl apply -f nginx-deployment.yaml
# 5. DeploymentTracker CR 생성
cat <<EOF > tracker-example.yaml
apiVersion: ddukbg.k8s/v1alpha1
kind: DeploymentTracker
metadata:
name: nginx-tracker
spec:
deploymentName: nginx
namespace: default
notify:
slack: "https://hooks.slack.com/services/YOUR-WEBHOOK-URL"
retryCount: 3
alertOnFail: true
EOF
kubectl apply -f tracker-example.yaml
# 6. DeploymentTracker 상태 확인
kubectl get deploymenttracker
kubectl describe deploymenttracker nginx-tracker
# 7. 배포 변경으로 테스트
kubectl set image deployment/nginx nginx=nginx:1.25.0
# 8. 로그 및 Slack 알림 확인
kubectl logs -l app=k8s-deploy-watcher
# Deployment 단일 대상으로 지정
apiVersion: ddukbg.k8s/v1alpha1
kind: DeploymentTracker
metadata:
name: my-app-tracker
spec:
deploymentName: my-app
namespace: default
notify:
slack: "https://hooks.slack.com/services/..."
email: "alert@example.com"
retryCount: 3
alertOnFail: true
# All 모든 배포 대상으로 지정(미구현)
apiVersion: ddukbg/v1alpha1
kind: DeploymentTracker
metadata:
name: all-deployments-tracker
spec:
notify:
slack: "https://hooks.slack.com/services/..."
email: "alert@example.com"
# Tracker 상태 확인
kubectl get deploymenttracker
# 상세 정보 확인
kubectl describe deploymenttracker my-app-tracker
- Slack 앱 설정에서 Incoming Webhook URL 생성
- DeploymentTracker 리소스의
spec.notify.slack
에 URL 설정
- SMTP 서버 정보를 Secret으로 생성
kubectl create secret generic smtp-config \
--from-literal=host=smtp.gmail.com \
--from-literal=port=587 \
--from-literal=username=your-email@gmail.com \
--from-literal=password=your-app-password
- DeploymentTracker 리소스의
spec.notify.email
에 수신자 이메일 설정
# 의존성 설치
go mod download
# 코드 생성
make generate
# CRD 매니페스트 생성
make manifests
# 로컬에서 실행
make run
# 단위 테스트
make test
# 통합 테스트
make integration-test
# 커버리지 리포트 생성
make coverage
Operator는 다음 엔드포인트를 제공합니다:
- Health check:
:8081/healthz
- Metrics:
:8080/metrics
- Ready check:
:8081/readyz
Prometheus와 통합하여 메트릭스를 수집할 수 있습니다:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: deploy-watcher-metrics
spec:
endpoints:
- port: metrics
selector:
matchLabels:
app: deploy-watcher
- Operator Pod가 시작되지 않는 경우
kubectl describe pod -n deploy-watcher
kubectl logs -n deploy-watcher <pod-name>
- 알림이 발송되지 않는 경우
- Slack Webhook URL 확인
- SMTP 설정 확인
- 네트워크 정책 확인
# Operator 로그 확인
kubectl logs -f deployment/deploy-watcher-controller-manager -n deploy-watcher
# 이벤트 확인
kubectl get events --field-selector involvedObject.kind=DeploymentTracker
- Fork 생성
- Feature 브랜치 생성 (
git checkout -b feature/amazing-feature
) - 변경사항 커밋 (
git commit -m 'Add amazing feature'
) - 브랜치에 Push (
git push origin feature/amazing-feature
) - Pull Request 생성
- Go Code Review Comments 준수
- 모든 코드는
go fmt
와go vet
통과 필요 - 단위 테스트 필수
이 프로젝트는 MIT 라이선스로 제공됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
- Issue 생성: GitHub Issues
- 이메일: wowrebong@gmail.com
- Slack: Kubernetes Slack #deploy-watcher
⭐️ 이 프로젝트가 유용하다면 스타를 눌러주세요!