1、部署helm
进入链接下载helm:https://github.com/helm/helm/releases,选择自己需要的版本
2、解压版本包并把helm文件拷贝到/usr/local/bin目录下
3、执行helm version查看是否安装成功
4、添加chart:helm repo add kubemonkey https://asobti.github.io/kube-monkey/charts/repo
5、更新:helm repo update
6、安装kube-monkey
7、使用kube-monkey
7.1 Kube-monkey标签
可以通过在k8s app中打如下几种label来使能kube-monkey:
kube-monkey/enabled
:设置为"enabled"
选择加入 kube-monkeykube-monkey/mtbf
:平均故障间隔时间(以天为单位)。例如,如果设置为"3"
,则 k8s 应用程序预计大约每三个工作日就会杀死一个 Pod。kube-monkey/identifier
:k8s 应用程序的唯一标识符。这用于识别属于 k8s 应用程序的 Pod,因为 Pods 从其 k8s 应用程序继承标签。因此,如果 kube-monkey 检测到该应用程序foo
已注册成为受害者,kube-monkey 将查找具有标签的所有 podkube-monkey/identifier: foo
以确定哪些 pod 是候选者杀死。建议将此值设置为与应用名称相同。kube-monkey/kill-mode
:默认行为是 kube-monkey 只杀死应用程序的一个 pod。您可以通过将值设置为:
"kill-all"
如果您希望 kube-monkey 杀死所有 pod,而不管其状态如何(包括未准备好或未运行的 pod)。不需要杀伤值。小心使用这个标签。fixed
如果你想用 kill-value 杀死特定数量的正在运行的 pod。如果您过度指定,它将杀死所有正在运行的 pod 并发出警告。random-max-percent
指定可以杀死的最大百分比与杀死值。在预定时间,将终止一个统一随机指定百分比的正在运行的 Pod。fixed-percent
指定一个可以被杀死的带有 kill-value 的固定 %。在预定的时间,指定的固定百分比的正在运行的 Pod 将被终止。
kube-monkey/kill-value
: 指定 kill-mode 的值
- 如果
fixed
,提供整数个要杀死的 pod - 如果
random-max-percent
,提供一个 0-100 之间的数字来指定 kube-monkey 可以杀死的 pod 的最大百分比 - 如果
fixed-percent
,提供一个 0-100 之间的数字来指定要杀死的 pod 的百分比
7.2 编辑kube-monkey的配置文件
#kube-monkey通过配置toml file里的一些配置项来生效,helm部署的可直接kubectl edit cm my-release-kube-monkey编辑
apiVersion: v1
data:
config.toml: |
[kubemonkey]
dry_run = true
run_hour = 8
start_hour = 10
end_hour = 16
blacklisted_namespaces = [ "kube-system", ]
whitelisted_namespaces = [ ]
time_zone = "America/New_York"
[debug]
enabled= false
schedule_immediate_kill= false
kind: ConfigMap
metadata:
creationTimestamp: "2021-12-15T01:26:30Z"
name: my-release-kube-monkey
namespace: default
resourceVersion: "14902504"
selfLink: /api/v1/namespaces/default/configmaps/my-release-kube-monkey
uid: 9deff760-d3a8-4963-adc8-b115127868fe
#几个重要的参数
[kubemonkey]
dry_run = true # Terminations are only logged
run_hour = 8 # Run scheduling at 8am on weekdays
start_hour = 10 # Don't schedule any pod deaths before 10am
end_hour = 16 # Don't schedule any pod deaths after 4pm
blacklisted_namespaces = ["kube-system"] # 不攻击的namespace列表
whitelisted_namespaces = ["test-ns1","test-ns2"] # 攻击的namespace列表
time_zone = "America/New_York" # Set tzdata timezone example. Note the field is time_zone not timezone
[debug] #无视start_hour配置和endhour配置,每隔60s都会攻击pod
enabled= false
schedule_immediate_kill= false
7.3 示例
编辑yaml文件中的label
每次杀死正在运行的15个pod
编辑kube-monkey的配置
起止时间自行配置(start_hour、end_hour)
whitelisted_namespace是要控制的对象
time_zone:保持和自己的时区一致
开启debug
查看kube-monkey的日志
查看pod状态