ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

KnowStreaming 内置 Elasticsearch Helm Chart 部署与配置实战指南

KnowStreaming 内置 Elasticsearch Helm Chart 部署与配置实战指南 后端消息队列运维可观测性【免费下载链接】KnowStreaming一站式云原生实时流数据平台通过0侵入、插件化构建企业级Kafka服务极大降低操作、存储和管理实时流数据门槛项目地址https://gitcode.com/gh_mirrors/kn/KnowStreaming点击查看免费下载本篇技术指南以 KnowStreaming 仓库中随knowstreaming-managerHelm 发行版一并内置的 Elasticsearch Helm Chartkm-dist/helm/charts/elasticsearch为对象系统讲解其安装、升级、全部配置参数与常见 FAQ并结合仓库内的values.yaml、StatefulSet模板与初始化脚本说明 KnowStreaming 如何用它承载 Kafka 集群的指标数据存储。读者读完可获得一套可直接落地 Kubernetes 的 ES 集群部署方案并理解其底层工作原理。一、这份 Chart 在 KnowStreaming 中的角色KnowStreaming 是一个一站式云原生实时流数据平台其监控与指标数据需要 Elasticsearch 作为存储与检索后端。在仓库中ES 的 Helm Chart 被作为顶层发行版 km-dist/helm/Chart.yaml 的依赖引入dependencies: - name: knowstreaming-web version: 0.1.0 condition: knowstreaming-manager.knowstreaming-web.enabled,web.enabled - name: elasticsearch version: 7.6.0 repository: https://docker.elastic.co/ condition: knowstreaming-manager.elasticsearch.enabled,elasticsearch.enabled - name: ksmysql version: 5.7.38-1 condition: knowstreaming-manager.ksmysql.enabled,ksmysql.enabled即顶层 Chart 声明elasticsearch依赖并可通过elasticsearch.enabled开关决定是否随 KnowStreaming 一起部署。顶层 valueskm-dist/helm/values.yaml中给出了 KnowStreaming 场景下的推荐默认值包括imageTag: 7.6.0、replicas: 3、minimumMasterNodes: 2、每节点 2Gi 内存等。Manager 服务则通过环境变量SERVER_ES_ADDRESS连接 ES见 km-dist/docker/manager/application.yml 中es.client.address配置。由此可见这份 Chart 本质上是 KnowStreaming 为「开箱即用地获得一个 ES 7.6.0 指标存储集群」而内置的官方 Elasticsearch Helm Chart 适配版本。二、环境要求与安装2.1 环境要求按 Chart 自述README运行该 Chart 需要Kubernetes 1.14Helm 2.17.0仓库顶层 km-dist/helm/README.md 实际给出的安装方式是 Helm 3helm install knowstreaming knowstreaming-manager/以默认配置运行的最小集群要求均可通过参数调整三个 Kubernetes 节点以尊重默认的hard反亲和anti-affinity设置至少 1GB 的 JVM 堆内存2.2 安装方式方式一通过 Helm 仓库安装发布版本# 添加 Elastic Helm Charts 仓库 helm repo add elastic https://helm.elastic.co # Helm 3 helm install elasticsearch elastic/elasticsearch # Helm 2已废弃 helm install --name elasticsearch elastic/elasticsearch方式二使用 main 分支安装开发版本git clone gitgithub.com:elastic/helm-charts.git # Helm 3--set imageTag 指定版本 helm install elasticsearch ./helm-charts/elasticsearch --set imageTag8.1.0 # Helm 2已废弃 helm install --name elasticsearch ./helm-charts/elasticsearch --set imageTag8.1.0方式三作为 KnowStreaming 顶层 Chart 的依赖安装本仓库场景helm install knowstreaming knowstreaming-manager/默认配置会一次性安装 elasticsearch mysql knowstreaming 三套组件若已存在 ES(7.6.x) 与 MySQL(5.7)只需将 km-dist/helm/values.yaml 中elasticsearch.enabled/ksmysql.enabled改为false并填写已有服务地址即可。2.3 升级升级到新的 Chart 版本前务必先查看上游的 CHANGELOG.md 与 BREAKING_CHANGES.md本仓库对应目录为 km-dist/helm/charts/elasticsearch 及其 examples 下的 upgrade 示例确认是否存在破坏性变更。三、使用注意事项Usage Notes仓库内置了若干 examples 配置本仓库位于 km-dist/helm/charts/elasticsearch/examples含 config、docker-for-mac、kubernetes-kind、microk8s、minikube、openshift、security、networkpolicy、upgrade 等目录既可作为配置参考也用于 Chart 的自动化测试。Chart 通过 StatefulSet 部署默认采用自动滚动更新RollingUpdate每更新一个实例后都会等待集群健康状态变为 green 再更新下一个。如需手动控制可将updateStrategy设为OnDelete。务必确认esJavaOpts中 JVM 堆大小与resources的 CPU/内存设置适合你的集群规模。为了简化 Chart 与运维每种节点组node group应作为独立的 Helm release 部署参考 multi 示例。这是因为 StatefulSet 无法直接调整持久卷大小——拆分后可以先以新的存储大小扩容节点再逐步下线旧节点同时也能自主决定升级时先更新哪组节点。该 Chart 被刻意设计为「对 Elasticsearch 如何配置不做强主张」它通过暴露环境变量与挂载 Secret 的方式支持多种版本只需少量改动即可适配。四、核心配置参数全解以下完整继承自 Chart 的配置文档并按用途分组整理默认值以本仓库 km-dist/helm/charts/elasticsearch/values.yaml 及 README 为准注意 README 中部分默认值为上游值与本仓库实际 values 略有差异差异点已在表后说明。4.1 集群与节点标识参数说明默认值clusterName作为 Elasticsearchcluster.name在同一命名空间内应保持唯一elasticsearchnodeGroup每组节点的名称命名规则为clusterName-nodeGroup-X指定nameOverride时为nameOverride-nodeGroup-X指定fullnameOverride时为fullnameOverride-XmastermasterService用于连接 master 节点的 Service 名称仅当 master 节点组名不是master时才需要设置nameOverride覆盖资源命名中的clusterNamefullnameOverride同时覆盖clusterName与nodeGroup参与的资源命名仅适合单节点组场景否则会产生命名冲突healthNameOverride覆盖test-elasticsearch-health测试 Pod 名称replicasStatefulSet 的副本数即 Pod 数量3minimumMasterNodesdiscovery.zen.minimum_master_nodes的值应设为(master候选节点数 / 2) 1Elasticsearch 7 版本忽略此参数2esMajorVersion已废弃。建议改用与 ES 次版本对应的 Chart 版本用于设置主版本相关配置。若使用自定义镜像而非默认 ES 版本需要显式设置如esMajorVersion: 6roles该节点组承担的节点角色列表见 values.yamlmaster、data、data_content、data_hot、data_warm、data_cold、ingest、ml、remote_cluster_client、transform4.2 镜像与运行环境参数说明默认值imageElasticsearch Docker 镜像docker.elastic.co/elasticsearch/elasticsearchimageTagElasticsearch Docker 镜像标签README 为8.1.0本仓库 values 实际为7.6.0imagePullPolicyKubernetes 镜像拉取策略IfNotPresentimagePullSecrets使用私有镜像仓库时的拉取凭据配置[]networkHostElasticsearchnetwork.host配置0.0.0.0httpPort健康检查与 Service 使用的 HTTP 端口修改后需同时在extraEnvs中设置http.port9200transportPortService 使用的 transport 端口修改后需同时在extraEnvs中设置 transport 端口配置9300protocolreadiness probe 使用的协议若启用了xpack.security.http.ssl.enabled需改为httpshttpesJavaOptsElasticsearch 的 Java 选项可在此配置 JVM 堆大小如-Xmx1g -Xms1gesJvmOptions通过自定义 options 文件覆盖默认 JVM 选项挂载到jvm.options.d/目录{}esConfig向/usr/share/elasticsearch/config/添加任意配置文件如elasticsearch.yml、log4j2.properties{}extraEnvs追加到容器env:定义中的额外环境变量[]envFrom追加到容器envFrom:定义的可模板化字符串如从 ConfigMap/Secret 注入环境变量[]enableServiceLinks设为false可禁用 Service Link 注入避免命名空间内服务过多时 Pod 启动变慢truehostAliases可配置的 PodhostAliases[]4.3 调度、亲和性与生命周期参数说明默认值antiAffinity设为hard时强制反亲和规则soft时尽力而为其他值忽略hardREADME本仓库 values 实际为antiAffinityTopologyKey反亲和拓扑键默认阻止多个 ES 节点落在同一 K8s 节点上kubernetes.io/hostnamenodeAffinity节点亲和性设置{}nodeSelector将 ES 集群调度到指定节点{}tolerations污点容忍配置[]schedulerName备用调度器名称priorityClassNamePriorityClass 名称需预先创建无默认值podManagementPolicyK8s 默认串行部署 StatefulSet设为Parallel可并行启动以便节点相互发现ParallelupdateStrategyStatefulSet 更新策略OnDelete允许升级时手动逐个删除 PodRollingUpdatemaxUnavailablePodDisruptionBudget 的 maxUnavailable默认防止节点组内超过 1 个 Pod 不可用1terminationGracePeriod优雅停止 Pod 的等待秒数120lifecycle容器生命周期钩子如 postStart 配置模板{}4.4 存储与资源参数说明默认值persistence是否启用 ES 数据持久卷对仅承担无需持久化数据的角色的节点可关闭见 values.yamlenabled: truevolumeClaimTemplateStatefulSet 的 volumeClaimTemplate 配置需调整存储大小默认30Gi与storageClassName见 values.yamlresourcesStatefulSet 的 CPU/内存资源限制见 values.yamlinitResourcesStatefulSet 中 initContainer 的资源限制{}4.5 服务与网络暴露参数说明默认值service.enabled是否创建非 headless Servicetrueservice.typeElasticsearch Service 类型ClusterIPservice.annotationsService 注解type: LoadBalancer时配置负载均衡器{}service.externalTrafficPolicy负载均衡器外部流量策略保留客户端源 IPservice.httpPortNameService 内 http 端口名称httpservice.transportPortNameService 内 transport 端口名称transportservice.labels附加到非 headless Service 的标签{}service.labelsHeadless附加到 headless Service 的标签{}service.loadBalancerIP指定负载均衡器 IP云厂商不支持时忽略service.loadBalancerSourceRanges允许访问的 IP 范围[]service.nodePort使用service.type: nodePort时的自定义 nodePortservice.publishNotReadyAddresses即使 Pod 未就绪也视为端点可用falseingress暴露 Elasticsearch Service 的 Ingress 配置见 values.yamlenabled: falsenetworkPolicyNetworkPolicy 配置访问需带{{ uname }}-client: true标签{http.enabled: false, transport.enabled: false}4.6 安全与凭据参数说明默认值createCert是否自动生成 SSL 证书README 为true本仓库 values 实际为falsesecret.enabled是否为 ES 凭据创建 Secrettruesecret.passwordelastic 用户的初始密码README 为随机生成本仓库 values 实际为knowstreamingsecretMounts将 Secret 作为文件挂载进 StatefulSet常用于挂载证书等[]rbac是否创建 Role、RoleBinding 与 ServiceAccount也可引用外部 ServiceAccountserviceAccountName或控制 token 自动挂载见 values.yamlcreate: falsepodSecurityPolicy以最小权限创建 PodSecurityPolicycreate: true或引用外部 PSPname见 values.yamlpodSecurityContextPod 级 securityContext见 values.yamlfsGroup: 1000, runAsUser: 1000securityContext容器级 securityContext见 values.yamldrop ALL capabilities、runAsNonRoot: truefsGroup已废弃。为 securityContext 设置 GID使 ES 用户可读持久卷4.7 自定义扩展与探针参数说明默认值extraContainers通过tpl函数注入的额外containers模板字符串extraInitContainers通过tpl函数注入的额外initContainers模板字符串extraVolumes通过tpl函数注入的额外volumes模板字符串extraVolumeMounts通过tpl函数注入的额外volumeMounts模板字符串keystore将 Kubernetes Secret 映射进 ES keystore[]clusterHealthCheckParamsreadiness probe 使用的集群健康状态参数wait_for_statusgreentimeout1sreadinessProbereadiness probe 配置字段见 values.yamlfailureThreshold 3、initialDelaySeconds 10、periodSeconds 10、successThreshold 3、timeoutSeconds 5podAnnotations附加到所有 ES Pod 的注解{}labels附加到所有 ES Pod 的标签{}sysctlInitContainer是否启用 sysctl initContainer也可用其他方式设置vm.max_map_countenabled: truesysctlVmMaxMapCountElasticsearch 所需的vm.max_map_count值262144tests.enabledhelm template/helm test时是否创建测试相关资源true4.8 已废弃参数参数说明默认值fsGroup为 securityContext 设置 GID改用podSecurityContext.fsGroup4.9 本仓库与上游默认值的差异重要本仓库 km-dist/helm/charts/elasticsearch/values.yaml 针对 KnowStreaming 做了三处关键适配与 Chart README 中描述的上游默认值不同imageTag: 7.6.0README 默认 8.1.0——与 KnowStreaming 对 ES 7.6.0 的版本约束保持一致createCert: false——KnowStreaming 场景下默认不启用 TLS同时 StatefulSet 模板 中硬编码了xpack.security.enabledfalse默认以非安全模式运行secret.password: knowstreaming——默认密码固定便于与顶层 Chart 的联调部署顶层 values 中同样要求 ES 版本限制为 7.6.0。五、FAQ 实战问答5.1 如何在特定的 K8s 发行版上部署该 Chart 面向生产级多节点、大内存、持久化存储的集群设计在 Minikube 这类本地环境中可能较难直接跑通。它已在 GKE 上高度验证并为以下发行版提供了参考配置本仓库均内置了对应示例Docker for Macexamples/docker-for-mac/values.yamlKINDexamples/kubernetes-kind/values.yamlMinikubeexamples/minikube/values.yamlMicroK8Sexamples/microk8s/values.yamlOpenShiftexamples/openshift/values.yaml5.2 如何部署专用节点类型master / data / coordinating 分离Chart 部署的所有 ES Pod 默认共享同一份配置。若需要部署专用节点类型例如独立的 master 与 data 节点可以多次安装该 Chart多个 release并共享同一个clusterName再通过roles值定义各 release 的节点角色。Coordinating-only 节点每个节点隐式都是 coordinating 节点角色列表为空的节点将只承担 coordinating 职责。使用本 Chart 部署时必须在roles与node.roles两处都定义为空列表roles: [] esConfig: elasticsearch.yml: | node.roles: []5.3 集群发现与节点加入Clustering and Node DiscoveryChart 通过创建两个 KubernetesService来辅助节点发现一个名为$clusterName-$nodeGroup的 Service只包含Ready状态的 Pod一个名为$clusterName-$nodeGroup-headless的 headless Service包含所有 Pod无论是否 Ready。在 service.yaml 中可以看到headless Service 设置clusterIP: None且publishNotReadyAddresses: true正是为了让elasticsearch-0这类 StatefulSet 主机名可以解析。如果 master 节点组名为默认的master新增其他nodeGroup的节点组会自动发现正确的 master如果 master 节点组使用了其他名称则需要将masterService设置为$clusterName-$masterNodeGroup。源码层面statefulset.yamlmasterService值被用于填充discovery.seed_hostsES 7- name: discovery.seed_hosts value: {{ template elasticsearch.masterService . }}-headless同时当 roles 中包含master时还会设置cluster.initial_master_nodes为全部 Pod 端点列表如elasticsearch-master-0,elasticsearch-master-1,...用于集群引导。因此向既有集群新增节点组时只需将masterService设置为目标集群对应 Service 名即可。5.4 如何部署启用安全认证与 TLS的集群Chart 可以生成 Kubernetes Secret也可以复用已有 Secret 来配置 ES 凭据证书类 Secret 需在 Chart 外创建再通过环境变量与卷挂载接入。默认情况下 Chart 会创建证书并启用 TLS但你也可以将自己准备的证书以 K8s Secret 形式提供——参考 examples/security/values.yaml 的配置方式注意本仓库 KnowStreaming 适配版默认createCert: false、xpack.security.enabledfalse如需启用安全模式需按上述示例自行调整。5.5 如何从 helm/charts stable 老 Chart 迁移若已使用旧版 stable Chart 部署过集群可按官方迁移指南操作本仓库 examples 下也保留了 migration 相关参考配置目录examples。5.6 如何安装插件官方推荐的插件安装方式是构建自定义 Docker 镜像而非在运行中的容器里安装ARG elasticsearch_version FROM docker.elastic.co/elasticsearch/elasticsearch:${elasticsearch_version} RUN bin/elasticsearch-plugin install --batch repository-gcs然后在 values 中把image指向你的自定义镜像。推荐理由有两点将 ES 可用性与下载服务绑定在容器随时可能迁移到其他宿主机上的 Kubernetes 环境中尤其不可取修改运行中的 Docker 镜像状态违背容器与不可变基础设施的最佳实践。5.7 如何使用 keystore 注入敏感配置基础示例创建 Secretkey 名即 keystore key 路径可以来自文件或字面量kubectl create secret generic encryption-key --from-filexpack.watcher.encryption_key./watcher_encryption_key kubectl create secret generic slack-hook --from-literalxpack.notification.slack.account.monitoring.secure_urlhttps://hooks.slack.com/services/asdasdasd/asdasdas/asdasd将这些 Secret 加入 keystorekeystore: - secretName: encryption-key - secretName: slack-hook多 key 合并Secret 中的所有 key 都会被加入 keystore也可合并进同一个 Secretkubectl create secret generic keystore-secrets --from-filexpack.watcher.encryption_key./watcher_encryption_key --from-literalxpack.notification.slack.account.monitoring.secure_urlhttps://hooks.slack.com/services/asdasdasd/asdasdas/asdasdkeystore: - secretName: keystore-secrets自定义路径与 key 选择若 Secret 还被其他应用使用可以只挑选部分 key 并指定 keystore 路径。例如 Secret 内容为kubectl create secret generic slack-secrets --from-literalslack_channel#general --from-literalslack_hookhttps://hooks.slack.com/services/asdasdasd/asdasdas/asdasd只将slack_hook加入 keystore 的xpack.notification.slack.account.monitoring.secure_url路径keystore: - secretName: slack-secrets items: - key: slack_hook path: xpack.notification.slack.account.monitoring.secure_urlkeystore条目下的每一项配置都会透传到volumeMounts用于挂载 Secret。综合示例可参考 examples/config/values.yaml该示例同时演示了自定义elasticsearch.yml与 keystore 共存。底层机制statefulset.yaml启用keystore后会注入一个名为keystore的 initContainer依次执行elasticsearch-keystore create、遍历/tmp/keystoreSecrets/*/*以add-file方式写入各 key、将环境变量ELASTIC_PASSWORD写入bootstrap.password最后把 keystore 复制到共享的 emptyDir主容器再以subPath: elasticsearch.keystore的方式挂载该文件。5.8 如何启用快照snapshotting按以下步骤操作按「如何安装插件」一节将快照插件装进自定义 Docker 镜像按「如何使用 keystore」一节把所需 Secret 或凭据写入 ES keystore按常规方式配置快照仓库snapshot repository使用 Snapshot Lifecycle Management 或 curator 等工具实现快照自动化。5.9 如何在部署后配置模板templates可以利用postStart生命周期钩子在容器创建后执行代码。以下是配置索引模板的完整示例lifecycle: postStart: exec: command: - bash - -c - | #!/bin/bash # Add a template to adjust number of shards/replicas TEMPLATE_NAMEmy_template INDEX_PATTERNlogstash-* SHARD_COUNT8 REPLICA_COUNT1 ES_URLhttp://localhost:9200 while [[ $(curl -s -o /dev/null -w %{http_code}\n $ES_URL) ! 200 ]]; do sleep 1; done curl -XPUT $ES_URL/_template/$TEMPLATE_NAME -H Content-Type: application/json -d{index_patterns:[\$INDEX_PATTERN\],settings:{number_of_shards:$SHARD_COUNT,number_of_replicas:$REPLICA_COUNT}}六、StatefulSet 模板中的关键实现细节结合 statefulset.yaml可以确认几个对运维至关重要的机制1. 配置变更自动滚动重启当esConfig或esJvmOptions非空时模板会为 Pod 注解注入configchecksum对 configmap 内容做 sha256 截断ConfigMap 变更即触发 Pod 重启避免配置漂移。2. sysctl initContainer默认以 privileged 模式运行sysctl -w vm.max_map_count262144满足 Elasticsearch 的内存映射要求如已用其他方式设置可关闭。3. 就绪探针探针脚本会先检查ELASTIC_PASSWORD环境变量首次启动时请求/_cluster/health?wait_for_statusgreentimeout1s参数来自clusterHealthCheckParams成功后创建标记文件此后只检查本节点是否返回 HTTP 200ES 6.x 时 503 也可容忍。4. 环境变量注入cluster.name、network.host、ES_JAVA_OPTS、discovery.seed_hosts、cluster.initial_master_nodes、ELASTIC_PASSWORD均由模板统一注入roles通过环境变量方式设置。七、与 KnowStreaming 指标体系的联动KnowStreaming 的 Manager 通过SERVER_ES_ADDRESS对应application.yml中es.client.address见 km-dist/docker/manager/application.yml访问 ES并以es.index.expire: 15控制索引保留天数。ES 首次启动后需要初始化索引模板与索引——仓库为此提供了 km-dist/docker/manager/es_template_create.sh等待 ES 可用后依次创建ks_kafka_broker_metric、ks_kafka_cluster_metric、ks_kafka_group_metric、ks_kafka_partition_metric、ks_kafka_replication_metric、ks_kafka_topic_metric、ks_kafka_zookeeper_metric七个索引模板统一设置number_of_shards: 10并为各指标字段预定义类型float/double/long/keyword/date 等随后回放近 7 天for i in {0..6}按_yyyy-MM-dd后缀预创建各指标索引。这解释了为什么该 Chart 在此仓库中被固定为 ES 7.6.0KnowStreaming 的指标索引模板与查询逻辑均针对 7.x 设计与 Docker Compose 部署km-dist/docker/docker-compose.yml 中使用elasticsearch:7.6.2单节点保持一致的版本约束。八、小结KnowStreaming 内置的 Elasticsearch Helm Chart 是一份完整、可生产化配置的官方 Chart 适配版既保留了原版全部参数能力节点角色拆分、反亲和调度、持久化、keystore、TLS、生命周期钩子等又在 values 层面向 KnowStreaming 的指标存储场景做了版本与安全默认值的收敛。无论是随顶层 Chart 一键安装还是独立部署后通过elasticsearch.enabled: false接入已有 ES 7.6.x 集群本文的配置表与 FAQ 都能作为直接可用的操作手册。赞分享后端消息队列运维可观测性【免费下载链接】KnowStreaming一站式云原生实时流数据平台通过0侵入、插件化构建企业级Kafka服务极大降低操作、存储和管理实时流数据门槛项目地址https://gitcode.com/gh_mirrors/kn/KnowStreaming点击查看免费下载相关推荐Operator SDK Helm Operator 实战memcached Helm Chart 部署、配置与升级指南Operator SDK Helm Operator 实战memcached Helm Chart 部署、配置与升级指南 本指南围绕 Operator SDK云原生后端开发工具微服务Apache DolphinScheduler Helm Chart 完全指南Kubernetes 集群部署、配置与实战Apache DolphinScheduler Helm Chart 完全指南Kubernetes 集群部署、配置与实战 Apache DolphinSche任务调度大数据后端前端Volcano 安装部署实战指南YAML 与 Helm Chart 完整配置解析Volcano 安装部署实战指南YAML 与 Helm Chart 完整配置解析 本文以 VolcanoCNCF 云原生批处理系统官方安装文档为主体系统云原生后端任务调度批处理上一篇straight.el版本锁定与配置重现性确保100%一致的开发环境下一篇AVA 报告器日志金样重建指南用 UPDATE_REPORTER_LOG 更新 test-tap 报告器输出创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表