--- # Headless Service(StatefulSet 必需,哪怕单节点,无头) apiVersion: v1 kind: Service metadata: name: elasticsearch namespace: es-test spec: clusterIP: None selector: app: elasticsearch ports: - port: 9200 name: http - port: 9300 name: transport --- # 单节点 StatefulSet (有状态工作负载) apiVersion: apps/v1 kind: StatefulSet metadata: name: elasticsearch namespace: es-test spec: serviceName: "elasticsearch" replicas: 1 # 👈 单节点! selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: # ✅ 关键:initContainer 修复内核参数(腾讯云默认可能不足) initContainers: - name: increase-vm-max-map image: busybox command: ["sysctl", "-w", "vm.max_map_count=262144"] securityContext: privileged: true containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:9.2.2 env: - name: discovery.type value: "single-node" # ⚠️ 必须!否则 ES 9 会报错退出 - name: cluster.name value: "test-es-cluster" - name: node.name value: "es-test-node" - name: ES_JAVA_OPTS value: "-Xms1g -Xmx1g" # 测试环境 1G 足够 ports: - containerPort: 9200 name: http - containerPort: 9300 name: transport volumeMounts: - name: data mountPath: /usr/share/elasticsearch/data # 探针(可选,加快感知) readinessProbe: httpGet: path: /_cluster/health port: 9200 initialDelaySeconds: 20 periodSeconds: 10 livenessProbe: httpGet: path: /_cluster/health port: 9200 initialDelaySeconds: 60 periodSeconds: 30 # ✅ ES 9 默认非 root 运行,必须设置 securityContext: runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 # 腾讯云 CBS 需要 RWO,单节点没问题 volumes: - name: data persistentVolumeClaim: claimName: es-data-pvc --- # 单独创建 PVC(StatefulSet 用 volumeClaimTemplates 更规范,但单节点直接 PVC 更直观) apiVersion: v1 kind: PersistentVolumeClaim metadata: name: es-data-pvc namespace: es-test spec: accessModes: - ReadWriteOnce storageClassName: cbs # 👈 腾讯云默认存储类(如用高性能 SSD 改为 cbs-premium) resources: requests: storage: 20Gi # 测试够用,可调小如 10Gi