k8s部署elk+filebeat+logstash+kafka集群(一)ES集群+kibana部署

前言:

这次是在部署后很久才想起来整理了下文档,如有遗漏见谅,期间也遇到过很多坑有些目前还没头绪希望有大佬让我学习下
一、环境准备

k8s-master013.127.10.209
k8s-master023.127.10.95
k8s-master033.127.10.66
k8s-node013.127.10.233
k8s-node023.127.33.173
harbor3.127.33.174

1、k8s各节点部署nfs

挂载目录为 /home/k8s/elasticsearch/storage

2、安装制备器Provisioner

镜像为quay.io/external_storage/nfs-client-provisioner:latest

# cat rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  namespace: default
---
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
    namespace: default
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
  namespace: default
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
  namespace: default
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io
# cat deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  namespace: default
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: 3.127.33.174:8443/kubernetes/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 3.127.10.95
            - name: NFS_PATH
              value: /home/k8s/elasticsearch/storage
      volumes:
        - name: nfs-client-root
          nfs:
            server: 3.127.10.95
            path: /home/k8s/elasticsearch/storage
# cat es-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "true"
reclaimPolicy: Retain

在这里插入图片描述

3、ES集群部署

# cat es-cluster-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: es-svc
  namespace: elk
  labels:
    app: es-cluster-svc
spec:
  selector:
    app: es
  type: ClusterIP
  clusterIP: None
  sessionAffinity: None
  ports:
  - name: outer-port
    port: 9200
    protocol: TCP
    targetPort: 9200
  - name: cluster-port
    port: 9300
    protocol: TCP
    targetPort: 9300
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: es-cluster
  namespace: elk
  labels:
    app: es-cluster
spec:
  podManagementPolicy: OrderedReady
  replicas: 3
  serviceName: es-svc
  selector:
    matchLabels:
      app: es
  template:
    metadata:
      labels:
        app: es
      namespace: elk
    spec:
      containers:
      - name: es-cluster
        image: 3.127.33.174:8443/elk/elasticsearch:8.1.0
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            memory: "16Gi"
            cpu: "200m"
        ports:
        - name: outer-port
          containerPort: 9200
          protocol: TCP
        - name: cluster-port
          containerPort: 9300
          protocol: TCP
				env:
        - name: cluster.name
          value: "es-cluster"
        - name: node.name
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
#        - name: discovery.zen.ping.unicast.hosts
        - name: discovery.seed_hosts
          value: "es-cluster-0.es-svc,es-cluster-1.es-svc,es-cluster-2.es-svc"
#        - name: discovery.zen.minimum_master_nodes
#          value: "2"
        - name: cluster.initial_master_nodes
          value: "es-cluster-0"
        - name: ES_JAVA_OPTS
          value: "-Xms1024m -Xmx1024m"
        - name: xpack.security.enabled
          value: "false"
        volumeMounts:
        - name: es-volume
          mountPath: /usr/share/elasticsearch/data
      initContainers:
      - name: fix-permissions
        image: 3.127.33.174:8443/elk/busybox:latest
        imagePullPolicy: IfNotPresent
#       uid,gid为1000
				command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
        securityContext:
          privileged: true
        volumeMounts:
        - name: es-volume
          mountPath: /usr/share/elasticsearch/data
      - name: increase-vm-max-map
        image: 3.127.33.174:8443/elk/busybox:latest
        imagePullPolicy: IfNotPresent
        command: ["sysctl","-w","vm.max_map_count=655360"]
        securityContext:
          privileged: true
      - name: increase-ulimit
        image: 3.127.33.174:8443/elk/busybox:latest
        imagePullPolicy: IfNotPresent
        command: ["sh","-c","ulimit -n 65536"]
        securityContext:
          privileged: true
  volumeClaimTemplates:
  - metadata:
      name: es-volume
      namespace: elk
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: "150Gi"
      storageClassName: managed-nfs-storage

 kubectl get pods -n elk -o wide

至此es集群正常部署完毕

4、kibana部署

# cat kibana.yaml

apiVersion: v1
kind: Service
metadata:
  name: kibana-svc
  namespace: elk
  labels:
    app: kibana-svc
spec:
  selector:
    app: kibana-8.1.0
  ports:
  - name: kibana-port
    port: 5601
    protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana-deployment
  namespace: elk
  labels:
    app: kibana-dep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana-8.1.0
  template:
    metadata:
      name: kibana
      labels:
        app: kibana-8.1.0
    spec:
      containers:
      - name: kibana
        image: 3.127.33.174:8443/elk/kibana:8.1.0
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: "1000m"
          requests:
            cpu: "200m"
        ports:
        - name: kibana-web
          containerPort: 5601
          protocol: TCP
        env:
        - name: ELASTICSEARCH_HOSTS
          value: http://es-svc:9200
        readinessProbe:
          initialDelaySeconds: 10
          periodSeconds: 10
          httpGet:
            port: 5601
          timeoutSeconds: 100
---
# 部署ingress通过域名来访问kibana

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kibana-ingress
  namespace: elk
  labels:
    app: kibana-ingress
spec:
  ingressClassName: nginx
  defaultBackend:
    service:
      name: kibana-svc
      port:
        name: kibana-port
  rules:
  - host: jszw.kibana.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kibana-svc
            port:
              name: kibana-port

kubectl get pods -n elk -o wide
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
ELKElasticsearchLogstashKibana)是一个开源的日志管理和分析平台,能够帮助企业收集、存储、搜索、分析和可视化各种类型的日志数据。而Kafka是一个高吞吐量的分布式消息队列系统,可以用来收集和传输大规模的日志数据。Reyslog是一个开源的日志收集器,可以帮助企业从各种不同的数据源中收集日志数据。Filebeat是一个轻量级的日志收集工具,可以帮助企业从各种不同的文件中收集日志数据。 以下是ELK+kafka+reyslog+filebeat企业级部署的步骤: 1. 安装和配置ElasticsearchLogstashKibana,并确保它们能够正常运行。可以使用docker-compose等工具来简化部署过程。 2. 安装和配置Kafka,并创建一个主题(topic)用于存储日志数据。 3. 安装和配置Reyslog,并将其配置为从各种不同的数据源中收集日志数据,并将其发送到Kafka主题(topic)中。 4. 安装和配置Filebeat,并将其配置为从各种不同的文件中收集日志数据,并将其发送到Kafka主题(topic)中。 5. 在Kibana中创建一个索引(index),并定义一个包含所有必需字段的映射(mapping)。然后,使用Logstash来将从Kafka主题(topic)中接收到的日志数据转换为适合索引(index)的格式,并将其存储在Elasticsearch中。 6. 在Kibana中创建一个仪表板(dashboard),并使用其可视化功能来呈现和分析日志数据。可以使用各种不同的可视化插件来创建自定义可视化效果。 7. 部署整个系统,并定期监控其性能和可用性,以确保其正常运行。 总之,ELK+kafka+reyslog+filebeat企业级部署需要进行一系列复杂的配置和设置,需要具备一定的技术知识和实践经验。建议企业可以考虑使用专业的日志管理和分析平台,如Splunk等,以简化部署和管理过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值