以對(duì)話的形式管理你的Kubernetes集群
BotKube
BotKube 是一個(gè)用于監(jiān)控和調(diào)試 Kubernetes 集群的消息傳遞工具。 BotKube 可以與多個(gè)消息傳遞平臺(tái)(如 Slack、Mattermost 或 Microsoft Teams)集成,以幫助您監(jiān)控 Kubernetes 集群、調(diào)試關(guān)鍵部署,并通過對(duì) Kubernetes 資源運(yùn)行檢查來提供標(biāo)準(zhǔn)實(shí)踐建議。

安裝BotKube
1、本文使用slack作為消息接收平臺(tái),需要自行注冊(cè)slack,拿到Access token
- xoxb-2169032185141-2256603089394-qeLWxe0sUtwfdlwnk6VWbw11
2、將 BotKube 用戶添加到 Slack 頻道
將 BotKube 應(yīng)用程序安裝到您的 Slack 工作區(qū)后,您會(huì)看到一個(gè)名為“BotKube”的新機(jī)器人用戶添加到您的工作區(qū)中。 將該機(jī)器人添加到您想要接收通知的 Slack 頻道。
(您可以通過在頻道中邀請(qǐng)@BotKube 來添加它)
3、使用helm把BotKube安裝到kubernrtes集群
- helm repo add infracloudio https://infracloudio.github.io/charts
- helm repo update
- 請(qǐng)自行替換<>內(nèi)的信息:
- 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 應(yīng)用程序安裝到 Slack 工作區(qū)后收到的令牌
- - CLUSTER_NAME 是在傳入消息中設(shè)置的集群名稱
- - ALLOW_KUBECTL 設(shè)置為 true 以允許 BotKube 在集群上執(zhí)行 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,默認(rèn)設(shè)置如下
- 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對(duì)話
1、先ping下BotKube,看看輸出

2、查看可使用的命令

3、以對(duì)話的形式執(zhí)行kubectl命令,例如獲取pod,更多命令可以自己測(cè)試…

4、驗(yàn)證slack收集kubernetes事件信息,例如創(chuàng)建一個(gè)新的pod,這里以nginx為例
我這里直接用lens連接集群,創(chuàng)建一個(gè)名為nginx的deployment,

直接創(chuàng)建即可,然后來到slack可以看到如下信息,即botkube將這個(gè)create事件消息推送到了你的slack頻道。

現(xiàn)在刪除deployment,再看slack頻道,收到delete的消息

更多好玩的功能,請(qǐng)自行體會(huì)吧。。。