概述

为了在生产环境中部署EFK,我们需要准备好相应的资源,如内存、持久化、固定ES节点等。固定节点,localvolume就直接支持了 ;大部分客户那里并没有像ceph rbd这样的存储,一般只有nas,但是nas并不能满足es,在文件系统和性能都不满足,而且es要求使用storageclass,那么从性能的角度来看,使用local-volume是比较合适的了。

Using NFS storage as a volume or a persistent volume (or via NAS such as Gluster) is not supported for Elasticsearch storage, as Lucene relies on file system behavior that NFS does not supply. Data corruption and other problems can occur.

部署 Local-volume storageclass

  • 创建local-storage项目

oc new-project local-storage
  • 安装Local Storage operator

Operators → OperatorHub → Local Storage Operator → Click Install → 选择 local-storage namespace →
点击 Subscribe.
  • 查看pod状态

# oc -n local-storage get pods
NAME                                      READY   STATUS    RESTARTS   AGE
local-storage-operator-7cd4799b4b-6bzg4   1/1     Running   0          12h
  • 给3个es节点加一块盘(我这里是sdb 50G,建议200G),然后创建 localvolume.yaml:

通过指定 nodeSelector 选择 es 节点,配置指定硬盘设备和文件系统以及 storageClass。

apiVersion: "local.storage.openshift.io/v1"
kind: "LocalVolume"
metadata:name: "local-disks"namespace: "local-storage"
spec:nodeSelector:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- worker02.ocp44.cluster1.com- worker03.ocp44.cluster1.com- worker04.ocp44.cluster1.comstorageClassDevices:- storageClassName: "local-sc"volumeMode: FilesystemfsType: xfsdevicePaths:- /dev/sdb
  • 创建

oc create -f localvolume.yaml
  • 检查pod

# oc get all -n local-storage
NAME                                          READY   STATUS    RESTARTS   AGE
pod/local-disks-local-diskmaker-7p448         1/1     Running   0          43m
pod/local-disks-local-diskmaker-grkjx         1/1     Running   0          43m
pod/local-disks-local-diskmaker-lmknj         1/1     Running   0          43m
pod/local-disks-local-provisioner-5s9nk       1/1     Running   0          43m
pod/local-disks-local-provisioner-hv42l       1/1     Running   0          43m
pod/local-disks-local-provisioner-tzlkt       1/1     Running   0          43m
pod/local-storage-operator-7cd4799b4b-6bzg4   1/1     Running   0          12hNAME                             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
service/local-storage-operator   ClusterIP   172.30.93.34   <none>        60000/TCP   12hNAME                                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/local-disks-local-diskmaker     3         3         3       3            3           <none>          11h
daemonset.apps/local-disks-local-provisioner   3         3         3       3            3           <none>          11hNAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/local-storage-operator   1/1     1            1           12hNAME                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/local-storage-operator-7cd4799b4b   1         1         1       12h
  • 查看pv

# oc get pv
NAME                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
local-pv-2337578c   50Gi       RWO            Delete           Available           local-sc                4m42s
local-pv-77162aba   50Gi       RWO            Delete           Available           local-sc                4m38s
local-pv-cc7b7951   50Gi       RWO            Delete           Available           local-sc                4m46s
  • pv 内容

oc get pv local-pv-2337578c -oyaml
apiVersion: v1
kind: PersistentVolume
metadata:annotations:pv.kubernetes.io/provisioned-by: local-volume-provisioner-worker02.ocp44.cluster1.com-e1f9a639-6872-43d7-b53c-d6255b3d7976creationTimestamp: "2020-05-25T15:29:46Z"finalizers:- kubernetes.io/pv-protectionlabels:storage.openshift.com/local-volume-owner-name: local-disksstorage.openshift.com/local-volume-owner-namespace: local-storagename: local-pv-2337578cresourceVersion: "5661501"selfLink: /api/v1/persistentvolumes/local-pv-2337578cuid: 7f72ebb4-7212-4f0f-9f1a-d0af103ed70e
spec:accessModes:- ReadWriteOncecapacity:storage: 50Gilocal:fsType: xfspath: /mnt/local-storage/local-sc/sdbnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- worker02.ocp44.cluster1.compersistentVolumeReclaimPolicy: DeletestorageClassName: local-scvolumeMode: Filesystem
status:phase: Available
  • 查看storageclass

# oc get sc
NAME                                PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-sc                            kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  11h
  • 查看storageclass内容

# oc get sc local-sc -oyaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:creationTimestamp: "2020-05-25T04:09:31Z"labels:local.storage.openshift.io/owner-name: local-diskslocal.storage.openshift.io/owner-namespace: local-storagename: local-scresourceVersion: "5273371"selfLink: /apis/storage.k8s.io/v1/storageclasses/local-scuid: 0c625dad-3879-43b1-9b0a-f0606de91e5a
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

部署 Elasticsearch Operator

Operators → OperatorHub → Elasticsearch Operator → 点击 Install →  Installation Mode 选择 All namespaces → Installed Namespace 选择 openshift-operators-redhat → 选择 Enable operator recommended cluster monitoring on this namespace → 选择一个 Update Channel and Approval Strategy →  点击 Subscribe → 验证 Operators → Installed Operators page → 确认 Elasticsearch Operator 的状态是 Succeeded.

部署 Cluster Logging Operator

Operators → OperatorHub → Cluster Logging Operators → 点击 Install → Installation Mode 选择 specific namespace on the cluster → Installed Namespace 选择 openshift-logging → 选择 Enable operator recommended cluster monitoring on this namespace → 选择一个 Update Channel and Approval Strategy → Subscribe → 去Installed Operators验证状态 → 去 Workloads → Pods 查看状态

安装EFK

Administration → Custom Resource Definitions → Custom Resource Definitions → ClusterLogging → Custom Resource Definition Overview page → Instances → click Create ClusterLogging,使用以下内容:

apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogging"
metadata:name: "instance"namespace: "openshift-logging"
spec:managementState: "Managed"logStore:type: "elasticsearch"elasticsearch:nodeCount: 3storage:storageClassName: local-scsize: 48Gresources:limits:cpu: "4"memory: "16Gi"requests:cpu: "4"memory: "16Gi"redundancyPolicy: "SingleRedundancy"visualization:type: "kibana"kibana:replicas: 1curation:type: "curator"curator:schedule: "30 3 * * *"collection:logs:type: "fluentd"fluentd: {}

es这里主要配置一下节点数量、sc名称、存储大小、资源配额(内存尽量大些),三节点下,副本模式,除了主分片,一个副本就够了,否则存储会占用很大,看具体情况了。curator这里配置每天3:30做一次清理,默认是清理30天以前的数据,具体可以配置某些索引或者某些项目索引:https://docs.openshift.com/container-platform/4.4/logging/config/cluster-logging-curator.html

补充说明1

EFK固定节点

EFK可以通过设置 taint/tolerations 或者 nodeSelector来控制节点运行在什么节点,但是我这里通过使用local-volume已经实现了节点绑定,所以就不需要再进行节点绑定了,使用taint/tolerations有个问题得注意,在给node打上taint后,有些infra pod会被驱逐,比如dns pod、machine-config-daemon pod,这些pod是没有tolerations 我们打的taint,但是查了下这些 pod 的operator没有对应 tolerations 的配置,虽然可以通过这些pod的ds直接修改,不会被还原,但是这样的做法还是不标准,有可能出问题。

  • tolerations

apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogging"
metadata:name: "instance"namespace: openshift-logging
spec:managementState: "Managed"logStore:type: "elasticsearch"elasticsearch:nodeCount: 1tolerations:- key: "logging"operator: "Exists"effect: "NoExecute"tolerationSeconds: 6000resources:limits:memory: 8Girequests:cpu: 100mmemory: 1Gistorage: {}redundancyPolicy: "ZeroRedundancy"visualization:type: "kibana"kibana:tolerations:- key: "logging"operator: "Exists"effect: "NoExecute"tolerationSeconds: 6000resources:limits:memory: 2Girequests:cpu: 100mmemory: 1Gireplicas: 1curation:type: "curator"curator:tolerations:- key: "logging"operator: "Exists"effect: "NoExecute"tolerationSeconds: 6000resources:limits:memory: 200Mirequests:cpu: 100mmemory: 100Mischedule: "*/5 * * * *"collection:logs:type: "fluentd"fluentd:tolerations:- key: "logging"operator: "Exists"effect: "NoExecute"tolerationSeconds: 6000resources:limits:memory: 2Girequests:cpu: 100mmemory: 1Gi
  • nodeSelector

apiVersion: logging.openshift.io/v1
kind: ClusterLogging....spec:collection:logs:fluentd:resources: nulltype: fluentdcuration:curator:nodeSelector:node-role.kubernetes.io/infra: ''resources: nullschedule: 30 3 * * *type: curatorlogStore:elasticsearch:nodeCount: 3nodeSelector:node-role.kubernetes.io/infra: ''redundancyPolicy: SingleRedundancyresources:limits:cpu: 500mmemory: 16Girequests:cpu: 500mmemory: 16Gistorage: {}type: elasticsearchmanagementState: Managedvisualization:kibana:nodeSelector:node-role.kubernetes.io/infra: ''proxy:resources: nullreplicas: 1resources: nulltype: kibana....

补充说明2

在固定几个节点给ES用后,这些节点还是有可能会被普通的应用 pod 所使用,所以可以给真正的应用节点打上app标签,然后通过给project 模板注入nodeSelector,这样新建的project就可以使用真正的应用节点,不用在deployment之类的配置nodeSelector了。

如果ES使用的是ceph rbd这样的存储,那么就需要使用nodeSelector或者taint了,否则es会飘。prometheus同理。

参考链接

https://docs.openshift.com/container-platform/4.4/logging/config/cluster-logging-tolerations.html

https://docs.openshift.com/container-platform/4.4/logging/cluster-logging-moving-nodes.html

https://docs.openshift.com/container-platform/4.4/applications/projects/configuring-project-creation.html

https://docs.openshift.com/container-platform/4.4/networking/configuring-networkpolicy.html#nw-networkpolicy-creating-default-networkpolicy-objects-for-a-new-project

https://access.redhat.com/solutions/4946861

OCP4.4 部署EFK-使用local-volume持久化相关推荐

  1. emptyDir、hostPath以及local volume的不同

    转载自:https://blog.csdn.net/watermelonbig/article/details/84108424 Kubernetes支持几十种类型的后端存储卷,其中有几种存储卷总是给 ...

  2. k8s部署EFK实现日志管理(mac desktop)

    网络上推荐了很多部署efk的方案,按照教程尝试很多教程,都无法使用.在学习了efk原理之后,自己搭建了一套可用的efk方案. efk方案架构这里就不详细介绍了,网上资料一大堆. 通过eck部署es和k ...

  3. 【Docker】(四)使用volume持久化Docker容器中的Redis数据

    1.前言 本系列文章记录了从0开始学习Docker的过程,Docker系列历史文章: (一)基本概念与安装使用 (二)如何使用Docker发布一个SpringBoot服务 (三)使用registry远 ...

  4. Openstack部署总结:“部署过程Error: Local ip for ovs agent must be set when tunneling is enabled”问题...

    问题叙述性说明 正在使用RDO当多节点部署测试,因为使用了一些老机器和机器类型的差异(一些HP的PC,有些DELL的PC).以下错误出现: Applying 192.168.40.107_neutro ...

  5. (转)Docker volume plugin - enabled create local volume on docker host

    原文地址:https://hub.docker.com/r/cwspear/docker-local-persist-volume-plugin/ Short Description Create n ...

  6. docker 打包mysql_基于docker部署mysql的数据持久化问题

    本人最近在使用docker部署mysql时,在持久化mysql数据时遇到了一个有趣的问题,将排查过程及思考记录在这里,以备后查. 先简单描述下我遇到的问题:在mysql容器中创建了两个数据库,然后使用 ...

  7. 嘿嘿又一数据库!redis数据库!redis部署、持久化及性能管理!

    redis数据库 一.关系数据库和非关系数据库 1.关系型数据库(SQL) 2.非关系型数据库(nosql) 3.关系型数据库和非关系型数据库区别 (1)数据存储方式不同 (2)扩展方式不同 4.非关 ...

  8. k8s之local persistent volume

    摘要:本文分析了hostPath volume缺陷,然后对local persistent volume的使用场景.基本的工作机制进行了分析,介绍了使用时的注意事项,并简单介绍local volume ...

  9. KubeOperator总体介绍(K8S集群部署管理工具)

    总体介绍⚓︎ KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划.部署和运营生产级别的 Kubernetes 集群. KubeOperator 提供可视化的 ...

  10. 深入浅出聊聊Kubernetes存储(二):搞定持久化存储

    回 顾 在本系列文章的上一篇中,我们讲到了PV,PVC,Storage Class以及Provisioner 简单回顾一下: PV在最一开始是设计成了一个需要管理员预先分配的存储块.引入Storage ...

最新文章

  1. /etc/profile ,/etc/bashrc ,~/.bash_profile,~/ .bashrc 区别与联系
  2. 多级菜单系统安装维护shell脚本实现企业级案例
  3. Jsoup抓取网页数据完成一个简易的Android新闻APP
  4. brain teasers
  5. 计算机组装维修期末考试题,2014计算机组装维修期末考试题(1)
  6. 使用 docker 构建分布式调用链跟踪框架skywalking
  7. CompletableFuture不能被打断
  8. RedisHelper帮助类
  9. Cisco路由器上传和下载IOS
  10. C语言ascii对照表
  11. m1 MacBook 进入自检模式
  12. 思维导图c语言java区别_C语言基本数据类型的思维导图
  13. 英语语法中的同位语和插入语
  14. 我的世界mysql插件_MySQL Inventory Bridge — 跨服背包[1.7-1.15]【Bukkit】
  15. rust键位失灵_用Rust写操作系统(四)——竞争条件与死锁
  16. vue中实现文字超过2行... 展开-收起(兼容ie)
  17. 有关wifi配置工具wpa_cli以及wpa_supplicant简单分析
  18. APM 飞控文档翻译2
  19. 6_商品 SPU 与 SKU
  20. 多线程并发数量设置设多少算合理

热门文章

  1. 如何实现数据持久性保障机制
  2. 安装软件提示重启计算机,安装西门子软件时提示重启电脑的解决办法
  3. Win7手工查找notepad.exe的IAT
  4. 动态域名解析服务(花生壳)
  5. 【sql】SQL3 查找当前薪水详情以及部门编号dept_no
  6. 壬戌立冬十朋十一日陪路文周朋携提祖同访后 [宋] 王洋
  7. 冬奥探秘:那些隐匿在冬奥中的“绿科技”
  8. 平面设计有哪几种设计风格,分享平面设计的12种风格
  9. 分布式事务的四种解决方案
  10. mysql 5.6 msvcr100_mysql 5.6.46 安装到winserver2012(x64) 遇到 MSVCR100.dll is missing