開発運用

Kubernetes EFKスタックのセットアップ

EFKスタック(Elasticsearch, Fluentd, Kibana)をKubernetes環境でセットアップするための手順は、ログ管理において非常に強力なソリューションを提供します。ここでは、Kubernetes上でEFKスタックをセットアップするための詳細かつ包括的なガイドを提供します。

EFKスタックの構成要素

EFKスタックは、3つの主要なコンポーネントで構成されています:

  1. Elasticsearch:分散型の検索エンジンで、ログデータをインデックス化し、検索および分析を行うためのデータストレージを提供します。
  2. Fluentd:ログの収集、処理、転送を行うデータ収集ツール。Kubernetes環境で生成されたログを収集し、Elasticsearchに転送します。
  3. Kibana:Elasticsearchのデータを可視化するためのダッシュボードツール。Fluentdが送信したログデータを視覚的に表示します。

Kubernetes上でEFKスタックをセットアップする手順

以下に示すのは、Kubernetesクラスター上にEFKスタックをデプロイするための基本的な手順です。

1. Elasticsearchのデプロイ

ElasticsearchはKubernetesクラスタにおいてStatefulSetを使用してデプロイされることが一般的です。これにより、永続的なストレージとスケーラビリティが提供されます。

まず、elasticsearch-deployment.yamlというマニフェストファイルを作成します。

yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: elasticsearch labels: app: elasticsearch spec: serviceName: "elasticsearch" replicas: 3 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0 resources: limits: memory: 2Gi cpu: 1 requests: memory: 1Gi cpu: 0.5 env: - name: discovery.type value: single-node - name: cluster.name value: "elasticsearch-cluster" volumeMounts: - name: elasticsearch-data mountPath: /usr/share/elasticsearch/data volumes: - name: elasticsearch-data persistentVolumeClaim: claimName: elasticsearch-pvc --- apiVersion: v1 kind: Service metadata: name: elasticsearch spec: clusterIP: None ports: - port: 9200 targetPort: 9200 selector: app: elasticsearch

次に、Elasticsearch用の永続ボリューム(PVC)を作成します。

yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: elasticsearch-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi

これらのマニフェストを適用して、ElasticsearchをKubernetesにデプロイします。

bash
kubectl apply -f elasticsearch-deployment.yaml kubectl apply -f elasticsearch-pvc.yaml

2. Fluentdのデプロイ

次に、Fluentdを使用してログを収集し、Elasticsearchに転送します。Fluentdのコンフィグレーションは、ログの収集先や処理方法を定義します。

FluentdのConfigMapを作成します。fluentd-configmap.yamlを以下のように設定します。

yaml
apiVersion: v1 kind: ConfigMap metadata: name: fluentd-config namespace: kube-system data: fluentd.conf: | @type tail tag kubernetes.* path /var/log/containers/*.log pos_file /var/log/fluentd-containers.log.pos format json kubernetes.**> @type elasticsearch host elasticsearch port 9200 logstash_format true logstash_prefix kubernetes-logs

次に、Fluentdのデプロイメントを作成します。fluentd-deployment.yamlを以下のように設定します。

yaml
apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: kube-system spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: containers: - name: fluentd image: fluent/fluentd-kubernetes-daemonset:v1.12-debian-elasticsearch7-1.0 volumeMounts: - name: config-volume mountPath: /fluentd/etc subPath: fluentd.conf - name: varlog mountPath: /var/log volumes: - name: config-volume configMap: name: fluentd-config - name: varlog hostPath: path: /var/log type: Directory

このマニフェストを適用することで、FluentdがKubernetesの各ノードで動作し、ログをElasticsearchに送信するようになります。

bash
kubectl apply -f fluentd-configmap.yaml kubectl apply -f fluentd-deployment.yaml

3. Kibanaのデプロイ

KibanaはElasticsearchのデータを可視化するために使用されます。Kibanaは通常、Deploymentとしてデプロイされ、Serviceを通じてアクセスできるように設定します。

kibana-deployment.yamlを作成します。

yaml
apiVersion: apps/v1 kind: Deployment metadata: name: kibana spec: replicas: 1 selector: matchLabels: app: kibana template: metadata: labels: app: kibana spec: containers: - name: kibana image: docker.elastic.co/kibana/kibana:7.10.0 ports: - containerPort: 5601 env: - name: ELASTICSEARCH_URL value: "http://elasticsearch:9200" --- apiVersion: v1 kind: Service metadata: name: kibana spec: ports: - port: 5601 selector: app: kibana

Kibanaをデプロイします。

bash
kubectl apply -f kibana-deployment.yaml

Kibanaが正常に動作していれば、Kibanaのダッシュボードにアクセスすることができます。Kubernetes環境におけるServiceのポートフォワーディングを使って、ローカルマシンからアクセスできます。

bash
kubectl port-forward service/kibana 5601:5601

ブラウザで http://localhost:5601 にアクセスすると、Kibanaのインターフェースが表示されます。

4. ログの可視化

Kibanaにログインすると、Elasticsearchに格納されたログがインデックスとして表示されます。これにより、Kubernetesクラスターからのログを可視化し、分析できるようになります。Kibanaのダッシュボードを使用して、ログデータに対してクエリを実行し、様々なフィルターやグラフを作成できます。

まとめ

以上が、Kubernetes環境にEFKスタック(Elasticsearch、Fluentd、Kibana)をセットアップするための基本的な手順です。このスタックを使用することで、Kubernetesクラスター内で生成される大量のログを効率的に収集、保存、可視化することができます。ログのモニタリングと分析は、運用の改善やトラブルシューティングに非常に役立ちます。

Back to top button