analysis-ik icon indicating copy to clipboard operation
analysis-ik copied to clipboard

k8s上的es无法安装分词器插件

Open yancy-hong opened this issue 1 year ago • 2 comments

使用ECK安装的es。

k8s部分配置文件:

initContainers:
  - name: install-plugins
    securityContext:
      privileged: true
      runAsUser: 0
    command:
      - sh
      - -c
      - |
        bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2

pod init失败,部分describe pod:

Back-off restarting failed container install-plugins in pod elastic-search-es-default-1_elastic

改配置不自动安装分词器,并重新部署Pod:

initContainers:
  - name: install-plugins
    securityContext:
      privileged: true
      runAsUser: 0
    command:
      - sh
      - -c
      - |
        echo "hello"

kubectl exec 进入Pod,手动安装分词器:

bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2

报错:

Exception in thread "main" java.nio.file.FileSystemException: 
     /usr/share/elasticsearch/config/analysis-ik: Operation not permitted

即使在k8s的配置里为config/analysis-ik添加权限也还是报这个错:

initContainers:
  - name: install-plugins
    securityContext:
      privileged: true
      runAsUser: 0
    command:
      - sh
      - -c
      - |
        mkdir -p config/analysis-ik
        chmod -R 777 config/analysis-ik
        bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2

完整k8s配置:

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: elastic-search
  namespace: elastic
spec:
  version: 8.12.2
  nodeSets:
    - name: default
      count: 2
      config:
        node.store.allow_mmap: false
        node.roles: ["master", "data", "ingest"]
      volumeClaimTemplates:
        - metadata:
            name: elasticsearch-data
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 20Gi
            storageClassName: sc-es
      podTemplate:
        spec:
          containers:
            - name: elasticsearch
              resources:
                requests:
                  memory: 8Gi
                  cpu: 4
                limits:
                  memory: 8Gi
                  cpu: 4
          initContainers:
            - name: install-plugins
              securityContext:
                privileged: true
                runAsUser: 0
              command:
                - sh
                - -c
                - |
                  bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.12.2

  transport:
    service:
      metadata:
        name: elastic
      spec:
        type: NodePort

sc-es storageClass内容:

apiVersion: storage.k8s.io/v1
kind: StorageClass
provisioner: nfs.csi.k8s.io
metadata:
  name: sc-es
allowVolumeExpansion: true
reclaimPolicy: Retain
parameters:
  server: 10.10.10.110
  share: /nfs/elastic/search

nfs目录权限:

ls -ld /nfs/elastic/search/
drwxrwxrwx 6 root root 4096 Sep 14 12:03 /nfs/elastic/search/

yancy-hong avatar Sep 14 '24 04:09 yancy-hong

我也遇到同样的问题,有什么方法可以解决吗?

bjtangseng avatar Jun 26 '25 11:06 bjtangseng

已经有解决方案,在initContainers级别加上这一段

          initContainers:
            - name: install-ik
              securityContext:
                privileged: true
              command: ['sh', '-c', 'curl -k -L -o /usr/share/elasticsearch/ik.zip https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.18.2.zip && unzip /usr/share/elasticsearch/ik.zip -d /usr/share/elasticsearch/plugins/ik && rm -rf ik.zip']
              image: docker.elastic.co/elasticsearch/elasticsearch:8.18.2
              imagePullPolicy: IfNotPresent  # 补充镜像拉取策略

maixingyu avatar Sep 09 '25 02:09 maixingyu