制作ElasticSearch的docker镜像(含nfs)

本文详述如何手动制作Elasticsearch镜像,包括下载基础tar包、配置集群名、JVM内存、Dockerfile编写及构建过程,适合解决官方镜像存在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题场景

官方源下载的镜像不能直接使用,涵盖了包括X-pack商业插件,没有nfs工具等诸多问题,除此之外还有很多未发现的问题,决定自己手动制作一个es镜像。

制作方法

  1. 下载官方tar包(这样的话是不含x-pack商业化插件的)
  2. 解压到本地,修改配置文件,具体修改如下
  • config目录下elasticsearch.yml,将其中的cluster.name设置为统一的集群名,这样就可以通过相同的集群名发现,node.nam修改为改节点的名字,例如node1,node2等等,network.host一般修改为0.0.0.0,discovery.zen.ping.unicast.hosts修改为集群内所有节点的IP,如[“10.200.177.101:9300”, “10.200.177.102:9300”,“100.200.177.103:9300”]
  • config目录下jvm.options,修改jvm内存大小,比如外部分配es的内存为16G,这里只能分配8G,因为除了jvm别的部分也需要占用内存,添加配置信息-Xms8g -Xmx8g
  1. 编写Dockerfile文件
FROM centos:7

ADD jdk-8u261-linux-x64.tar.gz /usr/local
ADD elasticsearch-6.1.3.tar.gz /home/

RUN mv /usr/local/jdk1.8.0_261 /usr/local/jdk
RUN yum install -y nfs-utils

ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

RUN groupadd -r es && useradd -r -g es es

RUN chmod -R 777 /home/elasticsearch-6.1.3/
USER es
WORKDIR /home/elasticsearch-6.1.3/bin
ENTRYPOINT [ "./elasticsearch" ]

EXPOSE 9200
EXPOSE 9300
  1. docker build -t xxxx .构建脚本

打包结构

-------------当前目录
Dockerfile
elasticsearch-6.1.3.tar.gz
jdk-8u261-linux-x64.tar.gz

好的,您的问题是关于使用 Kubernetes 部署 Elasticsearch 集群的。我可以回答您的问题并提供一些指导。 首先,您需要创建一个 `es-statefulset.yaml` 文件。您可以使用以下的 `es-statefulset.yaml` 文件: ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: es-cluster spec: serviceName: elasticsearch replicas: 3 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 ports: - containerPort: 9200 name: api - containerPort: 9300 name: inter-node volumeMounts: - name: data mountPath: /usr/share/elasticsearch/data - name: init-script mountPath: /usr/share/elasticsearch/init-script env: - name: "cluster.name" value: "es-cluster" - name: "node.name" valueFrom: fieldRef: fieldPath: metadata.name - name: "discovery.seed_hosts" value: "es-cluster-0.elasticsearch,es-cluster-1.elasticsearch,es-cluster-2.elasticsearch" - name: "cluster.initial_master_nodes" value: "es-cluster-0,es-cluster-1,es-cluster-2" - name: "ES_JAVA_OPTS" value: "-Xms512m -Xmx512m" readinessProbe: httpGet: path: /_cluster/health?wait_for_status=yellow&timeout=1s port: api initialDelaySeconds: 10 periodSeconds: 10 livenessProbe: httpGet: path: /_cluster/health?wait_for_status=green&timeout=1s port: api initialDelaySeconds: 30 periodSeconds: 10 volumes: - name: data persistentVolumeClaim: claimName: elasticsearch-data - name: init-script configMap: name: elasticsearch-init-script volumeClaimTemplates: - metadata: name: elasticsearch-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: nfs ``` 在这个文件中,我们创建了一个名为 `es-cluster` 的 statefulset,使用 `elasticsearch:7.2.0` 镜像,并声明了 `9200` 端口为 API 端口,`9300` 端口为内部访问端口。我们还使用了 `nfs` 存储类来为 Elasticsearch 提供持久化存储,并使用了一个名为 `elasticsearch-init-script` 的 ConfigMap 中的脚本来授权 Elasticsearch 的数据目录。 接下来,您可以使用以下命令来应用这个文件: ```bash $ kubectl apply -f es-statefulset.yaml ``` 完成后,您可以使用以下命令来查看 Elasticsearch 集群的状态: ```bash $ kubectl get pods -l app=elasticsearch $ kubectl get statefulsets elasticsearch $ kubectl get services elasticsearch ``` 希望我的回答能够帮助您解决问题,如果您还有任何问题,请随时问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值