k8s下离线搭建elasticsearch
前提
已经完成k8s安装
已经完成相关组件如helm的安装
下载es的chart包
如下地址
https://helm.elastic.co/helm/elasticsearch/elasticsearch-版本号.tgz
如6.8.10
https://helm.elastic.co/helm/elasticsearch/elasticsearch-6.8.10.tgz
修改配置
修改value.yaml文件,根据需求修改replicas数量,确定节点数,修改service.type为NodePort,修改service.nodePort,指定一个30000-32767的端口号,为外部访问使用,如果准备使用其他方式如只在集群内部或使用ingress代理,也可不指定
修改template/statefulset.yaml文件
在volumeClaimTemplates.spec下增加storageClass
spec:storageClass: "elasticsearch-storageclass"
创建存储部分
创建存储类文件sc.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: elasticsearch-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
执行命令
kubectl apply -f sc.yaml
创建存储卷:
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pv1
spec:capacity:storage: 50GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: elasticsearch-storageclasslocal:path: /data/espv1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- ${k8s集群的主机,只能写一条}
- 其中values下的k8s主机只能有一条,虽然是个列表
- local.path指定路径必须提前创建好,否则会报错
- capacity下面的存储信息按照一个es节点的需求来
执行命令:
kubectl apply -f pv.yaml
注意:这是创建了es一个节点的存储卷,如果es是集群方式搭建,需要多个节点,请将上面的apply -f pv.yaml执行对应次数,并且每次修改里面meta.name、并每次根据需求修改里面的k8s主机和存储路径
下载镜像
找个能连互联网的主机
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/elasticsearch:6.8.0
docker save -o es.tar swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/elasticsearch:6.8.0
之后将es.tar上传到部署环境,使用docker load上传镜像,使用dokcer tag修改镜像名称,使用docker push传到本地镜像仓库
修改value.yaml文件,把里面的image参数改成实际的镜像地址
安装
把chart包使用helm package+cm push方式上传到仓库,方法可以参考:
helm与chartmuseum安装-CSDN博客
之后执行安装命令:
helm install elasticsearch -n ${命名空间} ${本地仓库名}/elasticsearch
使用命令查看安装效果:
kubect get pod -n${命名空间}
pod都起来就行了,接着使用:
kubect get svc -n${命名空间}
查看创建的es服务,主要是端口号
之后在其他pod里面就可以用下面地址访问:
elasticsearch-master.${空间名称}.svc.cluster.local:${端口号}
在外部使用集群任意节点ip+前面指定nodePort访问
增加使用用户名密码的http basic认证
如果需要增加认证,还要做一些改造
修改values.yaml文件,修改如下内容:
esConfig: elasticsearch.yml: |network.host: 0.0.0.0xpack.security.enabled: truexpack.security.transport.ssl.enabled: truehttp.cors.enabled: truehttp.cors.allow-origin: "*"http.cors.allow-headers: AuthorizationenvFrom: ELASTIC_USERNAME: elasticELASTIC_PASSWORD: ${密码,自己根据需求指定}
接着安装es,启动后使用kubectl get pod去查看pod状态,会发现es的状态始终为未启动完成,这是因为密码还未被设定,pod的健康检查始终通过不了
使用如下格式命令进入es的pod:
kubectl exec -it ${任意es的pod名称} -n${空间名} /bin/sh
在当前es目录中使用:
bin/elasticsearch-setup-passwords interactive
指定每个用户的密码,
之后exit退出pod,再使用kubectl get pod去查看,等所有pod都启动完成即成功