ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

K8s 部署 elasticsearch-7.14.0 集群 及 kibana 客户端

K8s 部署 elasticsearch-7.14.0 集群 及 kibana 客户端

一、K8s 部署 elasticsearch-7.14.0 集群

安装规划

组件replicas类型
es3StatefulSet
kibana1Deployment

使用k8s版本为:v1.18.0。

本次使用OpenEBS来作为存储引擎,OpenEBS是一个开源的、可扩展的存储平台,它提供了一种简单的方式来创建和管理持久化存储卷。它支持各种存储后端,包括但不限于ZFS、Btrfs、XFS等。同时,OpenEBS具有高度的可扩展性和可配置性,可以满足不同的存储需求。

安装OpenEBS:

kubectl apply-fhttps://openebs.github.io/charts/openebs-operator.yaml

验证OpenEBS是否正确安装:

kubectl get pods-nopenebs


所有的OpenEBS pods都处于Running状态表示正常。

1. 创建命名空间

vies-ns.yml
apiVersion:v1kind:Namespacemetadata:name:eslabels:name:es
kubectl apply-fes-ns.yml

查看命名空间:

kubectl get ns

2. 创建存储卷

使用OpenEBS本地存储模式:

vies-local-storage.yml
apiVersion:storage.k8s.io/v1kind:StorageClassmetadata:name:es-local-storageannotations:openebs.io/cas-type:localcas.openebs.io/config:|- name: StorageType value: hostpath - name: BasePath value: /data/openebs/esprovisioner:openebs.io/localreclaimPolicy:DeletevolumeBindingMode:WaitForFirstConsumer
kubectl apply-fes-local-storage.yml

查看存储卷:

kubectl get sc

3. 创建 ConfigMap 配置

主要声明elasticsearch.yml配置文件:

vies-config.yml
apiVersion:v1kind:ConfigMapmetadata:name:es-confignamespace:eslabels:app:es-configdata:elasticsearch.yml:|+#集群名称cluster.name:cluster-es#节点名称,每个节点的名称不能重复,这里不指定,使用当前主机的名称# node.name:#ip 地址,每个节点的地址不能重复network.host:0.0.0.0#是不是有资格主节点node.master:truenode.data:truehttp.port:9200# head 插件需要这打开这两个配置,解决跨域问题http.cors.allow-origin:"*"http.cors.enabled:truehttp.max_content_length:200mb#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 mastercluster.initial_master_nodes:["es-0"]#es7.x 之后新增的配置,节点发现discovery.seed_hosts:["es-0.es-svc.es.svc.cluster.local:9300","es-1.es-svc.es.svc.cluster.local:9300","es-2.es-svc.es.svc.cluster.local:9300"]gateway.recover_after_nodes:2network.tcp.keep_alive:truenetwork.tcp.no_delay:truetransport.tcp.compress:true#集群内同时启动的数据任务个数,默认是 2 个cluster.routing.allocation.cluster_concurrent_rebalance:16#添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个cluster.routing.allocation.node_concurrent_recoveries:16#初始化数据恢复时,并发恢复线程的个数,默认 4 个cluster.routing.allocation.node_initial_primaries_recoveries:16

注意这里的集群间的访问使用域名:es-X.es-svc.es.svc.cluster.local,格式为:

(podname).(headless server name).(namespace).svc.cluster.local

所以注意下面创建Headless Service服务名字需要为es-svc,StatefulSet中Pod的名字需要为es。

kubectl apply-fes-config.yml

查看 ConfigMap:

kubectl get cm-nes

4. 创建 Service 服务

这里需要创建两个,一个用于集群建访问的Headless Service,一个用于外部访问的NodePort Service:

vies-svc.yml
# headless serviceapiVersion:v1kind:Servicemetadata:name:es-svcnamespace:eslabels:app:es-svcspec:clusterIP:Noneports:-name:rest-portport:9200-name:cluster-portport:9300selector:app:es---# NodePort serviceapiVersion:v1kind:Servicemetadata:name:es-svc-nodeportnamespace:eslabels:app:es-svcspec:clusterIP:ports:-name:rest-portport:9200nodePort:31920targetPort:9200selector:app:estype:NodePorttarget-port:externalTrafficPolicy:Cluster# Local 只有所在node可以访问,Cluster 公平转发
kubectl apply-fes-svc.yml

查看创建的Service:

kubectl get svc-nes

5. 创建 StatefulSet 应用

vies-sfe.yml
apiVersion:apps/v1kind:StatefulSetmetadata:name:esnamespace:esspec:serviceName:"es-svc"#填写无头服务的名称replicas:3selector:matchLabels:app:estemplate:metadata:labels:app:esspec:containers:-name:esimage:elasticsearch:7.14.0ports:-containerPort:9200name:es-rest-port-containerPort:9200name:es-cluster-portenv:-name:ES_JAVA_OPTSvalue:"-Xms1g -Xmx1g"volumeMounts:-name:es-config#挂载配置mountPath:/usr/share/elasticsearch/config/elasticsearch.ymlsubPath:elasticsearch.yml-name:es-data#挂载数据mountPath:/usr/share/elasticsearch/datavolumes:-name:es-configconfigMap:name:es-configvolumeClaimTemplates:-metadata:name:es-dataspec:accessModes:["ReadWriteOnce"]storageClassName:es-local-storageresources:requests:storage:5Gi

这里使用volumeClaimTemplates动态创建pv和pvc。

kubectl apply-fes-sfe.yml

查看 statefulset :

kubectl get statefulset-nes

查看 pod:

kubectl get pods-nes

使用http请求验证es服务是否正常:

http://ip:31920/_cluster/health?pretty

从结果上可以看出ES启动正常。

二、K8s 部署 kibana 客户端

1. 创建 Service 服务

vikibana-svc.yml
apiVersion:v1kind:Servicemetadata:name:kibana-svc-nodeportnamespace:eslabels:app:kibana-svcspec:clusterIP:ports:-name:kibanaport:5601nodePort:31561targetPort:5601selector:app:kibanatype:NodePorttarget-port:externalTrafficPolicy:Cluster# Local 只有所在node可以访问,Cluster 公平转发
kubectl apply-fkibana-svc.yml

2. 创建 Deployment 应用

vikibana-dm.yml
apiVersion:apps/v1kind:Deploymentmetadata:name:kibananamespace:esspec:replicas:1selector:matchLabels:app:kibanatemplate:metadata:labels:app:kibanaspec:containers:-name:kibanaimage:kibana:7.14.0ports:-containerPort:5601name:ui-portenv:-name:ELASTICSEARCH_HOSTSvalue:http://es-0.es-svc.es.svc.cluster.local:9200
kubectl apply-fkibana-dm.yml

查看 pod :

kubectl get pods-nes

下面在浏览器访问 kibana 页面:

http://ip:31561/

三、测试

使用kibana创建一个test_index索引:

PUT /test_index

查看test_index索引信息:

GET /test_index

向test_index索引中添加数据:

PUT /test_index/user/1{"name":"张三","age":15,"sex":"男"}

查询添加的数据:

GET /test_index/user/1

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进