一、K8s 部署 elasticsearch-7.14.0 集群
安装规划
| 组件 | replicas | 类型 |
|---|---|---|
| es | 3 | StatefulSet |
| kibana | 1 | Deployment |
使用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.ymlapiVersion:v1kind:Namespacemetadata:name:eslabels:name:eskubectl apply-fes-ns.yml查看命名空间:
kubectl get ns2. 创建存储卷
使用OpenEBS本地存储模式:
vies-local-storage.ymlapiVersion: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:WaitForFirstConsumerkubectl apply-fes-local-storage.yml查看存储卷:
kubectl get sc3. 创建 ConfigMap 配置
主要声明elasticsearch.yml配置文件:
vies-config.ymlapiVersion: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-nes4. 创建 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-nes5. 创建 StatefulSet 应用
vies-sfe.ymlapiVersion: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.ymlapiVersion: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.yml2. 创建 Deployment 应用
vikibana-dm.ymlapiVersion: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:9200kubectl 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