热插拔 hotplug 介绍

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

热插拔

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

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

# kubectl get hotplug
NAME            PHASE     AGE
common          running   23h
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 组件,仅在管控集群安装

示例如下:

apiVersion: hotplug.kubecube.io/v1
kind: Hotplug
metadata:
  annotations:
    kubecube.io/sync: "true"					## 同步信号,kubecube会将这个配置同步到各个集群
  name: common                                  ## 公共配置为cmmon,其余集群特殊配置为集群名字
spec:
  component:
  - name: audit                                 ## 审计日志
    status: disabled
  - name: logseer                               ## 日志管理组件
    namespace: logseer
    pkgName: logseer-v1.0.0.tgz
    status: disabled                            ## 启停标识:这里disabled为禁用
  - name: logagent                              ## 日志采集代理组件
    namespace: logagent
    pkgName: logagent-v1.0.0.tgz
    status: enabled                             ## 启停标识:这里enabled为启用
    env: |                                      ## 环境变量
      clustername: "{{.cluster}}"               ## {{.cluster}} 程序会自动注入集群名字替换
  - name: kubecube-monitoring                   ## 监控组件
    namespace: kubecube-monitoring
    pkgName: kubecube-monitoring-15.4.7.tgz
    status: enabled
    env: |
      grafana:
        enabled: false
      prometheus:
        prometheusSpec:
          externalLabels:
            cluster: "{{.cluster}}"
          remoteWrite:
          - url: http://10.173.32.42:31291/api/v1/receive      
  - name: kubecube-thanos                       ## 监控thanos组件
    namespace: kubecube-monitoring
    pkgName: thanos-3.18.0.tgz
    status: disabled
status:                                         ## message显示各个组件运行状态,phase显示总体运行状态
  message: '{"kubecube-monitoring":"release is running","kubecube-thanos":"release    
    is running","logagent":"release is running","logseer":"release is running"}'
  phase: running

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

name:组件名称

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

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

status:组件是否启用

env:环境变量配置

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

管控集群配置说明

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

apiVersion: hotplug.kubecube.io/v1
kind: Hotplug
metadata:
  annotations:
    kubecube.io/sync: "true"            ## 同步信号,kubecube会将这个配置同步到其他集群
  name: pivot-cluster                   ## 与集群名字一致,指明这是pivot-cluster这个集群的热插拔配置
spec:
  component:
  - name: logseer                       ## 日志管理组件
    status: enabled                     ## 结合common设置为disabled,这里设置为enabled,标识其余集群不启用,pivot-cluster集群启用
  - name: kubecube-monitoring
    env: |
      grafana:
        enabled: true
      prometheus:
        prometheusSpec:
          externalLabels:
            cluster: "{{.cluster}}"
          remoteWrite:
          - url: http://thanos-receive:19291/api/v1/receive      
  - name: kubecube-thanos
    status: enabled
    env: |
      receive:
        replicaCount: 1
        replicationFactor: 1      
status:
  message: '{"kubecube-monitoring":"release is running","kubecube-thanos":"release
    is running","logagent":"release is running","logseer":"release is running"}'
  phase: running

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