惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
IT之家
IT之家
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
V
V2EX
Last Week in AI
Last Week in AI
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
F
Fortinet All Blogs
I
InfoQ
宝玉的分享
宝玉的分享
A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
B
Blog

i4T

OpenClaw在Macmini下网络HTTPS_Proxy代理配置 | i4T 容器化部署OpenClaw授权View权限对Kubernetes集群进行巡检故障排查 | i4T 初试VictoriaLogs集群采集Kubernetes Pod日志 | i4T Kubernetes使用Prometheus监控爱快路由器iKuai_Exporter | i4T RustDesk API集成Authentik ODIC单点登录 | i4T Kubernetes 部署RustDesk API实现专业版功能及管理Web UI | i4T 使用Kubernetes 快速部署RustDesk替换向日葵toDesk进行远程连接 | i4T Authentik 集成群晖Synology DSM 实现单点登录 | i4T Authentik 集成Kubernetes Grafana 实现SSO单点登录 | i4T Authentik 集成接入VMware vCenter 8.0.3实现ldP身份提供商登录 | i4T Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor | i4T 二进制Kafka_2.13-3.9.0集群开启并配置ACL用户授权 | i4T R730 ESXI 8.0平台PCI直通2080Ti 实现Windows远程游戏以及AI模型 | i4T Dell R730虚拟化ESXI8.0.3平台使用丽台Tesla V100配置vGPU | i4T Kubernetes使用HostAliases手动为容器Pod添加hosts解析 | i4T Nginx 使用resolver变量实现动态DNS解析配置 | i4T Kubernetes LoadBalancer负载均衡外部访问方案MetalLB | i4T Kubernetes 1.29.0 部署配置Ingress-nginx-controller | i4T Ubuntu环境下Docker Compose配置Harbor开机自启 | i4T Dell PowerEdge R730更新iDRAC8版本 | i4T Kubernetes部署RedisShake实现Redis哨兵异地灾备 | i4T Kubernetes部署开源Excalidraw实现在线绘图 | i4T Kubernetes部署DNSmgr聚合公网DNS多平台域名解析系统及SSL自续签 | i4T Kubernetes Grafana数据从Sqlite3迁移到MySQL | i4T 宝塔内网Nginx获取公网宝塔Nginx用户真实IP | i4T 基于Kubernetes Categraf SNMP插件采集Dell R730服务器硬件并使用Grafana监控 | i4T Kubernetes v1.29.9安装Grafana 12并开启匿名访问 | i4T Containerd 配置免费镜像加速源 | i4T Docker集成Containerd实现容器管理 | i4T
Kubernetes 部署Elasticsearch为WordPress提供文章搜索 | i4T
https://i4t.com/users/auuAwtzuk · 2026-01-17 · via i4T

在K8s上部署单节点Elasticsearch及Kibana的全流程。同时ES集成 IK 中文分词器,配合 ElasticPress 插件,实现WordPress网站搜索性能的极致优化

Elasticsearch 是一个开源的分布式搜索和分析引擎,专为速度、扩展和 AI 应用而打造。作为一个检索平台,它可以实时存储结构化、非结构化和向量数据,提供快速的混合和向量搜索

为什么我的WordPress采用elasticsearch采用单机?

  • 默认情况下单机ES单副本足够支撑WordPress稳定运行,除非WordPress 站点文章数量超过100万篇,或者索引体积超过 30GB,否则搞 ES集群做分片Sharding纯属“负优化”
  • 对于 99% 的 WordPress 站点(包括大型资源站 B2 主题),单节点Single Node或者是单节点 + 副本Replication才是性能最高的选择。

Elastic 官方建议单个分片的大小在 10GB - 50GB 之间

k8s 部署ES

  • Kubernetes版本 v1.29.9
  • Elasticsearch版本 v7.17.13
  • 命名空间为wordpress
  • 推荐使用i4t.com/dockerproxy镜像加速

创建部署yaml

root@k8s-master-01:~/es/es-i4t# vim wordpress-es.yaml

部署单机ES以及Kibana

  • dsm7-nfs-client 这里我已经创建了storageclass
root@k8s-master-01:~/es/es-i4t# cat wordpress-es.yaml
---
# ===========================
# 1. Elasticsearch StatefulSet
# ===========================
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
  namespace: wordpress
spec:
  serviceName: elasticsearch
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      initContainers:
      - name: install-plugins
        image: dockerproxy.frps.fun/library/elasticsearch:7.17.13
        command:
        - sh
        - -c
        - |
          # 检查是否已安装 ik,没安装则下载
          if [ ! -d "plugins/analysis-ik" ]; then
            echo "Installing IK Analyzer..."
            # 必须加 --batch 自动确认权限
            ./bin/elasticsearch-plugin install --batch https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.13.zip
          fi

          # [关键修复] 同时修正 plugins 和 config 目录的权限
          # 这一步至关重要,否则主容器读不到字典
          chown -R elasticsearch:elasticsearch plugins
          chown -R elasticsearch:elasticsearch config
        volumeMounts:
        - name: plugins
          mountPath: /usr/share/elasticsearch/plugins
        # [新增] 挂载配置目录,保存字典文件
        - name: ik-config
          mountPath: /usr/share/elasticsearch/config/analysis-ik

      - name: fix-permissions
        image: busybox
        command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
        volumeMounts:
        - name: data
          mountPath: /usr/share/elasticsearch/data

      containers:
      - name: elasticsearch
        image: dockerproxy.frps.fun/library/elasticsearch:7.17.13
        resources:
          limits:
            memory: 8Gi
          requests:
            memory: 4Gi
        env:
        - name: discovery.type
          value: single-node
        - name: ES_JAVA_OPTS
          value: "-Xms2g -Xmx4g"
        - name: xpack.security.enabled
          value: "true"
        - name: xpack.security.transport.ssl.enabled
          value: "true"
        ports:
        - containerPort: 9200
          name: http
        - containerPort: 9300
          name: transport
        volumeMounts:
        - name: data
          mountPath: /usr/share/elasticsearch/data
        - name: plugins
          mountPath: /usr/share/elasticsearch/plugins
        - name: ik-config
          mountPath: /usr/share/elasticsearch/config/analysis-ik

      volumes:
      - name: plugins
        emptyDir: {}
      - name: ik-config
        emptyDir: {}

  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "dsm7-nfs-client"
      resources:
        requests:
          storage: 50Gi
---
# ===========================
# 2. Elasticsearch Service
# ===========================
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  namespace: wordpress
spec:
  type: NodePort
  selector:
    app: elasticsearch
  ports:
  - name: http
    port: 9200
    targetPort: 9200
    # nodePort: 30200 # 如果需要固定端口可以取消注释
---
# ===========================
# 3. Kibana Deployment
# ===========================
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  namespace: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: dockerproxy.frps.fun/library/kibana:7.17.13
        resources:
          limits:
            memory: 4Gi
        env:
        - name: ELASTICSEARCH_HOSTS
          value: "http://elasticsearch:9200"
        - name: I18N_LOCALE
          value: "zh-CN"
        - name: ELASTICSEARCH_USERNAME
          value: "kibana_system"
        - name: ELASTICSEARCH_PASSWORD
          value: "***填写密码"
---
# ===========================
# 4. Kibana Service (NodePort)
# ===========================
apiVersion: v1
kind: Service
metadata:
  name: kibana-nodeport
  namespace: wordpress
spec:
  type: NodePort
  selector:
    app: kibana
  ports:
  - name: http
    port: 5601
    targetPort: 5601

Kubernetes 部署Elasticsearch为WordPress提供文章搜索

生成ES密码

# 1. 进入 ES 容器
kubectl exec -it elasticsearch-0 -n wordpress -- /bin/bash

# 2. 运行自动生成密码命令
./bin/elasticsearch-setup-passwords auto

# 3.记录以下2个账户密码
elastic: 超级管理员账号(你登录网页用这个)。
kibana_system: Kibana 系统内部连接 ES 用的账号(我们需要用这个修复报错)。

添加Kibana用户认证信息

      containers:
      - name: kibana
        #image: kibana:7.17.13  官方镜像
        image: dockerproxy.frps.fun/library/kibana:7.17.13
        resources:
          limits:
            memory: 4Gi
        env:
                         #### 以下为新增配置#####
        - name: ELASTICSEARCH_USERNAME
          value: "kibana_system"  # 固定用户名,不要改
        - name: ELASTICSEARCH_PASSWORD
          value: "这里填刚才生成的kibana_system的密码"

更新Kibana Pod

root@k8s-master-01:~/es/es-i4t# kubectl apply -f wordpress-es.yaml
statefulset.apps/elasticsearch configured
service/elasticsearch unchanged
deployment.apps/kibana configured
service/kibana-nodeport unchanged

使用kibana确认下服务状态

root@k8s-master-01:~/es/es-i4t# kubectl get svc -n wordpress|grep kibana
kibana-nodeport   NodePort    10.96.1.129   <none>        5601:30557/TCP   8m28s

访问k8s_node_ip:30557
Kubernetes 部署Elasticsearch为WordPress提供文章搜索

密码为刚刚生成的

  • elastic: 超级管理员账号(你登录网页用这个)。

Kubernetes 部署Elasticsearch为WordPress提供文章搜索

测试ik分词器

POST /_analyze?pretty
{
  "analyzer": "ik_max_word",
  "text": "WordPress性能优化"
}

Kubernetes 部署Elasticsearch为WordPress提供文章搜索

配置WP索引优化
我们通过配置模板只要是名字以wp_ 开头的索引,都强制用1分片0副本

PUT _index_template/wordpress_optimization
{
  "index_patterns": ["wp_*"], 
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 0,
      "analysis": {
        "analyzer": {
          "default": {
            "type": "ik_max_word" 
          },
          "default_search": {
            "type": "ik_smart"
          }
        }
      }
    }
  },
  "priority": 1
}

Kubernetes 部署Elasticsearch为WordPress提供文章搜索

WordPress安装插件

配置插件参数,编辑配置文件wp-config.php

<?php

/** ElasticPress 连接配置 */
// [关键修改] 将账号:密码拼接到 URL 里,格式 http://user:pass@ip:port
// 这样可以绕过 HTTP Header 丢失的问题
define( 'EP_HOST', 'http://elastic:密码部分@192.168.1.1:port' );

define( 'EP_INDEX_PREFIX', 'wp_b2_prod_' );
define( 'EP_IS_NETWORK', false );

安装插件: 在 WP 后台 -> 插件 -> 安装插件 -> 搜索 "ElasticPress" -> 安装并启用。

Kubernetes 部署Elasticsearch为WordPress提供文章搜索

  • 如果连接异常可以重启PHP、清理Redis缓存

开启同步
Kubernetes 部署Elasticsearch为WordPress提供文章搜索

个人中心

购物车

优惠劵

今日签到

有新私信 私信列表

搜索

幸运之星正在降临...

点击领取今天的签到奖励!

恭喜!您今天获得了{{mission.data.mission.credit}}积分

  • 限制以下商品使用: 限制以下商品分类使用: 不限制使用:

    所有商品和商品类型均可使用