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: 50Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: elasticsearch-storageclass
  local:
    path: /data/espv1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
            - ${k8s集群的主机,只能写一条}
  1. 其中values下的k8s主机只能有一条,虽然是个列表
  2. local.path指定路径必须提前创建好,否则会报错
  3. 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.0
     xpack.security.enabled: true
     xpack.security.transport.ssl.enabled: true
     http.cors.enabled: true
     http.cors.allow-origin: "*"
     http.cors.allow-headers: Authorization

envFrom: 
  ELASTIC_USERNAME: elastic
  ELASTIC_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都启动完成即成功

相关推荐
努力搬砖的咸鱼1 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
阿珍爱上了阿强2.02 小时前
Elasticsearch 实战:客户数据索引设计与精准筛选查询实践
大数据·elasticsearch·搜索引擎
故乡de云2 小时前
2026年谷歌云价格走势深度分析:企业如何在高成本时代保持竞争力?
运维·kubernetes·云计算
舰长1152 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
hwj运维之路3 小时前
Docker面试题汇总系列
运维·docker·云原生·容器
阿拉伯柠檬3 小时前
Git原理与使用(一)
大数据·linux·git·elasticsearch·面试
hwj运维之路4 小时前
超详细ubuntu22.04部署k8s1.28高可用(一)【多master+keepalived+nginx实现负载均衡】
运维·云原生·kubernetes·负载均衡
张小凡vip4 小时前
Kubernetes---gitlab的ci/cd发布基于k8s的项目示例参考
ci/cd·kubernetes·gitlab
VermiliEiz4 小时前
使用二进制方式部署k8s(6)
云原生·容器·kubernetes
七七powerful4 小时前
Docker 容器化 GPU 压测工具(压测单卡)
运维·docker·容器