Kubernetes(k8s)+fluentd+Elasticsearch(ES)+Kibana的集群日志管理

文章目录

        • 1.在GitHub里面找到yaml格式的文件
          • 1-1.GitHub的项目地址:
          • 1-2.图片标注的六个文件就是部署文件
          • 1-3.部署Kubernetes(k8s),这里就不重复写了,文章的地址
        • 2.映射镜像库,方便pull(拉)镜像
        • 3.编辑yaml格式的六个部署文件
          • 3-1.先创建一个文件夹,用于存放六个部署文件
          • 3-2.编辑es-service.yaml
          • 3-3.编辑es-statefulset.yaml
          • 3-4.编辑fluentd-es-configmap.yaml,这个文件不用修改
          • 3-5.编辑fluentd-es-ds.yaml ,这个文件不用修改
          • 3-6.编辑kibana-deployment.yaml
          • 3-7.编辑kibana-service.yaml
        • 4.部署集群日志管理
        • 5.浏览器的查询IP:端口

1.在GitHub里面找到yaml格式的文件


1-1.GitHub的项目地址:
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch

1-2.图片标注的六个文件就是部署文件

Kubernetes(k8s)+fluentd+Elasticsearch(ES)+Kibana的集群日志管理_第1张图片

1-3.部署Kubernetes(k8s),这里就不重复写了,文章的地址
https://blog.csdn.net/qq_41709494/article/details/103658638

2.映射镜像库,方便pull(拉)镜像

vi /etc/hosts
52.5.185.86 registry-1.docker.io

3.编辑yaml格式的六个部署文件


3-1.先创建一个文件夹,用于存放六个部署文件
mkdir  /root/addons

3-2.编辑es-service.yaml
vi /root/addons/es-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch-logging
  namespace: kube-system
  labels:
    k8s-app: elasticsearch-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "Elasticsearch"
spec:
  ports:
  - port: 9200
    protocol: TCP
    targetPort: db
  selector:
    k8s-app: elasticsearch-logging
  type: NodePort

3-3.编辑es-statefulset.yaml
vi   /root/addons/es-statefulset.yaml 
# RBAC authn and authz
apiVersion: v1
kind: ServiceAccount
metadata:
  name: elasticsearch-logging
  namespace: kube-system
  labels:
    k8s-app: elasticsearch-logging
    addonmanager.kubernetes.io/mode: Reconcile
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: elasticsearch-logging
  labels:
    k8s-app: elasticsearch-logging
    addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups:
  - ""
  resources:
  - "services"
  - "namespaces"
  - "endpoints"
  verbs:
  - "get"
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: kube-system
  name: elasticsearch-logging
  labels:
    k8s-app: elasticsearch-logging
    addonmanager.kubernetes.io/mode: Reconcile
subjects:
- kind: ServiceAccount
  name: elasticsearch-logging
  namespace: kube-system
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: elasticsearch-logging
  apiGroup: ""
---
# Elasticsearch deployment itself
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch-logging
  namespace: kube-system
  labels:
    k8s-app: elasticsearch-logging
    version: v7.4.2
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  serviceName: elasticsearch-logging
  replicas: 2
  selector:
    matchLabels:
      k8s-app: elasticsearch-logging
      version: v7.4.2
  template:
    metadata:
      labels:
        k8s-app: elasticsearch-logging
        version: v7.4.2
    spec:
      serviceAccountName: elasticsearch-logging
      containers:
      - image: quay.io/fluentd_elasticsearch/elasticsearch:v7.4.2
        name: elasticsearch-logging
        imagePullPolicy: Always
        resources:
          # need more cpu upon initialization, therefore burstable class
          limits:
            cpu: 1000m
            memory: 3Gi
          requests:
            cpu: 100m
            memory: 3Gi
        ports:
        - containerPort: 9200
          name: db
          protocol: TCP
        #- containerPort: 9300
        # name: transport
        #  protocol: TCP
        #livenessProbe:
        #  tcpSocket:
        #    port: transport
        #  initialDelaySeconds: 5
        #  timeoutSeconds: 10
        #readinessProbe:
        #  tcpSocket:
        #    port: transport
        #  initialDelaySeconds: 5
        #  timeoutSeconds: 10
        volumeMounts:
        - name: elasticsearch-logging
          mountPath: /data
        env:
        - name: "NAMESPACE"
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
      volumes:
      - name: elasticsearch-logging
        emptyDir: {}
      # Elasticsearch requires vm.max_map_count to be at least 262144.
      # If your OS already sets up this number to a higher value, feel free
      # to remove this init container.
      initContainers:
      - image: alpine:3.6
        command: ["/sbin/sysctl", "-w", "vm.max_map_count=262144"]
        name: elasticsearch-logging-init
        securityContext:
          privileged: true


3-4.编辑fluentd-es-configmap.yaml,这个文件不用修改
kind: ConfigMap
apiVersion: v1
metadata:
  name: fluentd-es-config-v0.2.0
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
data:
  system.conf: |-
    
      root_dir /tmp/fluentd-buffers/
    
    ......以下的省略

3-5.编辑fluentd-es-ds.yaml ,这个文件不用修改
apiVersion: v1
kind: ServiceAccount
metadata:
  name: fluentd-es
  namespace: kube-system
  labels:
    k8s-app: fluentd-es
    addonmanager.kubernetes.io/mode: Reconcile
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: fluentd-es
  labels:
    k8s-app: fluentd-es
    addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups:
  - ""
  resources:
  - "namespaces"
  - "pods"
  verbs:
  - "get"
  - "watch"
  - "list"
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: fluentd-es
  labels:
    k8s-app: fluentd-es
    addonmanager.kubernetes.io/mode: Reconcile
subjects:
- kind: ServiceAccount
  name: fluentd-es
  namespace: kube-system
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: fluentd-es
  apiGroup: ""
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-es-v3.0.1
  namespace: kube-system
  labels:
    k8s-app: fluentd-es
    version: v3.0.1
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    matchLabels:
      k8s-app: fluentd-es
      version: v3.0.1
  template:
    metadata:
      labels:
        k8s-app: fluentd-es
        version: v3.0.1
      # This annotation ensures that fluentd does not get evicted if the node
      # supports critical pod annotation based priority scheme.
      # Note that this does not guarantee admission on the nodes (#40573).
      annotations:
        seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
    spec:
      priorityClassName: system-node-critical
      serviceAccountName: fluentd-es
      containers:
      - name: fluentd-es
        image: quay.io/fluentd_elasticsearch/fluentd:v3.0.1
        env:
        - name: FLUENTD_ARGS
          value: --no-supervisor -q
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: config-volume
          mountPath: /etc/fluent/config.d
        ports:
        - containerPort: 24231
          name: prometheus
          protocol: TCP
        livenessProbe:
          tcpSocket:
            port: prometheus
          initialDelaySeconds: 5
          timeoutSeconds: 10
        readinessProbe:
          tcpSocket:
            port: prometheus
          initialDelaySeconds: 5
          timeoutSeconds: 10
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: config-volume
        configMap:
          name: fluentd-es-config-v0.2.0


3-6.编辑kibana-deployment.yaml
vi  /root/addons/kibana-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana-logging
  namespace: kube-system
  labels:
    k8s-app: kibana-logging
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: kibana-logging
  template:
    metadata:
      labels:
        k8s-app: kibana-logging
      annotations:
        seccomp.security.alpha.kubernetes.io/pod: 'docker/default'
    spec:
      containers:
      - name: kibana-logging
        image: docker.elastic.co/kibana/kibana-oss:7.2.0
        resources:
          # need more cpu upon initialization, therefore burstable class
          limits:
            cpu: 1000m
          requests:
            cpu: 100m
        env:
          - name: ELASTICSEARCH_HOSTS
            value: http://elasticsearch-logging:9200
          - name: SERVER_NAME
            value: kibana-logging
         # - name: SERVER_BASEPATH
         #   value: /api/v1/namespaces/kube-system/services/kibana-logging/proxy
         # - name: SERVER_REWRITEBASEPATH
         #   value: "false"
        ports:
        - containerPort: 5601
          name: ui
          protocol: TCP
        livenessProbe:
          httpGet:
            path: /api/status
            port: ui
          initialDelaySeconds: 5
          timeoutSeconds: 10
        readinessProbe:
          httpGet:
            path: /api/status
            port: ui
          initialDelaySeconds: 5
          timeoutSeconds: 10


3-7.编辑kibana-service.yaml
 vi /root/addons/kibana-service.yaml
 apiVersion: v1
kind: Service
metadata:
  name: kibana-logging
  namespace: kube-system
  labels:
    k8s-app: kibana-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "Kibana"
spec:
  ports:
  - port: 5601
    protocol: TCP
    targetPort: ui
  selector:
    k8s-app: kibana-logging
  type: NodePort                       

4.部署集群日志管理

kubectl apply -f  /root/addons/

kubectl get service -n kube-system
NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
elasticsearch-logging   NodePort    10.96.79.190           9200:30800/TCP           69m
kibana-logging          NodePort    10.96.13.117           5601:31592/TCP           69m
kube-dns                ClusterIP   10.96.0.10             53/UDP,53/TCP,9153/TCP   13d

 kubectl get deployment -n kube-system
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
kibana-logging   1/1     1            1           70m

5.浏览器的查询IP:端口

Kubernetes(k8s)+fluentd+Elasticsearch(ES)+Kibana的集群日志管理_第2张图片
Kubernetes(k8s)+fluentd+Elasticsearch(ES)+Kibana的集群日志管理_第3张图片
Kubernetes(k8s)+fluentd+Elasticsearch(ES)+Kibana的集群日志管理_第4张图片

你可能感兴趣的:(Kubernetes的学习)