当前位置: 首页 > news >正文

在Kubernetes中部署一个单节点Elasticsearch

  1. Elasticsearch 有自己的高可用集群机制,不建议再用 k8s 管理
  2. 适用于临时使用一下、或者测试使用

数据存储问题

为了测试使用,我也没有用 pvc 来管理数据,而是选择了 hostpath,那么为了重启也可以正常访问数据,需要将 es 固定在一个节点上。

apiVersion: apps/v1
kind: Deployment
metadata:name: elasticsearchlabels:app: elasticsearch
spec:replicas: 1selector:matchLabels:app: elasticsearchtemplate:metadata:labels:app: elasticsearchspec:nodeSelector:kubernetes.io/hostname: iuxtcontainers:- name: elasticsearchimage: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.26env:- name: discovery.typevalue: single-node- name: ELASTIC_USERNAMEvalue: elastic- name: ELASTIC_PASSWORDvalue: "jjxkjkdgkdjgkkdjgk"- name: ES_JAVA_OPTSvalue: "-Xms1G -Xmx1G"- name: xpack.security.enabledvalue: "true"ports:- containerPort: 9200name: http- containerPort: 9300name: transportvolumeMounts:- name: datamountPath: /usr/share/elasticsearch/datavolumes:- name: datahostPath:path: /data/elasticsearchtype: DirectoryOrCreate

这里我使用 nodeSelector 指定了一个标签来选择节点。

问题

日志停留在:Created elasticsearch keystore in /usr/share/elasticsearch/config/elasticsearch.keystore
然后自动重启

到主机的 /data/elasticsearch 目录查看,是空的

这种情况是没有权限写入,用 pvc 没有这个问题,直接挂载 hostpath 就会有权限问题,因为 es 这个容器不是使用 root 运行的进程,而是用的 uid:1000 这个用户来运行的。

解决方法是:使用 init container 来修复目录权限 ,init container 太适合来做这个事情了

apiVersion: apps/v1
kind: Deployment
metadata:name: elasticsearchlabels:app: elasticsearch
spec:replicas: 1selector:matchLabels:app: elasticsearchtemplate:metadata:labels:app: elasticsearchspec:nodeSelector:kubernetes.io/hostname: iuxtinitContainers:- name: fix-permissionsimage: busyboxcommand: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]volumeMounts:- name: datamountPath: /usr/share/elasticsearch/datacontainers:- name: elasticsearchimage: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/elasticsearch:7.17.26env:- name: discovery.typevalue: single-node- name: ELASTIC_USERNAMEvalue: elastic- name: ELASTIC_PASSWORDvalue: "jjxkjkdgkdjgkkdjgk"- name: ES_JAVA_OPTSvalue: "-Xms1G -Xmx1G"- name: xpack.security.enabledvalue: "true"ports:- containerPort: 9200name: http- containerPort: 9300name: transportvolumeMounts:- name: datamountPath: /usr/share/elasticsearch/datavolumes:- name: datahostPath:path: /data/elasticsearchtype: DirectoryOrCreate

这样就解决了权限问题:

部署 kibana

---
kind: Deployment
apiVersion: apps/v1
metadata:namespace: defaultlabels:app: kibananame: kibana
spec:replicas: 1selector:matchLabels:app: kibanatemplate:metadata:labels:app: kibanaspec:containers:- name: kibanaimage: sls-registry.cn-hangzhou.cr.aliyuncs.com/kproxy/kibana:7.17.26ports:- containerPort: 5601protocol: TCPvolumeMounts:- name: kibana-configmountPath: /usr/share/kibana/configresources:limits:memory: "4Gi"cpu: "2"requests: memory: "2Gi"cpu: "2"volumes:- name: kibana-configconfigMap:name: kibana-configitems:- key: kibana.ymlpath: kibana.yml
---
apiVersion: v1
kind: ConfigMap
metadata:namespace: defaultname: kibana-config
data:kibana.yml: |server.port: 5601server.host: "0.0.0.0"elasticsearch.hosts: ["http://elasticsearch:9200"]elasticsearch.requestTimeout: 3600000elasticsearch.shardTimeout: 3600000i18n.locale: "zh-CN"elasticsearch.username: "elastic"elasticsearch.password: "jjxkjkdgkdjgkkdjgk"
---
kind: Service
apiVersion: v1
metadata:labels:app: kibananame: kibana-servicenamespace: default
spec:ports:- port: 5601targetPort: 5601selector:app: kibanatype: ClusterIP---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:namespace: defaultname: kibanaannotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/ssl-redirect: "false" #关闭SSL跳转spec:tls:- hosts:- kibana.xxxx.comsecretName: xxxx-comrules:- host: kibana.xxxx.comhttp:paths:- backend:serviceName: kibana-serviceservicePort: 5601path: /
http://www.dtcms.com/a/343660.html

相关文章:

  • 集成电路学习:什么是Camera Calibration相机标定
  • Effective C++ 条款55:熟悉Boost库
  • 8.21-8.22网络编程——词典
  • 集成电路学习:什么是Template Matching模版匹配
  • C++创建一个空类的时候,编译器会自动生成哪些函数了
  • 数据处理与统计分析 —— apply自定义函数
  • lesson44:Redis 数据库全解析:从数据类型到高级应用
  • 鸿蒙开发中的List组件详解
  • spring之自定义拦截器:HandlerInterceptor 控制请求生死权
  • Java微服务开发:从入门到精通
  • 证书只是手段:把学习变成可复用能力的路线图
  • FPGA 在情绪识别领域的护理应用(三)
  • gRPC 与 HTTP 性能对比分析
  • C++浅拷贝和深拷贝区别
  • 【华为OD-C卷-019 对称字符串 100分(python、java、c++、js、c)】
  • 【Transient-Free 3DGS】delayed densification + coarse to fine增加GS的鲁棒性
  • 【GaussDB】使用gdb定位GaussDB编译package报错
  • 图像中物体计数:基于YOLOv5的目标检测与分割技术
  • 智能编程中的智能体与 AI 应用:概念、架构与实践场景
  • Effective C++ 条款54:熟悉标准库
  • typescript常用命令选项
  • Function Call与MCP:大模型能力扩展的两条路径对比
  • CF每日4题(1500-1700)
  • 谈谈架构的内容
  • 前端别名与环境变量使用
  • AI 赋能教育变革:机遇、实践与展望
  • 基于随机森林的红酒分类与特征重要性分析
  • MySQL高可用之MHA实战
  • 【高等数学】第九章 多元函数微分法及其应用——第九节 二元函数的泰勒公式
  • 北京JAVA基础面试30天打卡14