前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes-2:helm实战-1:生产级别的elasticsearch集群部署

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

作者头像
千里行走
发布2019-07-03 17:56:08
3.7K0
发布2019-07-03 17:56:08
举报
文章被收录于专栏:千里行走

(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官网。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千里行走 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档