Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
chaoskube — 무작위 Kubernetes 파드를 주기적으로 종료하여 임의의 파드 장애 상황에서 시스템이 어떻게 동작하는지 테스트하며, 네임스페이스, 라벨, 어노테이션 및 스케줄 필터를 지원하여 통제된 카오스 실험을 수행할 수 있습니다. | Kitploit
도구/GitHubGitHub/linki/chaoskube
Chaos Engineering
GitHublinki/chaoskube

chaoskube

무작위 Kubernetes 파드를 주기적으로 종료하여 임의의 파드 장애 상황에서 시스템이 어떻게 동작하는지 테스트하며, 네임스페이스, 라벨, 어노테이션 및 스케줄 필터를 지원하여 통제된 카오스 실험을 수행할 수 있습니다.

저장소 보기
1.9k12622일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

chaoskube

GitHub release go-doc

chaoskube는 Kubernetes 클러스터에서 무작위 파드를 주기적으로 종료합니다.

chaoskube

왜

무작위 파드 장애 발생 시 시스템이 어떻게 동작하는지 테스트하세요.

예제

실행하면 기본적으로 10분마다 모든 네임스페이스의 파드 하나를 종료합니다.

root@kitploit:~
$ chaoskube
INFO[0000] starting up              dryRun=true interval=10m0s version=v0.21.0
INFO[0000] connecting to cluster    master="https://kube.you.me" serverVersion=v1.10.5+coreos.0
INFO[0000] setting pod filter       annotations= labels= minimumAge=0s namespaces=
INFO[0000] setting quiet times      daysOfYear="[]" timesOfDay="[]" weekdays="[]"
INFO[0000] setting timezone         location=UTC name=UTC offset=0
INFO[0001] terminating pod          name=kube-dns-v20-6ikos namespace=kube-system
INFO[0601] terminating pod          name=nginx-701339712-u4fr3 namespace=chaoskube
INFO[1201] terminating pod          name=kube-proxy-gke-earthcoin-pool-3-5ee87f80-n72s namespace=kube-system
INFO[1802] terminating pod          name=nginx-701339712-bfh2y namespace=chaoskube
INFO[2402] terminating pod          name=heapster-v1.2.0-1107848163-bhtcw namespace=kube-system
INFO[3003] terminating pod          name=l7-default-backend-v1.0-o2hc9 namespace=kube-system
INFO[3603] terminating pod          name=heapster-v1.2.0-1107848163-jlfcd namespace=kube-system
INFO[4203] terminating pod          name=nginx-701339712-bfh2y namespace=chaoskube
INFO[4804] terminating pod          name=nginx-701339712-51nt8 namespace=chaoskube
...

chaoskube는 네임스페이스, 라벨, 어노테이션, 수명별로 대상 파드를 필터링하고, 특정 요일, 시간대, 연중 날짜를 카오스에서 제외할 수 있습니다.

사용 방법

Helm

chaoskube는 Helm으로 설치할 수 있습니다. Helm의 빠른 시작 가이드를 따라 chaoskube 차트를 설치하세요.

root@kitploit:~
$ helm repo add chaoskube https://linki.github.io/chaoskube/
$ helm install chaoskube chaoskube/chaoskube --atomic --namespace=chaoskube --create-namespace

구성 방법과 다른 유용한 Helm 차트를 찾으려면 kubeapps.com의 chaoskube를 참조하세요.

원본 매니페스트

예시 매니페스트를 참조하세요. 제공된 ClusterRole을 사용하여 chaoskube에 적절한 권한을 부여해야 합니다.

설정

기본적으로 chaoskube는 안전하게 아무것도 종료하지 않습니다. 대상 클러스터를 검증했다면 --no-dry-run 플래그를 전달하여 dry-run 모드를 비활성화할 수 있습니다. 배포에 맞게 더 공격적인 간격이나 다른 지원 플래그를 지정할 수도 있습니다.

Kubernetes 클러스터 내에서 실행 중이고 동일한 클러스터를 대상으로 하려면 이것만 하면 됩니다.

다른 클러스터를 대상으로 하거나 로컬에서 실행하려면 --master 플래그로 클러스터를 지정하거나 --kubeconfig 플래그로 유효한 kubeconfig를 제공하세요. 기본적으로 홈 디렉터리의 표준 kubeconfig 경로를 사용합니다. 즉, 해당 kubeconfig의 현재 컨텍스트가 대상이 됩니다.

카오스의 정도를 높이거나 낮추려면 --interval 플래그로 종료 간격을 변경하세요. 또는 chaoskube 배포의 replica 수를 늘릴 수도 있습니다.

chaoskube는 기본적으로 시스템 파드와 자기 자신을 포함해 모든 네임스페이스의 모든 파드를 종료한다는 점을 기억하세요.

chaoskube는 실행 상태를 확인할 수 있는 간단한 HTTP 엔드포인트를 제공합니다. 이는 Kubernetes liveness 및 readiness 프로브에 사용할 수 있습니다. 기본적으로 포트 8080에서 수신 대기합니다. 비활성화하려면 chaoskube에 --metrics-address=""를 전달하세요.

대상 필터링

하지만 라벨, 어노테이션, 네임스페이스 선택자, 파드 이름 포함/제외 패턴, 최소 수명 설정을 제공하여 chaoskube의 검색 범위를 제한할 수 있습니다.

root@kitploit:~
$ chaoskube --labels 'app=mate,chaos,stage!=production'
...
INFO[0000] setting pod filter       labels="app=mate,chaos,stage!=production"

이렇게 하면 app 라벨이 mate로 설정되고, chaos 라벨이 어떤 값이든 설정되어 있으며, stage 라벨이 production으로 설정되지 않거나 설정되지 않은 모든 파드가 선택됩니다.

네임스페이스 선택자로 대상 파드를 필터링할 수도 있습니다.

root@kitploit:~
$ chaoskube --namespaces 'default,testing,staging'
...
INFO[0000] setting pod filter       namespaces="default,staging,testing"

이것은 default, staging, testing 세 네임스페이스의 파드를 필터링합니다.

네임스페이스는 네임스페이스 라벨 선택자로 추가 필터링할 수 있습니다.

root@kitploit:~
$ chaoskube --namespace-labels='!integration'
...
INFO[0000] setting pod filter       namespaceLabels="!integration"

이것은 integration 라벨이 있는 네임스페이스의 모든 파드를 제외합니다.

OwnerReference의 kind 선택자로 대상 파드를 필터링할 수 있습니다.

root@kitploit:~
$ chaoskube --kinds '!DaemonSet,!StatefulSet'
...
INFO[0000] setting pod filter       kinds="!DaemonSet,!StatefulSet"

이것은 모든 DaemonSet 및 StatefulSet 파드를 제외합니다.

root@kitploit:~
$ chaoskube --kinds 'DaemonSet'
...
INFO[0000] setting pod filter       kinds="DaemonSet"

이것은 DaemonSet 파드만 포함합니다.

참고: include 필터는 OwnerReference가 정의되지 않은 모든 파드를 자동으로 제외합니다.

이름으로 파드를 필터링할 수 있습니다:

root@kitploit:~
$ chaoskube --included-pod-names 'foo|bar' --excluded-pod-names 'prod'
...
INFO[0000] setting pod filter       excludedPodNames=prod includedPodNames="foo|bar"

이렇게 하면 이름에 'foo' 또는 'bar'가 포함되고 'prod'는 포함하지 않는 파드만 대상이 됩니다.

네임스페이스를 제외할 수도 있으며 라벨 및 어노테이션 선택자와 혼합해 사용할 수 있습니다.

root@kitploit:~
$ chaoskube \
    --labels 'app=mate,chaos,stage!=production' \
    --annotations '!scheduler.alpha.kubernetes.io/critical-pod' \
    --namespaces '!kube-system,!production'
...
INFO[0000] setting pod filter       annotations="!scheduler.alpha.kubernetes.io/critical-pod" labels="app=mate,chaos,stage!=production" namespaces="!kube-system,!production"

이것은 위 라벨 선택자의 검색 범위를 더욱 제한하여 kube-system 및 production 네임스페이스의 모든 파드를 제외하고 critical로 표시된 모든 파드를 무시합니다.

어노테이션 선택자는 chaoskube를 클러스터 애드온으로 실행하고 원하는 대로 파드가 종료되도록 opt-in할 수 있게 하는 데 사용할 수도 있습니다. 예를 들어 다음과 같이 chaoskube를 실행할 수 있습니다:

root@kitploit:~
$ chaoskube --annotations 'chaos.alpha.kubernetes.io/enabled=true' --debug
...
INFO[0000] setting pod filter       annotations="chaos.alpha.kubernetes.io/enabled=true"
DEBU[0000] found candidates         count=0
DEBU[0000] no victim found

이미 해당 어노테이션을 어딘가에서 사용하고 있지 않다면 처음에는 모든 파드를 무시합니다(디버그 모드에서 후보 수를 확인할 수 있습니다). 그런 다음 개별 디플로이먼트의 파드에 chaos.alpha.kubernetes.io/enabled=true 어노테이션을 지정하여 선택적으로 카오스 모드에 opt-in시킬 수 있습니다.

root@kitploit:~
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  template:
    metadata:
      annotations:
        chaos.alpha.kubernetes.io/enabled: "true"
    spec:
      ...

--minimum-age 플래그를 사용하면 최근에 시작된 파드를 제외할 수 있습니다.

root@kitploit:~
$ chaoskube --minimum-age 6h
...
INFO[0000] setting pod filter       minimumAge=6h0m0s

카오스 제한

카오스가 발생하는 시간을 요일, 하루 중 특정 시간대, 연중 날짜 또는 모두 함께 조합하여 제한할 수 있습니다.

--excluded-weekdays 옵션에는 쉼표로 구분된 요일 약어 목록을, --excluded-times-of-day 옵션에는 쉼표로 구분된 시간대 목록을, --excluded-days-of-year 옵션에는 쉼표로 구분된 연중 날짜 목록을 추가하고, 이를 해석할 --timezone을 지정하세요.

root@kitploit:~
$ chaoskube \
    --excluded-weekdays=Sat,Sun \
    --excluded-times-of-day=22:00-08:00,11:00-13:00 \
    --excluded-days-of-year=Apr1,Dec24 \
    --timezone=Europe/Berlin
...
INFO[0000] setting quiet times      daysOfYear="[Apr 1 Dec24]" timesOfDay="[22:00-08:00 11:00-13:00]" weekdays="[Saturday Sunday]"
INFO[0000] setting timezone         location=Europe/Berlin name=CET offset=1

UTC, Local을 사용하거나 (IANA) tz 데이터베이스에서 시간대 이름을 선택하세요. 로컬 머신에서 chaoskube를 테스트한다면 Local이 가장 적합합니다. chaoskube를 클러스터에 배포한 후에는 특정 시간대(예: 대부분의 팀원이 거주하는 지역)로 배포해야 팀과 chaoskube가 예를 들어 특정 요일의 시작과 끝을 공통으로 인식할 수 있습니다. 팀이 여러 시간대에 분산되어 있다면 기본값인 UTC를 선택하는 것이 가장 좋습니다. 잘못된 시간대를 선택하면 특정 요일의 의미가 서버와 몇 시간 차이가 납니다.

플래그

관련 작업

Kubernetes 클러스터에 카오스를 발생시킬 수 있는 몇 가지 다른 프로젝트가 있습니다.

  • kube-monkey는 Kubernetes를 위한 정교한 파드 기반 카오스 멍키입니다. 매일 아침 하루 동안 발생할 파드 종료 일정을 만듭니다. 파드별 평균 고장 간격(MTBF)을 지정할 수 있는데, 이는 chaoskube에 없는 기능입니다. 또한 애플리케이션을 구성하는 파드 그룹을 인식하여 특별히 처리할 수 있습니다. 예를 들어 애플리케이션의 모든 파드를 한 번에 종료할 수 있습니다. kube-mokey는 구성 옵션을 통해 대상을 전역적으로 필터링하고 파드가 어노테이션을 통해 카오스에 opt-in할 수 있게 해줍니다. 개별 앱이 자신만의 고유한 방식으로 opt-in할 수 있습니다. 예를 들어 app-a는 평일마다 파드 하나를 종료하도록 요청할 수 있고, 더 용감한 app-b는 파드의 50%를 종료하도록 요청할 수 있습니다. Netflix의 ChaosMonkey가 사용하는 것과 유사한 구성 파일을 이해합니다.
  • PowerfulSeal는 Kubernetes 환경을 골치 아프게 만들 수 있는 강력한 도구입니다. 파드를 종료하는 것 외에도 클라우드 VM을 중지시키거나 Docker 데몬을 종료할 수도 있습니다. 무엇을 언제 종료할 수 있는지 정의하는 구성 옵션이 매우 많습니다. 또한 파드를 쉽게 종료할 수 있는 대화형 모드도 있습니다.
  • fabric8의 chaos monkey: fabric8의 Kubernetes 플랫폼에 앱으로 번들로 제공되는 카오스 멍키입니다. UI를 통해 배포할 수 있으며 수행된 모든 작업을 채팅 메시지 및/또는 데스크톱 알림으로 보고합니다. 간격과 대상 파드가 일치해야 하는 파드 이름 패턴으로 구성할 수 있습니다.
  • k8aos: Kubernetes 클러스터 전체 또는 특정 네임스페이스 범위에서 일련의 무작위 파드 삭제를 실행할 수 있는 대화형 도구입니다.
  • pod-reaper는 간격과 구성 가능한 카오스 확률에 따라 파드를 종료합니다. 라벨 선택자와 네임스페이스를 통해 대상 파드를 지정할 수 있습니다. 일정 시간이 지나면 스스로 종료하는 기능이 있어 Kubernetes Job 객체와 잘 작동할 수 있습니다. 또한 구성 가능한 기간보다 오래 실행된 모든 파드를 종료하도록 설정할 수 있습니다.
  • kubernetes-pod-chaos-monkey: kubectl을 사용하는 매우 간단한 무작위 파드 킬러로, 몇 줄의 bash로 작성되었습니다. 네임스페이스와 간격이 주어지면 각 간격마다 해당 네임스페이스의 무작위 파드를 종료합니다. 초기 와 매우 유사합니다.

감사의 말

이 프로젝트는 여러 훌륭한 기여자들의 아이디어와 도움 덕분에 지금의 위치에 있을 수 있었습니다.

  • @twildeboer와 @klautcomputing에게 감사드립니다. 두 분은 업무 시간이나 공휴일과 같은 특정 시간에 카오스를 제한하는 아이디어를 제시했고, 이 기능의 첫 구현을 #54 및 #55에서 제공했습니다.
  • @klautcomputing에게 감사드립니다. 누락된 퍼센트 기능을 해결하려는 첫 시도와 RBAC 구성 파일을 제공해 주셨습니다.
  • @j0sh3rs에게 Helm 차트를 최신 버전으로 유지해 주셔서 감사합니다.
  • @klautcomputing, @grosser, @twz123, @hchenxa, @bavarianbidi에게 #31, #40, #58에서 Dockerfile과 문서를 개선해 주셔서 감사합니다.
  • @bakins에게 #86에서 최소 수명 필터를 추가해 주셔서 감사합니다.
  • @bakins에게 #94 및 #97에서 상태 확인(health check)과 Prometheus 메트릭을 추가해 주셔서 감사합니다.

기여

이슈를 만들거나 풀 리퀘스트를 제출해 주세요.

도구 다운로드
옵션환경 변수설명기본값
--intervalCHAOSKUBE_INTERVAL파드 종료 간격10m
--labelsCHAOSKUBE_LABELS파드를 필터링할 라벨 선택자(모든 것과 일치)
--annotationsCHAOSKUBE_ANNOTATIONS파드를 필터링할 어노테이션 선택자(모든 것과 일치)
--kindsCHAOSKUBE_KINDS파드를 필터링할 Owner의 kind 선택자(모든 kind)
--namespacesCHAOSKUBE_NAMESPACES파드를 필터링할 네임스페이스 선택자(모든 네임스페이스)
--namespace-labelsCHAOSKUBE_NAMESPACE_LABELS네임스페이스와 해당 파드를 필터링할 라벨 선택자(모든 네임스페이스)
--included-pod-namesCHAOSKUBE_INCLUDED_POD_NAMES포함할 파드 이름의 정규식 패턴(모두 포함)
--excluded-pod-namesCHAOSKUBE_EXCLUDED_POD_NAMES제외할 파드 이름의 정규식 패턴(제외 없음)
--excluded-weekdaysCHAOSKUBE_EXCLUDED_WEEKDAYS카오스를 중단할 요일, 예: "Sat,Sun"(제외된 요일 없음)
--excluded-times-of-dayCHAOSKUBE_EXCLUDED_TIMES_OF_DAY카오스를 중단할 시간대, 예: "22:00-08:00"(제외된 시간대 없음)
--excluded-days-of-yearCHAOSKUBE_EXCLUDED_DAYS_OF_YEAR카오스를 중단할 연중 날짜, 예: "Apr1,Dec24"(제외된 날짜 없음)
--timezoneCHAOSKUBE_TIMEZONEtz 데이터베이스의 시간대, 예: "America/New_York", "UTC" 또는 "Local"(UTC)
--max-runtimeCHAOSKUBE_MAX_RUNTIMEchaoskube가 종료되기 전 최대 실행 시간-1s (무기한)
--max-killCHAOSKUBE_MAX_KILL간격당 종료할 최대 파드 수를 지정합니다.1
--minimum-ageCHAOSKUBE_MINIMUM_AGE파드를 필터링할 최소 수명0s (모든 파드와 일치)
--dry-runCHAOSKUBE_DRY_RUN파드를 종료하지 않고 수행되었을 작업만 로그로 남깁니다true
--log-formatCHAOSKUBE_LOG_FORMAT로그 메시지 형식을 지정합니다. 옵션은 text와 json입니다.text
--log-callerCHAOSKUBE_LOG_CALLER로그 메시지에 호출 함수 이름과 위치를 포함합니다false
--slack-webhookCHAOSKUBE_SLACK_WEBHOOK알림용 Slack 웹훅 주소disabled
--client-namespace-scopeCHAOSKUBE_CLIENT_NAMESPACE_SCOPEKubernetes API 호출을 지정된 네임스페이스로 범위를 한정합니다(모든 네임스페이스)
chaoskube
  • kubeinvaders는 Kubernetes를 위한 게임화된 카오스 엔지니어링 도구입니다. Space Invaders와 비슷하지만 외계인이 파드 또는 워커 노드입니다.