Skip to content

K8s 실제 배포로 인해 상태가 변경될 때 알림을 받을 수 있도록 돕는 Kubernetes Operator

Notifications You must be signed in to change notification settings

ddukbg/K8s-Deploy-Watcher

Repository files navigation

개인적인 용도로 사용하기 위해 계속해서 개발 중입니다.

K8s-Deploy-Watcher

Go Version Kubernetes License: MIT

목차

K8s-Deploy-Watcher는 Kubernetes 리소스의 실시간 상태를 모니터링하고 상태 변경을 Slack으로 알려주는 Custom Controller입니다.

🔨 현재 개발 상태:

  • Custom Resource Definition (CRD) 구현
  • Custom Controller 구현
  • 향후 완전한 Operator 패턴으로 발전 예정

🌟 주요 기능

  • 다양한 리소스 모니터링

    • Deployment
    • StatefulSet
    • Pod
  • 모니터링 범위

    • 단일 리소스 모니터링
    • 네임스페이스 전체 리소스 모니터링 (신규)
  • 알림 기능

    • Slack 웹훅 지원
    • 리소스별 맞춤 알림 메시지
    • 상태 변경 실시간 알림

💻 시스템 요구사항

  • Kubernetes >= 1.21
  • Go >= 1.20

📦 배포 가이드

1. 사전 요구사항

  • kubectl이 설치되어 있고 클러스터에 접근 가능
  • 클러스터 관리자 권한
  • make 명령어 사용 가능

2. RBAC 및 서비스 어카운트 설정

# namespace 생성
kubectl create namespace k8s-deploy-watcher-system

# RBAC 설정 적용
kubectl apply -f config/rbac/role.yaml
kubectl apply -f config/rbac/role_binding.yaml
kubectl apply -f config/rbac/service_account.yaml

필요한 RBAC 권한:

# config/rbac/role.yaml 예시
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: k8s-deploy-watcher-role
rules:
- apiGroups: ["ddukbg.k8s"]
  resources: ["resourcetrackers"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
  resources: ["deployments", "statefulsets"]
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create", "patch"]

3. 이미지 빌드 및 푸시

# 도커 이미지 빌드
make docker-build IMG=your-registry/k8s-deploy-watcher:tag

# 도커 이미지 푸시
make docker-push IMG=your-registry/k8s-deploy-watcher:tag

4. CRD 및 Controller 배포

# CRD 설치
make install

# Controller 배포
make deploy IMG=your-registry/k8s-deploy-watcher:tag

# 배포 확인
kubectl get deployment -n k8s-deploy-watcher-system
kubectl get serviceaccount -n k8s-deploy-watcher-system
kubectl get clusterrole k8s-deploy-watcher-role
kubectl get clusterrolebinding k8s-deploy-watcher-rolebinding

5. 설치 확인

# CRD 확인
kubectl get crd resourcetrackers.ddukbg.k8s

# Controller Pod 확인
kubectl get pods -n k8s-deploy-watcher-system

# 로그 확인
kubectl logs -n k8s-deploy-watcher-system deployment/k8s-deploy-watcher-controller-manager -c manager

6. 문제 해결

일반적인 문제 해결 단계:

  1. Pod 상태 확인
kubectl get pods -n k8s-deploy-watcher-system
kubectl describe pod -n k8s-deploy-watcher-system <pod-name>
  1. 로그 확인
kubectl logs -n k8s-deploy-watcher-system deployment/k8s-deploy-watcher-controller-manager -c manager --tail=100
  1. RBAC 권한 확인
kubectl auth can-i get pods --as=system:serviceaccount:k8s-deploy-watcher-system:k8s-deploy-watcher-controller-manager

7. 제거

# Controller 제거
make undeploy

# CRD 제거
make uninstall

# RBAC 설정 제거
kubectl delete -f config/rbac/role.yaml
kubectl delete -f config/rbac/role_binding.yaml
kubectl delete -f config/rbac/service_account.yaml

# Namespace 제거
kubectl delete namespace k8s-deploy-watcher-system

🚀 사용 방법

1. ResourceTracker 생성 - 단일 리소스 모니터링

apiVersion: ddukbg.k8s/v1alpha1
kind: ResourceTracker
metadata:
name: nginx-tracker
namespace: default
spec:
target:
kind: Deployment # Deployment, StatefulSet, Pod
name: nginx # 특정 리소스 이름
namespace: default
notify:
slack: "https://hooks.slack.com/services/..."

2. ResourceTracker 생성 - 네임스페이스 전체 모니터링

apiVersion: ddukbg.k8s/v1alpha1
kind: ResourceTracker
metadata:
name: namespace-pods-tracker
namespace: monitoring
spec:
target:
kind: Pod # Deployment, StatefulSet, Pod
namespace: default # 모니터링할 네임스페이스
notify:
slack: "https://hooks.slack.com/services/..."

🔍 상태 확인

# ResourceTracker 상태 확인
kubectl get resourcetracker

# 특정 ResourceTracker 상세 정보
kubectl describe resourcetracker <name>

📊 모니터링 동작 방식

  1. 리소스 감지

    • 지정된 리소스의 상태 변경 감지
    • 네임스페이스 전체 모니터링 시 해당 타입의 모든 리소스 감지
  2. 상태 체크

    • Deployment: ReadyReplicas, UpdatedReplicas, AvailableReplicas 확인
    • StatefulSet: ReadyReplicas, UpdatedReplicas 확인
    • Pod: Running 상태 확인
  3. 알림 발송

    • 리소스가 Ready 상태가 되면 Slack 알림 발송
    • 리소스별 맞춤 메시지 포맷 사용

🔧 개발 환경 설정

# 의존성 설치
go mod download
# 테스트 실행
make test
# 로컬 실행
make run

📜 라이선스

이 프로젝트는 MIT 라이선스로 제공됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

About

K8s 실제 배포로 인해 상태가 변경될 때 알림을 받을 수 있도록 돕는 Kubernetes Operator

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published