2020年9月6日日曜日

k8s / Fluentd / Elasticsearch /Kibana

k8sにて、Fluentd / Elasticsearch /Kibanaの導入方法について記載する

参照:

https://mherman.org/blog/logging-in-kubernetes-with-elasticsearch-Kibana-fluentd/



1)namespaceを作成します。


kubectl create namespace logging





■Elasticsearch


1)elasticsearchのyamlを作成する。


vi elastic.yaml

======================

apiVersion: apps/v1

kind: Deployment

metadata:

  name: elasticsearch

spec:

  selector:

    matchLabels:

      component: elasticsearch

  template:

    metadata:

      labels:

        component: elasticsearch

    spec:

      containers:

      - name: elasticsearch

        image: docker.elastic.co/elasticsearch/elasticsearch:6.5.4

        env:

        - name: discovery.type

          value: single-node

        ports:

        - containerPort: 9200

          name: http

          protocol: TCP

        resources:

          limits:

            cpu: 500m

            memory: 4Gi

          requests:

            cpu: 500m

            memory: 4Gi


---


apiVersion: v1

kind: Service

metadata:

  name: elasticsearch

  labels:

    service: elasticsearch

spec:

  type: NodePort

  selector:

    component: elasticsearch

  ports:

  - port: 9200

    targetPort: 9200

============================



2)デプロイを行う

kubectl create -f kibana.yaml -n logging






3)pod及びserviceの作成状況を確認する。








4)接続チェックを行ってみる。
















■Kibana


1)kibanaの作成を行ってみる。


vi kibana.yaml

========================

apiVersion: apps/v1

kind: Deployment

metadata:

  name: kibana

spec:

  selector:

    matchLabels:

      run: kibana

  template:

    metadata:

      labels:

        run: kibana

    spec:

      containers:

      - name: kibana

        image: docker.elastic.co/kibana/kibana:6.5.4

        env:

        - name: ELASTICSEARCH_URL

          value: http://elasticsearch:9200

        - name: XPACK_SECURITY_ENABLED

          value: "true"

        ports:

        - containerPort: 5601

          name: http

          protocol: TCP


---


apiVersion: v1

kind: Service

metadata:

  name: kibana

  labels:

    service: kibana

spec:

  type: NodePort

  selector:

    run: kibana

  ports:

  - port: 5601

    targetPort: 5601

===========================



2)kibanaのデプロイを行う。


kubectl create -f kibana.yaml -n logging






3)kibanaのpod及びserviceの作成状況の確認する














4)ブラウザにて、接続を行ってみる。


http://0.0.0.0:32712




















■Fluentd


1)fluentdの作成を行う。


vi fluentd-rbac.yaml

========================

apiVersion: v1

kind: ServiceAccount

metadata:

  name: fluentd

  namespace: kube-system


---


apiVersion: rbac.authorization.k8s.io/v1beta1

kind: ClusterRole

metadata:

  name: fluentd

  namespace: kube-system

rules:

- apiGroups:

  - ""

  resources:

  - pods

  - namespaces

  verbs:

  - get

  - list

  - watch


---


kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

  name: fluentd

roleRef:

  kind: ClusterRole

  name: fluentd

  apiGroup: rbac.authorization.k8s.io

subjects:

- kind: ServiceAccount

  name: fluentd

  namespace: kube-system

============================



2)デプロイを行う。

kubectl create -f fluentd-rbac.yaml



3)fluentdのdeamonsetの作成を行う。


vi fluentd-daemonset.yaml

=============================

apiVersion: apps/v1

kind: DaemonSet

metadata:

  name: fluentd

  namespace: kube-system

  labels:

    k8s-app: fluentd-logging

spec:

  selector:

    matchLabels:

      k8s-app: fluentd-logging

  template:

    metadata:

      labels:

        k8s-app: fluentd-logging

    spec:

      serviceAccount: fluentd

      serviceAccountName: fluentd

      tolerations:

      - key: node-role.kubernetes.io/master

        effect: NoSchedule

      containers:

      - name: fluentd

        image: fluent/fluentd-kubernetes-daemonset:v1.3-debian-elasticsearch

        env:

          - name:  FLUENT_ELASTICSEARCH_HOST

            value: "elasticsearch.logging"

          - name:  FLUENT_ELASTICSEARCH_PORT

            value: "9200"

          - name: FLUENT_ELASTICSEARCH_SCHEME

            value: "http"

          - name: FLUENT_UID

            value: "0"

        resources:

          limits:

            memory: 200Mi

          requests:

            cpu: 100m

            memory: 200Mi

        volumeMounts:

        - name: varlog

          mountPath: /var/log

        - name: varlibdockercontainers

          mountPath: /var/lib/docker/containers

          readOnly: true

      terminationGracePeriodSeconds: 30

      volumes:

      - name: varlog

        hostPath:

          path: /var/log

      - name: varlibdockercontainers

        hostPath:

          path: /var/lib/docker/containers

====================================



4)デプロイを行う。

kubectl create -f fluentd-daemonset.yaml




以降、作成したコンテナからログが転送できるか検証を行う






0 件のコメント:

コメントを投稿

php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...