这是官方的 Kubewatch 项目,最初由 Bitnami 开发,现在由 Robusta.dev 维护。
欢迎在 Slack 上提出问题、提交 PR 或与我们交流!
kubewatch 是一个 Kubernetes 观察器,可以将通知发布到可用的协作中心/通知渠道。在您的 k8s 集群中运行它,您将通过 webhook 获得事件通知。
最新镜像
robustadev/kubewatch:v2.6
使用方法
$ kubewatch -h
Kubewatch:Kubernetes 的观察器
kubewatch 是一个 Kubernetes 观察器,可以向 Slack/hipchat/mattermost/flock 频道发布通知。
它会监视集群的资源变化,并通过 webhook 发送通知。
支持的 webhook:
- slack
- slackwebhook
- msteams
- hipchat
- mattermost
- flock
- webhook
- cloudevent
- smtp
用法:
kubewatch [标志]
kubewatch [命令]
可用命令:
config 修改 kubewatch 配置
resource 管理要监视的资源
version 打印版本
标志:
-h, --help 获取帮助
使用 "kubewatch [命令] --help" 获取有关命令的更多信息。
安装
集群安装
使用 helm:
当您在集群中安装了 helm 后,使用以下设置:
helm repo add robusta https://robusta-charts.storage.googleapis.com && helm repo update
helm install kubewatch robusta/kubewatch --set='rbac.create=true,slack.channel=#YOUR_CHANNEL,slack.token=xoxb-YOUR_TOKEN,resourcesToWatch.pod=true,resourcesToWatch.daemonset=true'
您也可以提供一个值文件:
rbac:
create: true
resourcesToWatch:
deployment: false
replicationcontroller: false
replicaset: false
daemonset: false
services: true
pod: true
job: false
node: false
clusterrole: true
clusterrolebinding: true
serviceaccount: true
persistentvolume: false
namespace: false
secret: false
configmap: false
ingress: false
coreevent: false
event: true
slack:
channel: '#YOUR_CHANNEL'
token: 'xoxb-YOUR_TOKEN'
然后使用:
$ helm upgrade --install kubewatch robusta/kubewatch --values=values-file.yml
使用 kubectl:
为了在 Kubernetes 集群中快速运行 kubewatch,最简单的方法是创建一个 ConfigMap 来保存 kubewatch 配置。
在 kubewatch-configmap.yaml
中提供了一个示例,请记得更新您自己的 slack 频道和令牌参数。或者,您可以使用 secrets。
创建 k8s configmap:
$ kubectl create -f kubewatch-configmap.yaml
直接创建 Pod,或创建您自己的部署:
$ kubectl create -f kubewatch.yaml
将创建一个 kubewatch
容器,同时创建一个 kubectl
边车容器以访问 API 服务器。
一旦 Pod 运行,您将开始在配置的 Slack 频道中看到 Kubernetes 事件。以下是一个截图:
要修改您获得的通知,请更新 kubewatch
ConfigMap 并打开或关闭(true/false)资源:
resource:
deployment: false
replicationcontroller: false
replicaset: false
daemonset: false
services: true
pod: true
job: false
node: false
clusterrole: false
clusterrolebinding: false
serviceaccount: false
persistentvolume: false
namespace: false
secret: false
configmap: false
ingress: false
coreevent: false
event: true
使用 RBAC
运行 1.6 或更高版本的 Kubernetes Engine 集群引入了基于角色的访问控制(RBAC)。我们可以为其创建 ServiceAccount
以使其与 RBAC 一起工作。
$ kubectl create -f kubewatch-service-account.yaml
如果您没有创建权限,您需要先成为管理员。例如,在 GKE 中,您可以运行:
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=REPLACE_EMAIL_HERE
编辑 kubewatch.yaml
,并在 spec
下创建一个新字段 serviceAccountName: kubewatch
,您可以通过运行以下命令来实现:
$ sed -i '/spec:/a\ \ serviceAccountName: kubewatch' kubewatch.yaml
然后像往常一样创建 pod
:
$ kubectl create -f kubewatch.yaml
本地安装
使用 go 包安装器:
# 下载并安装 kubewatch
$ go get -u github.com/robusta-dev/kubewatch
配置通知渠道
$ kubewatch config add slack --channel <slack频道> --token <slack令牌>
添加需要监视的资源
$ kubewatch resource add --po --svc INFO[0000] 已配置资源 svc INFO[0000] 已配置资源 po
启动kubewatch服务器
$ kubewatch INFO[0000] 正在启动kubewatch控制器 pkg=kubewatch-service INFO[0000] 正在启动kubewatch控制器 pkg=kubewatch-pod INFO[0000] 正在处理添加到服务: default/kubernetes pkg=kubewatch-service INFO[0000] 正在处理添加到服务: kube-system/tiller-deploy pkg=kubewatch-service INFO[0000] 正在处理添加到Pod: kube-system/tiller-deploy-69ffbf64bc-h8zxm pkg=kubewatch-pod INFO[0000] Kubewatch控制器已同步并就绪 pkg=kubewatch-service INFO[0000] Kubewatch控制器已同步并就绪 pkg=kubewatch-pod
#### 使用Docker:
要交互式运行Kubewatch容器,请将配置文件放在`$HOME/.kubewatch.yaml`位置,并使用以下命令。
docker run --rm -it --network host -v $HOME/.kubewatch.yaml:/root/.kubewatch.yaml -v $HOME/.kube/config:/opt/bitnami/kubewatch/.kube/config --name <容器名称> robustadev/kubewatch
示例:
$ docker run --rm -it --network host -v $HOME/.kubewatch.yaml:/root/.kubewatch.yaml -v $HOME/.kube/config:/opt/bitnami/kubewatch/.kube/config --name kubewatch-app robustadev/kubewatch
==> 正在写入配置文件... INFO[0000] 正在启动kubewatch控制器 pkg=kubewatch-service INFO[0000] 正在启动kubewatch控制器 pkg=kubewatch-pod INFO[0000] 正在启动kubewatch控制器 pkg=kubewatch-deployment INFO[0000] 正在启动kubewatch控制器 pkg=kubewatch-namespace INFO[0000] 正在处理添加到命名空间: kube-node-lease pkg=kubewatch-namespace INFO[0000] 正在处理添加到命名空间: kube-public pkg=kubewatch-namespace INFO[0000] 正在处理添加到命名空间: kube-system pkg=kubewatch-namespace INFO[0000] 正在处理添加到命名空间: default pkg=kubewatch-namespace ....
要将Kubewatch容器作为守护进程运行,请使用
$ docker run --rm -d --network host -v $HOME/.kubewatch.yaml:/root/.kubewatch.yaml -v $HOME/.kube/config:/opt/bitnami/kubewatch/.kube/config --name kubewatch-app robustadev/kubewatch
# 配置
Kubewatch支持`config`命令进行配置。配置文件将保存在`$HOME/.kubewatch.yaml`
$ kubewatch config -h
config命令允许管理员为运行kubewatch设置自己的配置
用法: kubewatch config [flags] kubewatch config [command]
可用命令: add 向.kubewatch.yaml添加webhook配置 test 测试.kubewatch.yaml中存在的处理程序配置 view 查看.kubewatch.yaml
标志: -h, --help 查看帮助信息
使用 "kubewatch config [command] --help" 获取有关命令的更多信息。
### 示例:
### slack:
- 创建一个[slack机器人](https://my.slack.com/services/new/bot)
- 编辑机器人以自定义其名称、图标并检索API令牌(以`xoxb-`开头)。
- 通过在Slack消息区域输入以下内容将机器人邀请到您的频道:/invite @您的机器人名称
- 使用以下步骤将API令牌添加到kubewatch配置
```console
$ kubewatch config add slack --channel <slack频道> --token <slack令牌>
您可以选择通过环境变量设置SLACK令牌和频道:
$ export KW_SLACK_TOKEN='XXXXXXXXXXXXXXXX'
$ export KW_SLACK_CHANNEL='#频道名称'
slackwebhookurl:
-
创建一个slack应用
-
启用传入Webhooks。(在"设置"页面上。)
-
创建一个传入webhook URL(在"设置"页面上添加新的Webhook到工作区。)
-
选择应用程序将发布到的频道,然后点击以授权您的应用程序。您将获得webhook URL。 Slack Webhook URL将类似于: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
-
使用以下步骤将slack webhook url添加到kubewatch配置
$ kubewatch config add slackwebhookurl --username <slack用户名> --emoji <slack表情> --channel <slack频道> --slackwebhookurl <slack_webhook_url>
或者,您可以选择通过环境变量设置SLACK频道、用户名、表情和webhook URL:
$ export KW_SLACK_CHANNEL=slack频道 $ export KW_SLACK_USERNAME=slack用户名 $ export KW_SLACK_EMOJI=slack表情 $ export KW_SLACK_WEBHOOK_URL=slack_webhook_url
-
在bash脚本中应用的示例:
$ cat kubewatch-configmap-slackwebhook.yaml | sed "s|<slackchannel>|"\"$SlackChannel"\"|g;s|<slackusername>|"\"$SlackUsesrName"\"|g;s|<slackemoji>|"\"$SlackEmoji"\"|g;s|<SlackWebhookUrl>|"\"$WebhookUrl"\"|g" | kubectl create -f -
- kubewatch-configmap-slackwebhook.yaml YAML文件示例:
apiVersion: v1
kind: ConfigMap
metadata:
name: kubewatch
data:
.kubewatch.yaml: |
namespace: ""
handler:
slackwebhook:
enabled: true
channel: <slackchannel>
username: <slackusername>
emoji: <slackemoji>
slackwebhookurl: <SlackWebhookUrl>
resource:
clusterrole: false
configmap: false
daemonset: false
deployment: true
ingress: false
job: false
namespace: false
node: false
persistentvolume: false
pod: true
replicaset: false
replicationcontroller: false
secret: false
serviceaccount: false
services: true
event: true
coreevent: false
```
### flock:
- 创建一个[Flock 机器人](https://docs.flock.com/display/flockos/Bots)。
- 使用以下命令将 Flock webhook URL 添加到配置中。
```console
$ kubewatch config add flock --url <flock_webhook_url>
你还可以选择设置 FLOCK URL
$ export KW_FLOCK_URL='https://api.flock.com/hooks/sendMessage/XXXXXXXX'
测试配置
使用以下命令通过发送测试消息来测试处理程序配置。
$ kubewatch config test -h
通过发送测试消息测试 .kubewatch.yaml 中的处理程序配置
用法:
kubewatch config test [flags]
标志:
-h, --help 查看帮助
示例:
$ kubewatch config test
测试 .kubewatch.yaml 中的处理程序配置
2019/06/03 12:29:23 消息已成功发送到频道 ABCD,时间戳为 1559545162.000100
查看配置
使用以下命令查看整个配置文件 $HOME/.kubewatch.yaml
。
$ kubewatch config view
.kubewatch.yaml 的内容
handler:
slack:
token: xoxb-xxxxx-yyyy-zzz
channel: kube-watch
hipchat:
token: ""
room: ""
url: ""
mattermost:
channel: ""
url: ""
username: ""
flock:
url: ""
webhook:
url: ""
cloudevent:
url: ""
resource:
deployment: false
replicationcontroller: false
replicaset: false
daemonset: false
services: false
pod: true
job: false
node: false
clusterrole: false
clusterrolebinding: false
serviceaccount: false
persistentvolume: false
namespace: false
secret: false
configmap: false
ingress: false
event: true
coreevent: false
namespace: ""
资源
使用以下命令管理被监视的资源,更改将保存到 $HOME/.kubewatch.yaml
。
$ kubewatch resource -h
管理要监视的资源
用法:
kubewatch resource [flags]
kubewatch resource [command]
可用命令:
add 添加要监视的特定资源
remove 移除正在监视的特定资源
标志:
--clusterrolebinding 监视集群角色绑定
--clusterrole 监视集群角色
--cm 监视普通配置映射
--deploy 监视部署
--ds 监视守护程序集
-h, --help 查看帮助
--ing 监视入口
--job 监视作业
--node 监视节点
--ns 监视命名空间
--po 监视 Pod
--pv 监视持久卷
--rc 监视复制控制器
--rs 监视副本集
--sa 监视服务账户
--secret 监视普通密钥
--svc 监视服务
--coreevent 监视来自 Kubernetes 核心 API 的事件(旧事件 API,在 Kubernetes 1.19 中被替换)
使用 "kubewatch resource [command] --help" 获取有关命令的更多信息。
添加/移除资源:
$ kubewatch resource add -h
添加要监视的特定资源
用法:
kubewatch resource add [flags]
标志:
-h, --help 查看帮助
全局标志:
--clusterrole 监视集群角色
--clusterrolebinding 监视集群角色绑定
--cm 监视普通配置映射
--deploy 监视部署
--ds 监视守护程序集
--ing 监视入口
--job 监视作业
--node 监视节点
--ns 监视命名空间
--po 监视 Pod
--pv 监视持久卷
--rc 监视复制控制器
--rs 监视副本集
--sa 监视服务账户
--secret 监视普通密钥
--svc 监视服务
--coreevent 监视来自 Kubernetes 核心 API 的事件(旧事件 API,在 Kubernetes 1.19 中被替换)
示例:
# 将监视 rc、po 和 svc
$ kubewatch resource add --rc --po --svc
# rc、po 和 svc 将停止被监视
$ kubewatch resource remove --rc --po --svc
更改日志级别
如果你想更改默认日志级别,添加一个名为 LOG_LEVEL
的环境变量,值可以是 trace/debug/info/warning/error
中的一个
env:
- name: LOG_LEVEL
value: debug
更改日志格式
如果你想将日志格式更改为 json
,添加一个名为 LOG_FORMATTER
的环境变量,值为 json
env:
- name: LOG_FORMATTER
value: json
构建
使用 Go
在任意位置克隆仓库:
$ git clone https://github.com/bitnami-labs/kubewatch.git
$ cd kubewatch
$ go build
或者
你也可以直接使用 Makefile:
$ make build
前提条件
- 你需要安装 Go(v1.5 或更高版本)。确保设置了
$GOPATH
使用 Docker
$ make docker-image
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kubewatch latest 919896d3cd90 3 minutes ago 27.9MB
前提条件
- 你需要安装 docker。
贡献
参考贡献指南开始贡献。