以對話的形式管理你的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的消息

更多好玩的功能,請自行體會吧。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM