首页
学习
活动
专区
圈层
工具
发布
43 篇文章
1
干货 | Elasitcsearch7.X集群/索引备份与恢复实战
2
干货 | Elasticsearch 运维实战常用命令清单
3
腾讯云Elasticsearch集群运维常用命令详解一(集群篇)
4
腾讯云Elasticsearch集群运维常用命令详解二(节点篇)
5
腾讯云Elasticsearch集群运维常用命令详解三(索引篇)
6
如何系统的学习 Elasticsearch ?
7
Elasitcsearch 开发运维常用命令集锦
8
Elasticsearch集群数据备份与恢复 Snapshot & Restore
9
搭建ELFK日志采集系统
10
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
11
使用 Ansible 部署 Elasticsearch 集群
12
技术角 | 在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8部署与认证配置
13
在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8的部署与认证配置
14
Elasticsearch 生产环境集群部署最佳实践
15
ES 7.8 速成笔记(中)
16
ES 7.8 速成笔记(上)
17
如何在CentOS 7上设置生产Elasticsearch集群
18
kubernetes-2:helm实战-1:生产级别的elasticsearch集群部署
19
ElasticSearch 7集群部署
20
在CentOS 7安装ElasticSearch 7.x
21
zabbix 监控 es 集群
22
ELK 日志报警插件 ElastAlert
23
Elasticsearch集群规划最佳实践
24
kubernetes-7:elasticsearch容器化
25
Go Elasticsearch 增删改查(CRUD)快速入门
26
go操作elasticsearch示例
27
在 Kubernetes 上搭建 EFK 日志收集系统
28
一文彻底搞定 EFK 日志收集系统
29
TKE上搭建EFK日志采集系统
30
使用 EFKLK 搭建 Kubernetes 日志收集工具栈
31
腾讯云Elasticsearch集群规划及性能优化实践
32
【干货】Elasticsearch索引性能优化 (2)
33
让Elasticsearch飞起来!——性能优化实践干货
34
【干货】Elasticsearch的索引性能优化(3)
35
Elasticsearch性能优化实战指南
36
ElasticSearch性能优化官方建议
37
Elasticsearch 7.10.1集群压测报告(4核16G*3,AMD)
38
Elasticsearch压测之Esrally压测标准
39
通过 esrally 压测elasticsearch
40
Elasticsearch压测工具esrally部署之踩坑实录(上)
41
Elasticsearch压测工具Esrally部署之踩坑实录(下)
42
Elasticsearch压测工具Esrally部署指南
43
百亿架构之filebeat讲解

kubernetes-2:helm实战-1:生产级别的elasticsearch集群部署

(1).镜像准备

添加需要的Helm仓库:

helm repo add elastic https://helm.elastic.co

(2).pv准备

因为elasticsearch的data节点很明显是需要持久化保存数据的,很显然是stateful容器类型,但实际上我们会把master, ingest的也做成stateful,因为当master, ingest宕机重启后,我们需要看到连贯日志。

需要准备9个pv声明。

以data0举例:

如下图,注意一定要在NFS上建立对应的path目录,我这里是es-c1-skywalking-data0,否则建立PV不会报错,但是后边初始化容器时会有问题,无法创建POD。

相关配置参见:https://github.com/hepyu/k8s-app-config/tree/master/elasticsearch下的3个pv.yaml:

顺次执行创建pv:

kubectl apply -f ./pv-es-c1-skywalking-master.yaml

kubectl apply -f ./pv-es-c1-skywalking-ingest.yaml

kubectl apply -f ./pv-es-c1-skywalking-data.yaml

pv初始化完成后:

(3).使用helm部署生产级别的elasticsearch集群

elasticsearch集群有3类节点类型:master, ingest, data,都需要部署,每类部署3个节点,共部署9个节点。

最好顺序部署:master -> ingest -> data。

1.master node:

helm install --name es-c1-master --namespace biz elastic/elasticsearch --version 6.4.3 --set masterService=es-c1-master,nodeGroup=master,clusterName=es-c1,roles.data=false,roles.ingest=false,volumeClaimTemplate.resources.requests.storage=1Gi,volumeClaimTemplate.storageClassName=es-c1-skywalking,volumeClaimTemplate.accessModes[0]=ReadWriteMany,replicas=3,minimumMasterNodes=3

2.ingest node:

helm install --name es-c1-ingest --namespace coohua elastic/elasticsearch --version 6.4.3 --set masterService=es-c1-master,nodeGroup=ingest,clusterName=es-c1,roles.data=false,roles.master=false,volumeClaimTemplate.resources.requests.storage=1Gi,volumeClaimTemplate.storageClassName=es-c1-skywalking-ingest,volumeClaimTemplate.accessModes[0]=ReadWriteMany,replicas=3,minimumMasterNodes=3

3.data node:

helm install --name es-c1-data --namespace coohua elastic/elasticsearch --version 6.4.3 --set masterService=es-c1-master,nodeGroup=data,clusterName=es-c1,roles.master=false,roles.ingest=false,volumeClaimTemplate.resources.requests.storage=1Gi,volumeClaimTemplate.storageClassName=es-c1-skywalking-data,volumeClaimTemplate.accessModes[0]=ReadWriteMany,replicas=3,minimumMasterNodes=3

参数含义请参考官方git(结合上述命令和官方说明很容易明白):

https://github.com/elastic/helm-charts/tree/master/elasticsearch

关于本文:

其实官方git已经写的非常清楚了,但是为什么还会有这篇文章呢?因为如何使用还是需要付出一些成本的,比如如何分节点类型部署,如何指定数组类型的参数,如何避免网络问题不能pull Image等,会遇到很多细节问题需要解决。

(4).部署完成后的容器中的elasticsearch集群

(5).验证elasticsearch集群

装配ingress(还是相同的git地址):

执行kubectl apply -f ./ingress-es-c1-skywalking.yaml

执行kubectl get ingress --all-namespaces找到对应的域名和IP,配置本地访问HOST后,使用域名访问可以看到集群work:

http://es-c1-admin-skywalking.biz.com/_cluster/health?pretty

注意:

1.实际使用中,我们不会配置elasticsearch的ingress,因为ingress是容器内部和外部的通信,k8s集群里的app不需要通过ingress访问es,而是直接通过k8s的service访问。

2.更好的验证方式是通过kibana验证,下一篇聊。

(6).注意事项

1.拉取elasticsearch镜像失败

有可能存在网络问题,默认是从这里拉取elasticsearch镜像:

docker.elastic.co/elasticsearch/elasticsearch

有三个解决办法:

方法一:镜像重命名

docker pull elasticsearch:6.4.3

重命名镜像为:docker.elastic.co/elasticsearch/elasticsearch:6.4.3

docker images |grep elasticsearch |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#elasticsearch#docker\.elastic\.co\/elasticsearch\/elasticsearch#2' |sh -x

这个方法非常坑,没有实际价值,因为需要在每个k8s-worker-node执行一遍,生产环境是不可能使用这种操作的。

方法二:通过helm参数指定image拉取地址

这个方法凑合。

方法三:使用自有repo

将官方镜像打成自己的tag,然后上传到自有repo,这是生产级别的使用方法。

2.建立PV时,一定要在NFS(或者其他存储)先建立真实目录

我没有先建,后来忘了做这个操作,转了一个大弯,K8S并不提示你具体信息,而是提示"mount.nfs: access denied by server while mounting",一直误认为是权限问题。

3.helm install一定要指定nodeGroup

nodeGroup取值是master, ingest, data,对应不同es的不同角色;

nodeGroup=master时,需要roles.data=false,roles.ingest=false,其他角色类似。其他参数的使用可以参考本文样例和官方git说明。

4.建立pv时注意使用storageClasss

k8s默认是使用磁盘是声明大小来匹配pv和pvc的,需要stroageClass来特别指定用途,强制匹配。

5.要注意工程拓扑

默认情况下K8S是分配相对空闲的work node,但实际上这个策略在生产环境是行不通的,因为很有可能将es容器和线上高并发的app分配到同一个work node,而受限与硬件资源限制(如带宽等),会给服务造成很大波动(p99或者p999飙升)。

使用nodeSelector,配合work-node-label可以实现工程拓扑。

(7).参考资料:

1.elasticsearch官方git:

https://github.com/elastic/helm-charts/tree/master/elasticsearch

2.kubernetes官网。

下一篇
举报
领券