镜像

镜像版本:可以去 https://hub.docker.com/ 搜索镜像,这里用的是elasticsearch:7.17.4
k8s已经存在存储类 (Storage Class):alicloud-disk-ssd

服务发现

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
spec:
  clusterIP: None
  ports:
  - name: elasticsearch-in
    port: 9300
    protocol: TCP
    targetPort: 9300
  - name: elasticsearch-out
    port: 9200
    protocol: TCP
    targetPort: 9200
  selector:
    app: elasticsearch
  type: ClusterIP

部署服务

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  serviceName: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - env:
        - name: ES_JAVA_OPTS
          value: -Xms2048m -Xmx2048m
        - name: node.data
          value: "true"
        - name: node.master
          value: "true"
        - name: path.data
          value: /usr/share/elasticsearch/data
        # 自定义集群名
        - name: cluster.name
          value: es-cluster
        # 定义节点名,使用metadata.name名称
        - name: node.name
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
          # 初始化集群时,ES从中选出master节点
        - name: cluster.initial_master_nodes
          # 对应metadata.name名称加编号,编号从0开始
          value: "elasticsearch-0"
        - name: discovery.zen.minimum_master_nodes
          value: "1"
        # 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点
        # 如果discovery.seed_hosts的值是一个域名,且该域名解析到多个IP地址,那么es将处理其所有解析的IP地址。
        - name: discovery.seed_hosts
          value: "elasticsearch"
        name: elasticsearch
        image: elasticsearch:7.17.4
        imagePullPolicy: IfNotPresent
        lifecycle:
          postStart:
            exec:
              command:
              - /bin/sh
              - -c
              - |
                sysctl -w vm.max_map_count=262144
                ulimit -l unlimited
                ulimit -n 65536
                chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data
        ports:
        - containerPort: 9200
          name: 9200tcp2
          protocol: TCP
        - containerPort: 9300
          name: 9300tcp2
          protocol: TCP
        resources:
          limits:
            cpu: "2"
            memory: 4Gi
          requests:
            cpu: "1"
            memory: 2Gi
        # 设置挂载目录
        volumeMounts:
          - name: elasticsearch-data
            mountPath: /usr/share/elasticsearch/data
  volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     # 对应容器中volumeMounts.name
      name: elasticsearch-data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 50Gi
      storageClassName: alicloud-disk-ssd

验证部署成功

进入控制台:
curl 127.0.0.1:9200
返回如下:

{
  "name" : "elasticsearch-0",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "dKQcfLskQAiVyNuF8-e4Pw",
  "version" : {
    "number" : "7.17.4",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "79878662c54c886ae89206c685d9f1051a9d6411",
    "build_date" : "2022-05-18T18:04:20.964345128Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐