热插拔 hotplug 介绍

热插拔是通过修改配置文件实现不停机更新监控、日志、审计等组件的启停和配置。

热插拔

热插拔的实现是基于 helm ,因此集群需要预先安装好 helm3 版本。

登录管控 k8s 集群,执行命令可以查看热插拔配置

  1. # kubectl get hotplug
  2. NAME PHASE AGE
  3. common running 23h
  4. pivot-cluster running 16d

其中:

  • common 表示公共的热插拔配置,pivot-cluster 表示 pivot-cluster 这个 k8s 集群的热插拔配置。

  • 允许自定义各个集群的热插拔配置覆盖 common 热插拔配置实现个性化配置 k8s 集群组件热插拔。

  • 热插拔配置的 .metadata.name 要求与k8s集群名称一致,所有 k8s 集群信息查看命令为 kubectl get cluster

Common配置说明

目前,默认的 common 配置包括以下几个组件:

logseer:日志管理组件,仅在管控集群安装

logagent:日志采集代理组件

kubecube-monitoring:监控 prometheuse 组件

kubecube-thanos:监控 thanos 组件,仅在管控集群安装

示例如下:

  1. apiVersion: hotplug.kubecube.io/v1
  2. kind: Hotplug
  3. metadata:
  4. annotations:
  5. kubecube.io/sync: "true" ## 同步信号,kubecube会将这个配置同步到各个集群
  6. name: common ## 公共配置为cmmon,其余集群特殊配置为集群名字
  7. spec:
  8. component:
  9. - name: audit ## 审计日志
  10. status: disabled
  11. - name: logseer ## 日志管理组件
  12. namespace: logseer
  13. pkgName: logseer-v1.0.0.tgz
  14. status: disabled ## 启停标识:这里disabled为禁用
  15. - name: logagent ## 日志采集代理组件
  16. namespace: logagent
  17. pkgName: logagent-v1.0.0.tgz
  18. status: enabled ## 启停标识:这里enabled为启用
  19. env: | ## 环境变量
  20. clustername: "{{.cluster}}" ## {{.cluster}} 程序会自动注入集群名字替换
  21. - name: kubecube-monitoring ## 监控组件
  22. namespace: kubecube-monitoring
  23. pkgName: kubecube-monitoring-15.4.7.tgz
  24. status: enabled
  25. env: |
  26. grafana:
  27. enabled: false
  28. prometheus:
  29. prometheusSpec:
  30. externalLabels:
  31. cluster: "{{.cluster}}"
  32. remoteWrite:
  33. - url: http://10.173.32.42:31291/api/v1/receive
  34. - name: kubecube-thanos ## 监控thanos组件
  35. namespace: kubecube-monitoring
  36. pkgName: thanos-3.18.0.tgz
  37. status: disabled
  38. status: ## message显示各个组件运行状态,phase显示总体运行状态
  39. message: '{"kubecube-monitoring":"release is running","kubecube-thanos":"release
  40. is running","logagent":"release is running","logseer":"release is running"}'
  41. phase: running

每一个组件基本包含5个要素,在 spec.component 下:

name:组件名称

namespace:指定组件部署的命名空间,若指定的命名空间不存在,会自动以该字段值去创建一个命名空间。

pkgName:安装包名称,安装包默认存放路径为 warden 容器里的 /root/helmchartpkg,以 emptydir 形式存在。

status:组件是否启用

env:环境变量配置

每一个要素都可以使用集群独特配置进行覆盖,未覆盖的要素则依然使用 common 里的配置。

管控集群配置说明

Pivot-cluster 配置是管控集群配置,即 KubeCube 所在的集群。集群独特的配置会与 common 的配置结合,用于个性化配置集群组件,结合时遇到相同字段pivot-cluster 优先。

  1. apiVersion: hotplug.kubecube.io/v1
  2. kind: Hotplug
  3. metadata:
  4. annotations:
  5. kubecube.io/sync: "true" ## 同步信号,kubecube会将这个配置同步到其他集群
  6. name: pivot-cluster ## 与集群名字一致,指明这是pivot-cluster这个集群的热插拔配置
  7. spec:
  8. component:
  9. - name: logseer ## 日志管理组件
  10. status: enabled ## 结合common设置为disabled,这里设置为enabled,标识其余集群不启用,pivot-cluster集群启用
  11. - name: kubecube-monitoring
  12. env: |
  13. grafana:
  14. enabled: true
  15. prometheus:
  16. prometheusSpec:
  17. externalLabels:
  18. cluster: "{{.cluster}}"
  19. remoteWrite:
  20. - url: http://thanos-receive:19291/api/v1/receive
  21. - name: kubecube-thanos
  22. status: enabled
  23. env: |
  24. receive:
  25. replicaCount: 1
  26. replicationFactor: 1
  27. status:
  28. message: '{"kubecube-monitoring":"release is running","kubecube-thanos":"release
  29. is running","logagent":"release is running","logseer":"release is running"}'
  30. phase: running

最后修改 April 11, 2023 : Release v1.8 doc (#57) (cbc6022b)