1 - 热插拔 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
2 - 通过 hotplug 启用 loggie
KubeCube 使用 hotplug 热插拔方式集成 Loggie,用户可以通过打开 hotplug 中关于日志部分的开关来开启 Loggie。我们有两个时间点可以用来开启 Loggie。
在使用 Helm 安装 KubeCube 时
在使用 Helm 安装 KubeCube 时,我们可以设置以下 values 来开启 Loggie。
安装管控集群时的参数如下:
# pivot-value.yaml
...
global:
# set "enabled" if wanna open log application.
hotPlugEnable:
pivot:
logseer: "enabled"
logagent: "enabled"
elasticsearch: "enabled"
...
安装计算集群时的参数如下:
# member-value.yaml
...
global:
# set "enabled" if wanna open log application.
hotPlugEnable:
common:
logagent: "enabled"
...
在使用过程中
在使用过程中,我们也可以通过直接修改 hotplug 的方式来开启 Loggie。
修改管控集群的 hotplug 如下:
kubectl edit hotplug pivot-cluster
# pivot-cluster
apiVersion: hotplug.kubecube.io/v1
kind: Hotplug
metadata:
name: pivot-cluster
spec:
component:
- name: elasticsearch
namespace: elasticsearch
pkgName: elasticsearch-7.8.1.tgz
status: enabled # 将该值设为 enabled 来开启日志
...
- name: logseer
status: enabled # 将该值设为 enabled 来开启日志
- name: logagent
status: enabled # 将该值设为 enabled 来开启日志
修改计算集群的 hotplug 如下:
kubectl edit hotplug common
# common
apiVersion: hotplug.kubecube.io/v1
kind: Hotplug
metadata:
name: common
spec:
component:
...
- env: |
clustername: "{{.cluster}}"
elasticsearch:
address: x.x.x.x:32200 # 填写管控集群的 es 的 nodeport svc 访问地址,一般为 {nodeIP}:32200
name: logagent
namespace: logagent
pkgName: logagent-1.3.0.tgz
status: enabled # 将该值设为 enabled 来开启日志