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.coelastic公式の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=elasticsearchelasticsearchのpodが正常に起動しているか確認kubectl port-forward svc/elasticsearch-master 9200:9200 --namespace elastic-system curl http://localhost:9200/_cluster/healthelasticsearchのクラスターヘルスを確認
Kibanaのインストール¶
helm install kibana elastic/kibana --namespace elastic-system --set elasticsearchHosts=http://elasticsearch-master:9200kibanaをインストールし,elasticsearchサーバーのホストとしてhttp://elasticsearch-master:9200を指定kubectl get pods --namespace elastic-sytem -l app=kibanapodが正常に起動しているか確認kubectl port-forward svc/kibana-kibana 5601:5601 --namespace elastic-systemブラウザで http://localhost:5601 にアクセスして,Kibana のダッシュボードが表示されることを確認
Logstashのインストール¶
helm install logstash elastic/logstash --namespace elastic-systemlogstashをインストールkubectl get pods --namespace elastic-sytem -l app=logstashpodが正常に起動しているか確認
マウントパスの変更!!!!¶
感想・ひとこと¶
helmでやってみようかなと考えたのでこのファイルはいったんお蔵入り.なかなか時間かかったからちょっと悔しい...