helm導入前のElasticsearchのインストールに関する調査資料!

Elastic Stack構築

ネームスペース"elastic-system"作成

kubectl create namespace elastic-system

Elasticsearch

es.yaml

apiVersion: apps/v1  # APIのバージョンを指定
kind: Deployment  # Kubernetesのリソース種別を指定(この場合はDeployment)
metadata:
  name: elasticsearch  # リソースの名前
  namespace: elastic-system  # ネームスペースを指定
spec:
  selector:
    matchLabels:
      app: elasticsearch  # このDeploymentが管理するPodが持つべきラベル
  replicas: 3  # Podのレプリカ数(奇数が望ましい)
  template:
    metadata:
      labels:
        app: elasticsearch  # Podに割り当てるラベル
    spec:
      containers:
      - name: elasticsearch  # コンテナの名前
        image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1  # 使用するDockerイメージ
        resources:
          limits:
            memory: "2Gi"  # メモリリミット
            cpu: "1000m"  # CPUリミット(ミリコア単位)
        ports:
        - containerPort: 9200  # コンテナが公開するポート
          name: es-http
        env:
        - name: discovery.type  # 環境変数
          value: "single-node"  # single-nodeディスカバリモードでElasticsearchを実行
---
apiVersion: v1  # APIのバージョンを指定
kind: Service  # Kubernetesのリソース種別を指定(この場合はService)
metadata:
  name: elasticsearch  # リソースの名前
spec:
  selector:
    app: elasticsearch  # このServiceが対象とするPodのラベル
  ports:
  - port: 9200  # Serviceが公開するポート
    protocol: TCP  # 使用するプロトコル
    targetPort: es-http  # Podのポートにマッピング
kubectl apply -f es.yaml -n elastic-systemを実行 kubectl get pods -n elastic-sytem,kubectl get serviceで確認

Kibana

kb.yaml

apiVersion: apps/v1  # APIのバージョンを指定
kind: Deployment  # リソースの種類を指定
metadata:
  name: kibana  # リソースの名前
  namespace: elastic-system  # ネームスペースを指定
spec:
  selector:
    matchLabels:
      app: kibana  # このDeploymentが管理するPodが持つべきラベル
  replicas: 1  # レプリカ数
  template:
    metadata:
      labels:
        app: kibana  # Podに割り当てるラベル
    spec:
      containers:
      - name: kibana  # コンテナの名前
        image: docker.elastic.co/kibana/kibana:7.10.1  # 使用するDockerイメージ
        resources:
          limits:
            memory: "2Gi"  # メモリリミット
            cpu: "500m"  # CPUリミット
        ports:
        - containerPort: 5601  # コンテナが公開するポート
          name: kibana-http
---
apiVersion: v1  # APIのバージョンを指定
kind: Service  # リソースの種類を指定
metadata:
  name: kibana  # リソースの名前
spec:
  selector:
    app: kibana  # このServiceが対象とするPodのラベル
  ports:
  - port: 5601  # Serviceが公開するポート
    protocol: TCP  # 使用するプロトコル
    targetPort: kibana-http  # Podのポートにマッピング
kubectl apply -f kb.yaml -n elastic-systemを実行 kubectl get pods -n elastic-sytem,kubectl get serviceで確認

Filebeat

fb.yaml

apiVersion: apps/v1  # APIのバージョンを指定
kind: DaemonSet  # リソースの種類を指定(この場合はDaemonSet)
metadata:
  name: filebeat  # リソースの名前
  namespace: elastic-system  # ネームスペースを指定
spec:
  selector:
    matchLabels:
      app: filebeat  # このDaemonSetが管理するPodが持つべきラベル
  template:
    metadata:
      labels:
        app: filebeat  # Podに割り当てるラベル
    spec:
      containers:
      - name: filebeat  # コンテナの名前
        image: docker.elastic.co/beats/filebeat:7.10.1  # 使用するDockerイメージ
        args: [
          "-c", "/etc/filebeat/filebeat.yml",  # Filebeatの設定ファイルへのパス
          "-e",  # エラーを標準出力に出力
        ]
        volumeMounts:
        - name: config  # ボリューム名
          mountPath: /etc/filebeat/filebeat.yml  # マウントパス
          subPath: filebeat.yml  # ConfigMapからマウントするファイル
        - name: varlog  # ログファイルのあるボリューム
          mountPath: /var/log  # ログファイルのマウントパス
      volumes:
      - name: config  # ConfigMapから設定をマウント
        configMap:
          name: filebeat-config  # 使用するConfigMapの名前
      - name: varlog  # ホストのログディレクトリ
        hostPath:
          path: /var/log  # ホスト上のパス
kubectl apply -f fb.yaml -n elastic-systemを実行 kubectl get pods -n elastic-sytem,kubectl get serviceで確認

Logstash

ls.yaml

apiVersion: apps/v1  # APIのバージョンを指定
kind: Deployment  # リソースの種類を指定
metadata:
  name: logstash  # リソースの名前
  namespace: elastic-system  # ネームスペースを指定
spec:
  selector:
    matchLabels:
      app: logstash  # このDeploymentが管理するPodが持つべきラベル
  replicas: 1  # レプリカ数
  template:
    metadata:
      labels:
        app: logstash  # Podに割り当てるラベル
    spec:
      containers:
      - name: logstash  # コンテナの名前
        image: docker.elastic.co/logstash/logstash:7.10.1  # 使用するDockerイメージ
        ports:
        - containerPort: 5044  # コンテナが公開するポート
        resources:
          limits:
            memory: "2Gi"  # メモリリミット
            cpu: "1000m"  # CPUリミット
---
apiVersion: v1  # APIのバージョンを指定
kind: Service  # リソースの種類を指定
metadata:
  name: logstash  # リソースの名前
spec:
  selector:
    app: logstash  # このServiceが対象とするPodのラベル
  ports:
  - port: 5044  # Serviceが公開するポート
    protocol: TCP  # 使用するプロトコル
    targetPort: 5044  # Podのポートにマッピング
kubectl apply -f ls.yaml -n elastic-systemを実行 kubectl get pods -n elastic-sytem,kubectl get serviceで確認

追記!helm導入時のelasticsearchインストールコマンド

Elasticsearchのインストール

  • helm repo add elastic https://helm.elastic.co elastic公式のhelmリポジトリを追加
  • helm repo update 追加したリポジトリの情報を最新の状態にして新しいチャートやバージョンの情報を取得
  • helm install elasticsearch elastic/elasticsearch --namespace elastic-system --create-namespace ネームスペース"elastic-system"を作成し,elasticsearchをインストール
  • kubectl get pods --namespace elastic-system -l app=elasticsearch elasticsearchのpodが正常に起動しているか確認
  • kubectl port-forward svc/elasticsearch-master 9200:9200 --namespace elastic-system curl http://localhost:9200/_cluster/health elasticsearchのクラスターヘルスを確認

Kibanaのインストール

  • helm install kibana elastic/kibana --namespace elastic-system --set elasticsearchHosts=http://elasticsearch-master:9200 kibanaをインストールし,elasticsearchサーバーのホストとしてhttp://elasticsearch-master:9200を指定
  • kubectl get pods --namespace elastic-sytem -l app=kibana podが正常に起動しているか確認
  • kubectl port-forward svc/kibana-kibana 5601:5601 --namespace elastic-system ブラウザで http://localhost:5601 にアクセスして,Kibana のダッシュボードが表示されることを確認

Logstashのインストール

  • helm install logstash elastic/logstash --namespace elastic-system logstashをインストール
  • kubectl get pods --namespace elastic-sytem -l app=logstash podが正常に起動しているか確認

マウントパスの変更!!!!

感想・ひとこと

helmでやってみようかなと考えたのでこのファイルはいったんお蔵入り.なかなか時間かかったからちょっと悔しい...