k8s安装elasticsearch集群

这篇具有很好参考价值的文章主要介绍了k8s安装elasticsearch集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 deployed
  namespace: 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: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: es-ns
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: 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 deployed
  namespace: 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 deployed
  namespace: es-ns
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: es-ns
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

3.3 创建NFS存储分配器

# es-nfs-client-provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  namespace: es-ns
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: quay.io/external_storage/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            # 存储分配器名称
            - name: PROVISIONER_NAME
              value: es-nfs-provisioner
            # NFS服务器地址,设置为自己的IP
            - name: NFS_SERVER
              value: 192.168.108.100
            # NFS共享目录地址
            - name: NFS_PATH
              value: /data/es
      volumes:
        - name: nfs-client-root
          nfs:
            # 设置为自己的IP
            server: 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-storage
  namespace: es-ns

# 存储分配器的名称
# 对应“es-nfs-client-provisioner.yaml”文件中env.PROVISIONER_NAME.value
provisioner: es-nfs-provisioner

# 允许pvc创建后扩容
allowVolumeExpansion: True

parameters:
  # 资源删除策略,“true”表示删除PVC时,同时删除绑定的PV
  archiveOnDelete: "true"

4 创建es服务

# es-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: es-cluster-svc
  namespace: es-ns
spec:
  selector:
    # 注意一定要与"es-cluster.yaml"中spec.selector.matchLabels相同
    app: es-net-data

  # 设置服务类型
  type: NodePort
  ports:
    - name: rest
      # 服务端口
      port: 9200
      # 应用端口(Pod端口)
      targetPort: 9200
      # 映射到主机的端口,端口范围是30000~32767
      nodePort: 32000

5 创建es控制器

# es-cluster.yaml
apiVersion: apps/v1

# 设置控制器
kind: StatefulSet
metadata:
  name: es-cluster
  namespace: es-ns

spec:
  # 必须设置
  serviceName: es-cluster-svc

  # 设置副本数
  replicas: 3

  # 设置选择器
  selector:
    # 设置标签
    matchLabels:
      app: es-net-data
  template:
    metadata:
      # 此处必须要与上面的matchLabels相同
      labels: 
        app: es-net-data
    spec:
      # 初始化容器
      # 初始化容器的作用是在应用容器启动之前做准备工作,每个init容器都必须在下一个启动之前成功完成
      initContainers:
        - name: increase-vm-max-map
          image: busybox:1.32
          command: ["sysctl", "-w", "vm.max_map_count=262144"]
          securityContext:
            privileged: true
        - name: increase-fd-ulimit
          image: busybox:1.32
          command: ["sh", "-c", "ulimit -n 65536"]
          securityContext:
            privileged: true

      # 初始化容器结束后,才能继续创建下面的容器
      containers:
        - name: es-container
          image: elasticsearch:7.6.2
          ports:
            # 容器内端口
            - name: rest
              containerPort: 9200
              protocol: TCP

          # 限制CPU数量
          resources:
            limits:
              cpu: 1000m
            requests:
              cpu: 100m

          # 设置挂载目录
          volumeMounts:
            - name: es-data
              mountPath: /usr/share/elasticsearch/data

          # 设置环境变量
          env:
            # 自定义集群名
            - name: cluster.name
              value: k8s-es
            # 定义节点名,使用metadata.name名称
            - name: node.name
              valueFrom:
                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_nodes
              value: "2"

            # 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点
            # 如果discovery.seed_hosts的值是一个域名,且该域名解析到多个IP地址,那么es将处理其所有解析的IP地址。
            - name: discovery.seed_hosts
              value: "es-cluster-svc"

            # 配置内存
            - name: ES_JAVA_OPTS
              value: "-Xms1g -Xmx1g"
            - name: network.host
              value: "0.0.0.0"

  volumeClaimTemplates:
    - metadata:
        # 对应容器中volumeMounts.name
        name: es-data
        labels:
          app: es-volume
      spec:
        # 存储卷可以被单个节点读写
        accessModes: [ "ReadWriteOnce" ]

        # 对应es-nfs-storage-class.yaml中的metadata.name
        storageClassName: es-nfs-storage

        # 申请资源的大小
        resources:
          requests:
            storage: 10Gi

6 截图

集群节点

k8s elasticsearch,微服务,Linux服务器,elasticsearch,kubernetes

 

服务端口访问

k8s elasticsearch,微服务,Linux服务器,elasticsearch,kubernetes

节点访问

k8s elasticsearch,微服务,Linux服务器,elasticsearch,kubernetes

 

 NFS目录

k8s elasticsearch,微服务,Linux服务器,elasticsearch,kubernetes文章来源地址https://www.toymoban.com/news/detail-519766.html

到了这里,关于k8s安装elasticsearch集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S集群安装与部署(Linux系统)

    一、环境说明:CentOS7、三台主机(Master:10.0.0.132、Node1:10.0.0.133、Node2:10.0.0.134) 二、准备环境: 映射 关闭防火墙 三、etcd集群配置 安装etcd(Master) 修改etcd配置文件/etc/etcd/etcd.conf(Master) 安装K8S节点组件、etcd、flannel以及docker(Node1和Node2) 修改etcd配置文件/etc/etcd/et

    2024年02月11日
    浏览(45)
  • Amazon Linux2使用kubeadm部署安装K8S集群

    在AWS上启动3台Amazon Linux2的服务器,服务器配置为2vcpu 和2GB内存 1. 修改主机名(可选步骤) 2.导入k8s的yum仓库密钥 3. 配置kubernetes源 4. 部署安装kubeadm、kubectl、docker,并且启动docker 5. 在master节点上执行初始化 具体初始化过程如下 [init] Using Kubernetes version: v1.27.1 [preflight] Runni

    2024年02月06日
    浏览(47)
  • 在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群

    在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群 在内网项目中需要安装K8S集群,经过调研,选择使用Kuboard-Spray工具搭建K8S集群,降低学习成本,提高安装效率。 为了简化安装使用集群的过程,搭建了私有yum源仓库和harbor私有镜像仓库。 详细参考文章: 本地yum源仓

    2024年04月10日
    浏览(50)
  • k8s集群部署elasticsearch集群和elasticsearch集群设置用户密码

    目录 一、背景: 二、部署elasticsearch集群: 1、部署elasticsearch集群: 2、验证elasticsearch集群是否正常:  三、部署elasticsearch集群并设置用户密码 1、生产elastic集群所需的证书: 2、重新建构elasticsearch镜像: 3、部署elasticsearch集群: 4、设置elasticsearch集群的密码: 5、测试验证

    2024年04月13日
    浏览(39)
  • 学习笔记十三:云服务器通过Kubeadm安装k8s1.25,供后续试验用

    podSubnet(pod网段) 10.244.0.0/16 serviceSubnet(service网段): 10.96.0.0/12 实验环境规划: 操作系统:centos7.5 配置: 2Gib内存/4vCPU/50G硬盘 修改主机名 配置yum源 关闭防火墙 关闭selinux 配置时间同步 配置主机 hosts 文件,相互之间通过主机名互相访问 192.168.40.180 为你的内网IP 修改机器内

    2024年02月15日
    浏览(41)
  • 基于Centos:服务器基础环境安装: JDK、Maven、Python、Go、Docker、K8s

    创建用户 首先设置hostname 和hosts文件 配置防火墙和网络 安装kubeadm 主节点初始化 主节点安装网络插件 从节点执行主节点初始化完成后输出的token信息加入主节点即可;

    2024年02月12日
    浏览(48)
  • 本地k8s集群搭建保姆级教程(3)-安装k8s集群

    1.1 增加镜像替换脚本 注意:请在master机器上执行 添加脚本内容: 1.2 查看k8s版本 1.3 执行脚本 2.1 初始化master节点 在master机器上执行如下命令: 说明: –apiserver-advertise-address= 你master节点的ip 看到如下内容,说明master节点初始化成功 图片中最后一行记得要保存起来,worker节

    2024年02月15日
    浏览(41)
  • 使用Prometheus对k8s集群外的Elasticsearch进行监控

    本文介绍了使用Prometheus对k8s集群外的elasticsearch进行监控,这里Prometheus是使用operator部署于k8s集群中,相较于进程部署或docker部署的Prometheus,部署过程更为复杂,不能通过直接修改配置文件的方式增加job,而需要采用k8s的方式进行配置。 配置步骤为: 1,增加endpoint和service,

    2024年02月04日
    浏览(56)
  • 在k8s集群中搭建elasticsearch+kibana+flentd日志系统

    在离线环境部署一套日志采集系统我采用的是elasticsearch+kibana+flentd日志系统 yaml文件如下: apiVersion: v1 kind: Namespace metadata: name: logging kind: Service apiVersion: v1 metadata: name: elasticsearch namespace: logging labels: app: elasticsearch spec: selector: app: elasticsearch clusterIP: None ports: - port: 9200 name: res

    2024年02月16日
    浏览(38)
  • K8S集群安装

    1、检查操作系统的版本 2、主机名解析 为了方便后面集群节点间的直接调用,在这配置一下主机名解析,企业中推荐使用内部DNS服务器 3、时间同步 kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间。 企业中建议配置内部的时间同步服务器

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包