gtxyzz

以对话的形式管理你的Kubernetes集群

gtxyzz 运维技术 2022-11-14 433浏览 0

以对话的形式管理你的Kubernetes集群

BotKube

BotKube 是一个用于监控和调试 Kubernetes 集群的消息传递工具。 BotKube 可以与多个消息传递平台(如 Slack、Mattermost 或 Microsoft Teams)集成,以帮助您监控 Kubernetes 集群、调试关键部署,并通过对 Kubernetes 资源运行检查来提供标准实践建议。

以对话的形式管理你的Kubernetes集群

安装BotKube

1、本文使用slack作为消息接收平台,需要自行注册slack,拿到Access token

xoxb-2169032185141-2256603089394-qeLWxe0sUtwfdlwnk6VWbw11

2、将 BotKube 用户添加到 Slack 频道

将 BotKube 应用程序安装到您的 Slack 工作区后,您会看到一个名为“BotKube”的新机器人用户添加到您的工作区中。 将该机器人添加到您想要接收通知的 Slack 频道。

(您可以通过在频道中邀请@BotKube 来添加它)

3、使用helm把BotKube安装到kubernrtes集群

helmrepoaddinfracloudiohttps://infracloudio.github.io/charts
helmrepoupdate

请自行替换<>内的信息:
helminstall--versionv0.12.1botkube--namespacebotkube\
--setcommunications.slack.enabled=true\
--setcommunications.slack.channel=<SLACK_CHANNEL_NAME>\
--setcommunications.slack.token=<SLACK_API_TOKEN_FOR_THE_BOT>\
--setconfig.settings.clustername=<CLUSTER_NAME>\
--setconfig.settings.kubectl.enabled=<ALLOW_KUBECTL>\
--setimage.repository=infracloudio/botkube\
--setimage.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、查看安装信息

#helmlist-nbotkube
NAMENAMESPACEREVISIONUPDATEDSTATUSCHARTAPPVERSION
botkubebotkube12021-07-0910:41:35.813245746+0800CSTdeployedbotkube-v0.12.1v0.12.1
#kubectlgetall-nbotkube
NAMEREADYSTATUSRESTARTSAGE
pod/botkube-747ff4dc5d-795hz1/1Running02d22h

NAMEREADYUP-TO-DATEAVAILABLEAGE
deployment.apps/botkube1/1112d22h

NAMEDESIREDCURRENTREADYAGE
replicaset.apps/botkube-747ff4dc5d1112d22h

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,看看输出

以对话的形式管理你的Kubernetes集群

2、查看可使用的命令

以对话的形式管理你的Kubernetes集群

3、以对话的形式执行kubectl命令,例如获取pod,更多命令可以自己测试…

以对话的形式管理你的Kubernetes集群

4、验证slack收集kubernetes事件信息,例如创建一个新的pod,这里以nginx为例

我这里直接用lens连接集群,创建一个名为nginx的deployment,

以对话的形式管理你的Kubernetes集群

直接创建即可,然后来到slack可以看到如下信息,即botkube将这个create事件消息推送到了你的slack频道。

以对话的形式管理你的Kubernetes集群

现在删除deployment,再看slack频道,收到delete的消息

以对话的形式管理你的Kubernetes集群

更多好玩的功能,请自行体会吧。。。

继续浏览有关 系统运维 的文章
发表评论