kubernetes デプロイメント Elasticsearch チェック

エックの紹介

Elastic Cloud on Kubernetes (ECK) は、kubernetes オペレーターに基づいて、Elasticsearch、Kibana、および APM サーバー サービスを Kubernetes クラスターに自動的にデプロイ、管理、調整できます。

ECK の機能は、Kubernetes 上での Elasticsearch と Kibana のデプロイメントを簡素化するタスクに決して限定されるわけではなく、次のようなすべての運用後の作業を簡素化することに重点を置いています。

  • 複数のクラスターの管理と監視
  • 新しいクラスターのバージョンに簡単にアップグレード
  • クラスター容量の拡張または縮小
  • クラスター構成の変更
  • ローカル ストレージの動的サイズ変更 (Elastic Local Volume、ローカル ストレージ ドライブを含む)
  • バックアップを実行する

ECK で起動されるすべての Elasticsearch クラスターはデフォルトで保護されています。つまり、最初の作成時に暗号化が有効になり、強力なデフォルトのパスワードで保護されます。

公式ウェブサイト:https ://www.elastic.co/cn/elastic-cloud-kubernetes

プロジェクトアドレス: https://github.com/elastic/cloud-on-k8s

ECKの導入

参考:

https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-quickstart.html

https://github.com/elastic/cloud-on-k8s/tree/master/config/recipes/beats

https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-volume-claim-templates.html

https://github.com/elastic/cloud-on-k8s/tree/master/config/samples

環境情報:
3 つのノードを準備します。ここでは、ポッドをスケジュールするようにマスター ノードを構成します。

[root@master01 ~]# kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
master01   Ready    master   7d    v1.18.2
node01     Ready    <none>   7d    v1.18.2
node02     Ready    <none>   7d    v1.18.2

eck 導入バージョン:eck v1.1.0

NFSストレージを準備する

eck データは永続化する必要があります。簡単なテストには emptydir タイプの一時ボリュームを使用することも、nfs や rook などの永続ストレージを使用することもできます。テストとして、docker を使用して nfs サーバーを master01 ノードに一時的にデプロイしますPVC に必要なストレージ リソースを提供します。

docker run -d 
--name nfs-server 
--privileged 
--restart always 
-p 2049:2049 
-v /nfs-share:/nfs-share 
-e SHARED_DIRECTORY=/nfs-share 
itsthenetwork/nfs-server-alpine:latest

nfs-client-provisioner をデプロイし、nfs ストレージ リソースを動的に適用します。192.168.93.11 は master01 ノードの IP アドレスです。nfsv4 バージョンの nfs.path は / として指定できます。
ここでは、helm を使用して、Alibaba Cloud Helm ウェアハウスから nfs-client-provisioner をデプロイします。

helm repo add apphub https://apphub.aliyuncs.com

helm install nfs-client-provisioner 

–set nfs.server=192.168.93.11
–set nfs.path=/
apphub/nfs-client-provisioner

作成された storageClass を表示します。デフォルト名は nfs-client です。この名前は、以下で elasticsearch をデプロイするときに使用されます。

[root@master01 ~]# kubectl get sc
NAME         PROVISIONER                            RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   cluster.local/nfs-client-provisioner   Delete          Immediate           true                   172m

すべてのノードに nfs クライアントをインストールし、rpcbind サービスを有効にします。

yum install -y nfs-utils
systemctl enable --now rpcbind

eck オペレーターをインストールする

バージョン 1.1.0 をデプロイします

kubectl apply -f https://download.elastic.co/downloads/eck/1.1.0/all-in-one.yaml

作成されたポッドを表示する

[root@master01 ~]# kubectl -n elastic-system get pods
NAME                 READY   STATUS    RESTARTS   AGE
elastic-operator-0   1/1     Running   1          17m

作成された crd を表示する apmserver、elasticsearche、kibana の 3 つの crd が作成されました。

[root@master01 ~]# kubectl get crd | grep elastic
apmservers.apm.k8s.elastic.co                                2020-04-27T16:23:08Z
elasticsearches.elasticsearch.k8s.elastic.co                 2020-04-27T16:23:08Z
kibanas.kibana.k8s.elastic.co                                2020-04-27T16:23:08Z

es と kibana をデプロイする

リリース バージョンのサンプル yaml を github でローカルにダウンロードします。バージョン 1.1.0 はここからダウンロードします。

curl -LO https://github.com/elastic/cloud-on-k8s/archive/1.1.0.tar.gz
tar -zxf cloud-on-k8s-1.1.0.tar.gz
cd cloud-on-k8s-1.1.0/config/recipes/beats/

名前空間の作成

kubectl apply -f 0_ns.yaml

es と kibana をデプロイします。数は 3 で、3 つの es ノードのデプロイを指定します。初期段階で 1 つのノードをデプロイし、その後容量を拡張することもできます。storageClassName を nfs-client として指定し、http 部分を追加しますサービスタイプをnodePortとして指定します。

$ cat 1_monitor.yaml
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: monitor
  namespace: beats
spec:
  version: 7.6.2
  nodeSets:
  - name: mdi
    count: 3
    config:
      node.master: true
      node.data: true
      node.ingest: true
      node.store.allow_mmap: false
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 50Gi
        storageClassName: nfs-client
  http:
    service:
      spec:
        type: NodePort
---
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: monitor
  namespace: beats
spec:
  version: 7.6.2
  count: 1
  elasticsearchRef:
    name: "monitor"
  http:
    service:
      spec:
        type: NodePort

yaml ファイルを実行して es と kibana をデプロイする

kubectl apply -f 1_monitor.yaml

イメージを取得できない場合は、手動で dockerhub イメージに置き換えることができます。

docker pull elastic/elasticsearch:7.6.2
docker pull elastic/kibana:7.6.2
docker tag elastic/elasticsearch:7.6.2 docker.elastic.co/elasticsearch/elasticsearch:7.6.2
docker tag elastic/kibana:7.6.2 docker.elastic.co/kibana/kibana:7.6.2

ヘルスステータス、バージョン、ノード数など、作成された Elasticsearch および kibana リソースを表示します。

[root@master01 ~]# kubectl get elasticsearch
NAME         HEALTH   NODES   VERSION   PHASE   AGE
quickstart   green    3       7.6.2     Ready   77m

[root@master01 ~]# kubectl get kibana
NAME         HEALTH   NODES   VERSION   AGE
quickstart   green    1       7.6.2     137m

作成されたポッドを表示します。

[root@master01 ~]# kubectl -n beats get pods
NAME                          READY   STATUS    RESTARTS   AGE
monitor-es-mdi-0              1/1     Running   0          109s
monitor-es-mdi-1              1/1     Running   0          9m
monitor-es-mdi-2              1/1     Running   0          3m26s
monitor-kb-54cbdf6b8c-jklqm   1/1     Running   0          9m

作成したPVとPVCを表示する

[root@master01 ~]# kubectl -n beats get pvc
NAME                                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
elasticsearch-data-monitor-es-mdi-0   Bound    pvc-882be3e2-b752-474b-abea-7827b492d83d   10Gi       RWO            nfs-client     3m33s
elasticsearch-data-monitor-es-mdi-1   Bound    pvc-8e6ed97e-7524-47f5-b02c-1ff0d2af33af   10Gi       RWO            nfs-client     3m33s
elasticsearch-data-monitor-es-mdi-2   Bound    pvc-31b5f80d-8fbd-4762-ab69-650eb6619a2e   10Gi       RWO            nfs-client     3m33s

[root@master01 ~]# kubectl -n beats get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                       STORAGECLASS   REASON   AGE
pvc-31b5f80d-8fbd-4762-ab69-650eb6619a2e   50Gi       RWO            Delete           Bound    beats/elasticsearch-data-monitor-es-mdi-2   nfs-client              3m35s
pvc-882be3e2-b752-474b-abea-7827b492d83d   50Gi       RWO            Delete           Bound    beats/elasticsearch-data-monitor-es-mdi-0   nfs-client              3m35s
pvc-8e6ed97e-7524-47f5-b02c-1ff0d2af33af   50Gi       RWO            Delete           Bound    beats/elasticsearch-data-monitor-es-mdi-1   nfs-client              3m35s

実際のデータは、master01 ノード/nfs-share ディレクトリに保存されます。

[root@master01 ~]# tree /nfs-share/ -L 2
/nfs-share/
├── beats-elasticsearch-data-monitor-es-mdi-0-pvc-250c8eef-4b7e-4230-bd4f-36b911a1d61b
│   └── nodes
├── beats-elasticsearch-data-monitor-es-mdi-1-pvc-c1a538df-92df-4a8e-9b7b-fceb7d395eab
│   └── nodes
└── beats-elasticsearch-data-monitor-es-mdi-2-pvc-dc21c1ba-4a17-4492-9890-df795c06213a
    └── nodes

作成されたサービスを確認します。デプロイメント中に、クラスターの外部からのアクセスを容易にするために、es および kibana サービス タイプが NodePort に変更されました。

[root@master01 ~]# kubectl -n beats get svc
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
monitor-es-http   NodePort    10.96.82.186    <none>        9200:31575/TCP   9m36s
monitor-es-mdi    ClusterIP   None            <none>        <none>           9m34s
monitor-kb-http   NodePort    10.97.213.119   <none>        5601:30878/TCP   9m35s

デフォルトでは、elasticsearch では認証が有効になっています。elastic ユーザーのパスワードを取得します。

PASSWORD=$(kubectl -n beats get secret monitor-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode)                          

echo $PASSWORD

elasticsearch にアクセス

ブラウザーアクセスの elasticsearch:

https://192.168.93.11:31575/

または、Kubernetes クラスター内から elasticsearch エンドポイントにアクセスします。

[root@master01 ~]# kubectl run -it --rm centos--image=centos -- sh                          
sh-4.4#
sh-4.4# PASSWORD=gf4mgr5fsbstwx76b8zl8m2g
sh-4.4# curl -u "elastic:$PASSWORD" -k "https://monitor-es-http:9200"
{
  "name" : "quickstart-es-default-2",
  "cluster_name" : "quickstart",
  "cluster_uuid" : "mrDgyhp7QWa7iVuY8Hx6gA",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

kibanaにアクセスします
ブラウザでkibanaにアクセスします ユーザーのパスワードはelasticsearchと同じです Explore on my ownを選択します まだインデックスが作成されていないことがわかります

https://192.168.93.11:30878/

ファイルビートをデプロイする

dockerhub イメージを使用すると、バージョンが 7.6.2 に変更されます。

sed -i 's#docker.elastic.co/beats/filebeat:7.6.0#elastic/filebeat:7.6.2#g' 2_filebeat-kubernetes.yaml

kubectl apply -f 2_filebeat-kubernetes.yaml

作成されたポッドを表示する

[root@master01 beats]# kubectl -n beats get pods -l k8s-app=filebeat
NAME             READY   STATUS    RESTARTS   AGE
filebeat-dctrz   1/1     Running   0          9m32s
filebeat-rgldp   1/1     Running   0          9m32s
filebeat-srqf4   1/1     Running   0          9m32s

イメージを取得できない場合は、手動で取得できます。

docker pull elastic/filebeat:7.6.2
docker tag elastic/filebeat:7.6.2 docker.elastic.co/beats/filebeat:7.6.2

docker pull elastic/metricbeat:7.6.2
docker tag elastic/metricbeat:7.6.2 docker.elastic.co/beats/metricbeat:7.6.2

kibana にアクセスすると、filebeat インデックスを検索し、インデックス パターンを入力し、@timestrap を選択してインデックスを作成できます。

ここに画像の説明を挿入します

収集されたログを表示する

ここに画像の説明を挿入します

メトリックビートをデプロイする

sed -i 's#docker.elastic.co/beats/metricbeat:7.6.0#elastic/metricbeat:7.6.2#g' 3_metricbeat-kubernetes.yaml

作成されたポッドを表示する

[root@master01 beats]# kubectl -n beats get pods -l  k8s-app=metricbeat
NAME                          READY   STATUS    RESTARTS   AGE
metricbeat-6956d987bb-c96nq   1/1     Running   0          76s
metricbeat-6h42f              1/1     Running   0          76s
metricbeat-dzkxq              1/1     Running   0          76s
metricbeat-lffds              1/1     Running   0          76s

この時点で、kibana にアクセスすると、インデックスに metricbeat が追加されていることがわかります。

おすすめ

転載: blog.csdn.net/web13618542420/article/details/126746821