Title

k8s部署elasticsearch以及ik分词器

创建es的configmap(elasticsearch8的话需要把node.max_local_storage_nodes: 1去掉)

vim elasticsearch-cm.yaml

apiVersion: v1

kind: ConfigMap

metadata: 

  name: es

data:

  elasticsearch.yml: |

    cluster.name: my-cluster

    node.name: node-1

    node.max_local_storage_nodes: 1

    network.host: 0.0.0.0

    http.port: 9200 

    discovery.seed_hosts: ["127.0.0.1", "[::1]"]   

    cluster.initial_master_nodes: ["node-1"] 

    http.cors.enabled: true 

    http.cors.allow-origin: /.*/

Apply运行

kubectl apply -f elasticsearch-cm.yaml

创建pv

vim elasticsearch-pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:  

  name: es-pv

spec:

  capacity:  

    storage: 2Gi

  accessModes:  

  - ReadWriteMany

  persistentVolumeReclaimPolicy: Retain

  storageClassName: managed-nfs-storage

  hostPath:

    path: /nfs/elasticsearch/

---  

apiVersion: v1

kind: PersistentVolumeClaim

metadata: 

  name: es-pvc

spec:  

  accessModes:  

  - ReadWriteMany   

  resources:  

    requests:

      storage: 2Gi

  storageClassName: managed-nfs-storage

Apply运行

kubectl apply -f elasticsearch-pv.yaml

kubectl get pvc -A

kubectl get pv -A

创建svc

vim elasticsearch-svc.yaml

apiVersion: v1

kind: Service

metadata:

  name: elasticsearch

  labels:

    name: elasticsearch

spec:   

  type: NodePort

  ports:  

  - name:  web-9200

    port: 9200

    targetPort: 9200  

    protocol: TCP

    nodePort: 30105  

  - name:  web-9300

    port: 9300

    targetPort: 9300  

    protocol: TCP

    nodePort: 30106 

  selector:

    name: elasticsearch

Apply运行

kubectl apply -f elasticsearch-svc.yaml

kubectl get svc -A

创建elasticsearch的deployment

vim elasticsearch.yaml

apiVersion: apps/v1

kind: Deployment

metadata: 

  name: elasticsearch

spec:  

  selector: 

    matchLabels: 

      name: elasticsearch

  replicas: 1 

  template: 

    metadata: 

      labels:    

        name: elasticsearch

    spec:  

      initContainers:   

      - name: init-sysctl

        imagebusybox

        command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"] 

        volumeMounts: 

          - name: elasticsearch-data

            mountPath: /usr/share/elasticsearch/data

        securityContext: 

          privileged: true 

      containers:  

      - name: elasticsearch

        imageelasticsearch:7.17.16

        imagePullPolicy: IfNotPresent

        resources:  

          limits:  

            cpu: 1000m

            memory: 2Gi

          requests: 

            cpu: 100m

            memory: 1Gi

        env:   

        - name: ES_JAVA_OPTS

          value: -Xms512m -Xmx512m

        - name: http.cors.allow-headers

          value: Authorization

        - name: xpack.security.enabled

          value: "true"   

        - name: xpack.security.transport.ssl.enabled

          value: "true" 

        - name: network.host

          value: "0.0.0.0" 

        ports:

        - containerPort: 9200 

        - containerPort: 9300  

        securityContext:  

          runAsUser: 1000 

        volumeMounts:

        - name: elasticsearch-data

          mountPath: /usr/share/elasticsearch/data/

        - name: es-config

          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml

          subPath: elasticsearch.yml

        - name: elasticsearch-ik

          mountPath: /usr/share/elasticsearch/plugins/ik

      volumes: 

      - name: elasticsearch-ik

        hostPath:   

          path: /root/kubernetes/elasticsearch/ik/

      - name: elasticsearch-data

        persistentVolumeClaim:  

          claimName: es-pvc                                                                                                                               

      - name: es-config

        configMap:  

          name: es 

修改系统逻辑

vim /etc/sysctl.conf

vm.max_map_count=262144

 sysctl --system   #刷新策略

Apply运行

kubectl apply -f elasticsearch.yaml

kubectl get po -A

 部署ik分词器

相关的步骤已经写进上面的yaml里了。在本地创建ik目录,并把下载的ik分词器解压缩到ik目录里,然后映射进容器里即可

这是本地创建的ik目录里面有分词器解压缩后的文件

 

通过这一段内容映射进pod里启动即可

 

我这里没有设置es的密码,因为场景里设置上es的密码,后端就连不上es,很奇怪!

这里写一下设置es密码的方法

Yaml里添加env参数开启安全认证

        - name: http.cors.allow-headers

          value: Authorization

        - name: xpack.security.enabled

          value: "true"

        - name: xpack.security.transport.ssl.enabled

          value: "true" 

        - name: network.host

          value: "0.0.0.0" 

进入容器生成登陆密码

./bin/elasticsearch-setup-passwords interactive

interactive 是手动输入密码

auto是自动随机生成密码

posted @ 2024-06-20 11:17  Esurts~  阅读(125)  评论(0)    收藏  举报