1 环境简述

搭建es集群需要使用的技术如下:k8s集群、StatefulSet控制器、Service(NodePort)服务、PV、PVC、volumeClaimTemplates(存储卷申请模板)。

StatefulSet控制器创建的Pod适合用于分布式存储系统,它最大的特点是各个Pod的数据不一样,各个Pod无法使用同一个存储卷。注意StatefulSet会给所有的Pod从0开始编号,编号的规则是${statuefulset名称}-${序号}。如果StatefulSet的Pod被误删除,StatefulSet会自动重建与原来的网络标识相同的Pod,此外,Pod的启动和回收都是按照顺序进行的。

2 创建命名空间

# es-namespace.yaml
# 注意,所有的Controller、service等都需要添加到es-ns命名空间中
# 在查询相关信息时需要命名空间(参数:-n es-ns)
apiVersion: v1
kind: Namespace
metadata:name: es-ns

3 创建NFS和StorageClass

3.1 创建NFS

# 创建目录
sudo mkdir -p /data/es# 添加权限
sudo chmod 777 /data/es# 编辑文件
sudo vim /etc/exports# 添加以下内容
/data/es    192.168.108.*(rw,sync,no_subtree_check)# 重启服务
sudo service nfs-kernel-server restart# 查看共享目录
sudo showmount -e 192.168.108.100
# 返回值如下,表示创建成功
Export list for 192.168.108.100:
/data/es    192.168.108.*

3.2 设置NFS存储分配器权限

# es-nfs-client-provisioner-authority.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: es-ns
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
rules:- apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]- apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]- apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]- apiGroups: [""]resources: ["events"]verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: es-ns
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: es-ns
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: es-ns
subjects:- kind: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: es-ns
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io

3.3 创建NFS存储分配器

# es-nfs-client-provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionernamespace: es-ns
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:# 存储分配器名称- name: PROVISIONER_NAMEvalue: es-nfs-provisioner# NFS服务器地址,设置为自己的IP- name: NFS_SERVERvalue: 192.168.108.100# NFS共享目录地址- name: NFS_PATHvalue: /data/esvolumes:- name: nfs-client-rootnfs:# 设置为自己的IPserver: 192.168.108.100# 对应NFS上的共享目录path: /data/es

3.4 创建StorageClass

# es-nfs-storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: es-nfs-storagenamespace: es-ns# 存储分配器的名称
# 对应“es-nfs-client-provisioner.yaml”文件中env.PROVISIONER_NAME.value
provisioner: es-nfs-provisioner# 允许pvc创建后扩容
allowVolumeExpansion: Trueparameters:# 资源删除策略,“true”表示删除PVC时,同时删除绑定的PVarchiveOnDelete: "true"

4 创建es服务

# es-service.yaml
apiVersion: v1
kind: Service
metadata:name: es-cluster-svcnamespace: es-ns
spec:selector:# 注意一定要与"es-cluster.yaml"中spec.selector.matchLabels相同app: es-net-data# 设置服务类型type: NodePortports:- name: rest# 服务端口port: 9200# 应用端口(Pod端口)targetPort: 9200# 映射到主机的端口,端口范围是30000~32767nodePort: 32000

5 创建es控制器

# es-cluster.yaml
apiVersion: apps/v1# 设置控制器
kind: StatefulSet
metadata:name: es-clusternamespace: es-nsspec:# 必须设置serviceName: es-cluster-svc# 设置副本数replicas: 3# 设置选择器selector:# 设置标签matchLabels:app: es-net-datatemplate:metadata:# 此处必须要与上面的matchLabels相同labels: app: es-net-dataspec:# 初始化容器# 初始化容器的作用是在应用容器启动之前做准备工作,每个init容器都必须在下一个启动之前成功完成initContainers:- name: increase-vm-max-mapimage: busybox:1.32command: ["sysctl", "-w", "vm.max_map_count=262144"]securityContext:privileged: true- name: increase-fd-ulimitimage: busybox:1.32command: ["sh", "-c", "ulimit -n 65536"]securityContext:privileged: true# 初始化容器结束后,才能继续创建下面的容器containers:- name: es-containerimage: elasticsearch:7.6.2ports:# 容器内端口- name: restcontainerPort: 9200protocol: TCP# 限制CPU数量resources:limits:cpu: 1000mrequests:cpu: 100m# 设置挂载目录volumeMounts:- name: es-datamountPath: /usr/share/elasticsearch/data# 设置环境变量env:# 自定义集群名- name: cluster.namevalue: k8s-es# 定义节点名,使用metadata.name名称- name: node.namevalueFrom:fieldRef:fieldPath: metadata.name# 初始化集群时,ES从中选出master节点- name: cluster.initial_master_nodes# 对应metadata.name名称加编号,编号从0开始value: "es-cluster-0,es-cluster-1,es-cluster-2"- name: discovery.zen.minimum_master_nodesvalue: "2"# 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点# 如果discovery.seed_hosts的值是一个域名,且该域名解析到多个IP地址,那么es将处理其所有解析的IP地址。- name: discovery.seed_hostsvalue: "es-cluster-svc"# 配置内存- name: ES_JAVA_OPTSvalue: "-Xms1g -Xmx1g"- name: network.hostvalue: "0.0.0.0"volumeClaimTemplates:- metadata:# 对应容器中volumeMounts.namename: es-datalabels:app: es-volumespec:# 存储卷可以被单个节点读写accessModes: [ "ReadWriteOnce" ]# 对应es-nfs-storage-class.yaml中的metadata.namestorageClassName: es-nfs-storage# 申请资源的大小resources:requests:storage: 10Gi

6 截图

集群节点

服务端口访问

节点访问

NFS目录

k8s安装elasticsearch集群相关推荐

  1. ECK安装elasticsearch集群及es配置x-pack

    目录 ECK安装elasticsearch集群 elasticsearch安装x-pack插件 Elasticsearch Springboot 开发 ECK安装elasticsearch集群 ECK ...

  2. Kubernetes学习-K8S安装篇-集群安装网段划分

    Kubernetes学习-K8S安装篇-集群安装网段划分 1. 集群安装网段划分 2. 网段IP常用设置 3. 集群安装网段划分注意事项 1. 集群安装网段划分 集群安装时会涉及到三个网段: 宿主机网 ...

  3. Ubuntu安装Elasticsearch集群及Kibana

    1, 下载ES及Kibana https://www.elastic.co/cn/downloads/elasticsearch https://www.elastic.co/cn/downloads ...

  4. 【Docker】docker安装elasticsearch集群,Kibana安装以及开启认证

    提示: 文章目录 前言 一.Elasticsearch是什么? 二.Elasticsearch安装步骤 1.环境配置 2.系统配置修改 3.拉取镜像 4.创建挂载目录并赋权 5.安装获取elastic ...

  5. linux系统下安装elasticsearch集群踩过的坑

    公司之前用的solr发现不太好用准备替换成es于是乎开始大刀阔斧的更换搜索服务器,本着有新版本不用旧版本的原则,所以刚搭好的基础环境,又得重新部署一遍.(重要的事记得说三遍!!! 记笔记真的很重要,好 ...

  6. Centos8.4安装elasticsearch集群及es-head插件

    1.简介 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lu ...

  7. Ubuntu 安装elasticsearch集群

    环境准备 准备三台服务器搭建集群环境 node1 192.168.177.171 node2 192.168.177.172 node3 192.168.177.173 其中node1为master节 ...

  8. K8S中安装ES集群

    背景 在K8S 安装ES集群,使用 Elasticsearch (ECK) Operator 实现 官网 ### https://operatorhub.io/operator/elastic-clo ...

  9. Elasticsearch集群安装Version6.2.2

    Elasticsearch集群安装, 基于Elasticsearch6.2.2版本, 在Linux上安装Elasticsearch集群. 1.安装规划 IP HostName Service Mast ...

最新文章

  1. C语言经典例73-反向输出一个链表
  2. Scrum之 站立例会
  3. CentOS 5.4 下配置FTP服务器 [转帖]
  4. python 如何把小数变成百分数格式
  5. layui 金额数据千分位_IG神秘打野韩服数据,盲僧数据或暗示英雄池问题
  6. python爬虫记录时间_Python新手写爬虫全过程记录分析
  7. 持续集成部署Jenkins工作笔记0008---创建用于测试的Maven工程
  8. 波卡生态项目Polkalokr将在Polkastarter进行IDO
  9. 冰河木马实验(V8.4)
  10. 微信⼩程序——wxParse使⽤⽅法
  11. 谢晶:webpower中国区正在向“多渠道智能化营销”全面转型
  12. sniffer与网络执法官,p2p终结者的简单对比
  13. Excel常用快捷键与打印
  14. NO.3 微信第三方平台代创建小程序审核发布以及小程序信息(头像,名称,简介)修改 以及微信错误码 返回信息
  15. 【汇编语言实验一】用机器指令和汇编指令编程(1)
  16. 有关H5的第一章介绍
  17. 引流脚本有什么作用?怎么选引流脚本把引流效果发挥得更好?引流脚本怎么操作?
  18. Vs Code中Vue代码格式插件,Vetur、ESLint 、Prettier - Code formatter的介绍使用及相关配置
  19. Oracle 常用工具和问题分析
  20. 使用cucumber ,想把一个完整的流程,写成一个可执行的自动化测试脚本,应该如何划分 Scenario

热门文章

  1. python 二维数组心得_基于python 二维数组及画图的实例详解
  2. springboot2 springcloud Greenwich.SR3 构建微服务--1.eureka注册中心搭建
  3. Java实现小数点后保留两位
  4. 3dmax2018软件下载,3dmax2018安装教程,游戏建模必学软件!
  5. linux添加静态路由生效,linux常识:添加静态路由
  6. 分享 3 个免费的网页截图API(在线截图,自动生成缩略图)
  7. 正则表达式中的贪婪模式
  8. 器材摄影师与框架程序员
  9. 微信如何导出微信联系人?微信导出所有好友微信号
  10. 电子协会 C语言 1级 70 、 买笔方案