Skip to content

shieldx-bot/night-watch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

night-watch 🛡️

night-watch là một CLI nhỏ viết bằng Go để “đóng/mở” (scale) tất cả Kubernetes Deployments trong một namespace theo 2 chế độ:

  • sleep: giảm replica về 1
  • wake: tăng replica lên 3

Mục tiêu: giúp bạn nhanh chóng tiết kiệm tài nguyên khi “ngủ” và khôi phục khi “thức” (demo/lab/cluster nội bộ).

Lưu ý: Hiện tại namespace đang được fix cứng trong code là sre-mart.

Cách hoạt động

  1. Đọc kubeconfig (mặc định: ~/.kube/config).
  2. Kết nối tới Kubernetes API bằng client-go.
  3. List tất cả Deployments trong namespace.
  4. Update spec.replicas cho từng Deployment theo mode.

Yêu cầu

  • Go (theo go.mod: go 1.25.0)
  • Kubeconfig hợp lệ (có thể truy cập cluster)
  • Tài khoản trong kubeconfig cần có quyền:
    • list deployments
    • get deployments
    • update deployments

Nếu chạy trong cluster (Pod) thay vì kubeconfig local, bạn sẽ cần chỉnh code để dùng InClusterConfig().

Cài đặt

Chạy trực tiếp

  • go run main.go --mode=sleep
  • go run main.go --mode=wake

Build binary

  • go build -o night-watch .
  • ./night-watch --mode=sleep

Flags

  • --kubeconfig (string): đường dẫn kubeconfig
    • default: ~/.kube/config (nếu tìm thấy home dir)
  • --mode (string): sleep hoặc wake
    • default: sleep

Ví dụ:

  • ./night-watch --kubeconfig=/path/to/config --mode=wake

Hành vi hiện tại (quan trọng)

  • sleep → set replicas = 1 cho mọi Deployment trong namespace
  • wake → set replicas = 3 cho mọi Deployment trong namespace
  • Namespace: sre-mart (đang hard-code)

Troubleshooting

1) flag provided but not defined: -mode

Lỗi này xảy ra nếu code gọi flag.Parse() trước khi khai báo flag mode. Phiên bản hiện tại đã fix bằng cách khai báo toàn bộ flags trước rồi flag.Parse() đúng 1 lần.

2) could not import async

Go không có package chuẩn tên async. Dự án dùng sync.WaitGroup.

3) Bị throttling/đợi khi update nhiều Deployments

Bạn có thể thấy log kiểu:

client-side throttling

Đây là hành vi bình thường khi gửi nhiều request tới API server trong thời gian ngắn.

4) Lỗi quyền (RBAC)

Nếu gặp lỗi forbidden, hãy đảm bảo user/serviceAccount có đủ quyền list/get/update Deployments trong namespace mục tiêu.

Roadmap (gợi ý)

  • Thêm flag --namespace thay vì hard-code sre-mart
  • Cho phép set --sleep-replicas--wake-replicas
  • Thêm dry-run (--dry-run) và confirm (--yes)
  • Thêm concurrency limit để giảm throttling

License

Xem file LICENSE (nếu repo có). Nếu chưa có, bạn có thể thêm license theo nhu cầu (MIT/Apache-2.0/etc.).

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages