热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OCP4.4部署EFK使用localvolume持久化

概述为了在生产环境中部署EFK,我们需要准备好相应的资源,如内存、持久化、固定ES节点等。固定节点,localvolume就直接支持了&#

概述

为了在生产环境中部署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 60000/TCP 12hNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/local-disks-local-diskmaker 3 3 3 3 3 11h
daemonset.apps/local-disks-local-provisioner 3 3 3 3 3 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



推荐阅读
  • k8snamespace配置cpu最大和最小限额
    世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。问:如何为namespace配置最大和最小限额&#x ... [详细]
  • linuxmint20.3 安装anaconda、换源及创建新环境
    本文用来记录linuxmint20.3安装anaconda、换源及创建新环境的过程,同时记录一些相关命令目录anaconda安装相关命令创建新环境显示问题 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • JAVA调用存储过程CallableStatement对象的方法及使用示例
    本文介绍了使用JAVA调用存储过程CallableStatement对象的方法,包括创建CallableStatement对象、传入IN参数、注册OUT参数、传入INOUT参数、检索结果和OUT参数、处理NULL值等。通过示例代码演示了具体的调用过程。 ... [详细]
  • 1.官网下载了mysql-5.7.17-win64.zip包,配置遇到很多麻烦,记录一下;2.解压后放到指定的文件夹,修改mysql-5.7.17的配置文件my-default.i ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 【编程语言之Go介绍与环境安装】
    Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。  ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 云原生SRE
    序言年底了,没有分手的朋友的赶紧分了,所谓新年新气象,年年不重样。去留无意,望看风卷残云。。。运维不会消失,但 ... [详细]
  • docker+k8s+git+jenkins
    docker+k8s+git+jenkins,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
穆羽默然
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有