以对话的形式管理你的Kubernetes集群
BotKube
BotKube 是一个用于监控和调试 Kubernetes 集群的消息传递工具。 BotKube 可以与多个消息传递平台(如 Slack、Mattermost 或 Microsoft Teams)集成,以帮助您监控 Kubernetes 集群、调试关键部署,并通过对 Kubernetes 资源运行检查来提供标准实践建议。
安装BotKube
1、本文使用slack作为消息接收平台,需要自行注册slack,拿到Access token
xoxb-2169032185141-2256603089394-qeLWxe0sUtwfdlwnk6VWbw11
2、将 BotKube 用户添加到 Slack 频道
将 BotKube 应用程序安装到您的 Slack 工作区后,您会看到一个名为“BotKube”的新机器人用户添加到您的工作区中。 将该机器人添加到您想要接收通知的 Slack 频道。
(您可以通过在频道中邀请@BotKube 来添加它)
3、使用helm把BotKube安装到kubernrtes集群
helm repo add infracloudio https://infracloudio.github.io/charts
helm repo update
请自行替换<>内的信息:
helm install --version v0.12.1 botkube --namespace botkube \
--set communications.slack.enabled=true \
--set communications.slack.channel=<SLACK_CHANNEL_NAME> \
--set communications.slack.token=<SLACK_API_TOKEN_FOR_THE_BOT> \
--set config.settings.clustername=<CLUSTER_NAME> \
--set config.settings.kubectl.enabled=<ALLOW_KUBECTL> \
--set image.repository=infracloudio/botkube \
--set image.tag=v0.12.1 \
infracloudio/botkube
- SLACK_CHANNEL_NAME 是添加@BotKube 的频道名称
- SLACK_API_TOKEN_FOR_THE_BOT 是将 BotKube 应用程序安装到 Slack 工作区后收到的令牌
- CLUSTER_NAME 是在传入消息中设置的集群名称
- ALLOW_KUBECTL 设置为 true 以允许 BotKube 在集群上执行 kubectl 命令
4、查看安装信息
# helm list -n botkube
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
botkube botkube 1 2021-07-09 10:41:35.813245746 +0800 CST deployed botkube-v0.12.1 v0.12.1
# kubectl get all -n botkube
NAME READY STATUS RESTARTS AGE
pod/botkube-747ff4dc5d-795hz 1/1 Running 0 2d22h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/botkube 1/1 1 1 2d22h
NAME DESIRED CURRENT READY AGE
replicaset.apps/botkube-747ff4dc5d 1 1 1 2d22h
5、如果你需要修改配置,可以更新botkube-configmap,默认设置如下
recommendations: true
resources:
- events:
- create
- delete
- error
name: v1/pods
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: v1/services
namespaces:
ignore:
- null
include:
- all
- events:
- create
- update
- delete
- error
name: apps/v1/deployments
namespaces:
ignore:
- null
include:
- all
updateSetting:
fields:
- spec.template.spec.containers[*].image
- status.availableReplicas
includeDiff: true
- events:
- create
- update
- delete
- error
name: apps/v1/statefulsets
namespaces:
ignore:
- null
include:
- all
updateSetting:
fields:
- spec.template.spec.containers[*].image
- status.readyReplicas
includeDiff: true
- events:
- create
- delete
- error
name: networking.k8s.io/v1beta1/ingresses
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: v1/nodes
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: v1/namespaces
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: v1/persistentvolumes
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: v1/persistentvolumeclaims
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: v1/configmaps
namespaces:
ignore:
- null
include:
- all
- events:
- create
- update
- delete
- error
name: apps/v1/daemonsets
namespaces:
ignore:
- null
include:
- all
updateSetting:
fields:
- spec.template.spec.containers[*].image
- status.numberReady
includeDiff: true
- events:
- create
- update
- delete
- error
name: batch/v1/jobs
namespaces:
ignore:
- null
include:
- all
updateSetting:
fields:
- spec.template.spec.containers[*].image
- status.conditions[*].type
includeDiff: true
- events:
- create
- delete
- error
name: rbac.authorization.k8s.io/v1/roles
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: rbac.authorization.k8s.io/v1/rolebindings
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: rbac.authorization.k8s.io/v1/clusterrolebindings
namespaces:
ignore:
- null
include:
- all
- events:
- create
- delete
- error
name: rbac.authorization.k8s.io/v1/clusterroles
namespaces:
ignore:
- null
include:
- all
settings:
clustername: k8s-2
configwatcher: true
kubectl:
commands:
resources:
- deployments
- pods
- namespaces
- daemonsets
- statefulsets
- storageclasses
- nodes
verbs:
- api-resources
- api-versions
- cluster-info
- describe
- diff
- explain
- get
- logs
- top
- auth
- describe
defaultNamespace:
- default
- pro
- qa
enabled: true
restrictAccess: false
upgradeNotifier: true
ssl:
enabled: false
使用Slack与BotKube对话
1、先ping下BotKube,看看输出
2、查看可使用的命令
3、以对话的形式执行kubectl命令,例如获取pod,更多命令可以自己测试...
4、验证slack收集kubernetes事件信息,例如创建一个新的pod,这里以nginx为例
我这里直接用lens连接集群,创建一个名为nginx的deployment,
直接创建即可,然后来到slack可以看到如下信息,即botkube将这个create事件消息推送到了你的slack频道。
现在删除deployment,再看slack频道,收到delete的消息
更多好玩的功能,请自行体会吧。。。
原文地址:https://www.cnblogs.com/scofield666/p/15001096.html
- Centos下安装破解confluence6.3的操作记录
- 也谈如何用技术手段引导用户放弃IE 6
- 手把手教你用vue2.0写个弹窗组件
- FluorineFx:视频录制及回放(Flash/AS3环境)
- VB实现半透明或者部分透明窗体
- “automation服务器不能创建对象”错误之解决
- “微信身份证”来了!明年全国推广
- strtol函数 将字符串转换为相应进制的整数
- .net中的认证(authentication)与授权(authorization)
- Linux内核调度分析(进程调度)
- 从MapX到MapXtreme2004[1]-工具选择
- FluorineFx:认证与授权
- Nunit使用心得
- MapX5说明
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- AntUI滑块Sliders
- AntUI卡片Cards
- AntUI常规Forms表单
- 二叉树:看看这些树的最大深度
- C++核心准则SF.5: .cpp文件必须包含定义它接口的.h文件
- C++核心准则SF.6:(只)为转换,基础库或在局部作用域内部使用using namspace指令
- C++核心准则SF.7:不要在头文件中的全局作用域中使用using namespace指令
- 二叉树:看看这些树的最小深度
- Hive初体验
- Hive数据的存储以及在centos7下进行Mysql的安装
- 一个改进的数学学习工具
- 配置hive的元数据到Mysql中
- 二叉树:我有多少个节点?
- POST请求和GET请求如何传递和接收解析参数
- 二叉树:我平衡么?