如何使用 ECK 在 AWS EKS 自动模式下部署 Elasticsearch 和 Kibana

101 阅读6分钟

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

作者:来自 Elastic Eduard Martin

在这个易于理解的指南中,学习如何使用 AWS EKS 自动模式和 ECK 在 Kubernetes 上部署 Elasticsearch 和 Kibana。

初次接触 Elasticsearch?加入我们的 Elasticsearch 入门网络研讨会吧。你也可以立即开始免费的云试用,或在本地机器上体验 Elastic。


这篇文章是一个系列的一部分,我们将在其中学习如何使用不同的基础设施安装 Elasticsearch。

这次,我们将使用 Kubernetes 服务(EKS)的自动模式。在其他文章中,你将学习如何使用 AWS EC2AWS Marketplace

对于 Elasticsearch,我们将使用 Elastic Cloud on Kubernetes(ECK),这是官方的 Elasticsearch Kubernetes 运维工具,可简化所有 Elastic Stack 组件在 Kubernetes 上的部署。

与基于 Marketplace 的 Elastic Cloud 解决方案相比,ECK 需要更多的配置工作,但比你自己部署虚拟机更自动化,因为 Kubernetes 运维工具会负责系统编排和节点扩缩容。

什么是 EKS 自动模式?

EKS 自动模式(Auto Mode)是 AWS 提供的一种部署模型,它简化了数据平面的配置;例如存储、网络和计算等现在都由 EKS 管理。通过一键安装,自动模式会自动选择最优资源,并在需要时为你进行扩展。你可以在我们的 AWS EC2 和 AWS Marketplace 文章中探索其他 AWS 选项。


Source: aws.amazon.com/blogs/conta…

如何设置 ECK 运维工具

现在,我们将安装 eksctl,它是用于从终端管理 AWS EKS 的官方 CLI,然后在已部署的 EKS Kubernetes 集群上安装并运行 ECK 运维工具。

1)登录 AWS

2)在左下角点击 CloudShell 按钮进入控制台,并从那里部署 EKS 集群。或者,你也可以使用 AWS CLI

3)安装 eksctl,通过 CloudShell 管理 EKS 集群

 `1.   # 1. Download the eksctl archive to your current directory
2.  curl --silent --location "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" -o eksctl.tar.gz

4.  # 2. Extract the eksctl binary to the /tmp directory
5.  tar xz -C /tmp -f eksctl.tar.gz

7.  # 3. Move the eksctl binary to /usr/local/bin using sudo for system-wide access
8.  sudo mv /tmp/eksctl /usr/local/bin

10.  # 4. Make the eksctl binary executable (if it's not already)
11.  sudo chmod +x /usr/local/bin/eksctl

13.  # 5. Verify the installation by checking the eksctl version
14.  eksctl version`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

4)创建一个自动模式的 EKS 集群

`eksctl create cluster --name elastic-test --region us-east-1 --enable-auto-mode`AI写代码

5)等待集群准备就绪。创建大约需要 10 分钟。

6)安装 Elastic Cloud on Kubernetes(ECK)运维工具

`

1.  # Install ECK Custom Resource Definitions
2.  kubectl create -f https://download.elastic.co/downloads/eck/2.16.1/crds.yaml

4.  # Install the ECK operator
5.  kubectl apply -f https://download.elastic.co/downloads/eck/2.16.1/operator.yaml

`AI写代码

7)创建 storageClass

我们创建一个 gp3 EBS storageClass,EKS 自动模式将自动安装 CSI Driver。你可以在这里查看更多磁盘选项,在这里查看 ECK 存储推荐。

`

1.  cat <<EOF | kubectl apply -f -
2.  apiVersion: storage.k8s.io/v1
3.  kind: StorageClass
4.  metadata:
5.    name: auto-ebs-sc
6.    annotations:
7.      storageclass.kubernetes.io/is-default-class: "true"
8.  provisioner: ebs.csi.eks.amazonaws.com
9.  volumeBindingMode: WaitForFirstConsumer
10.  parameters:
11.    type: gp3
12.    encrypted: "true"
13.  EOF

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

8)让我们创建一个使用刚刚创建的 storageClass 的单节点 Elasticsearch 实例。我们将请求 1GB 内存和 1 个 CPU。

如果你想查看不同配置的示例,可以访问此链接

`

1.  cat <<EOF | kubectl apply -f -
2.  apiVersion: elasticsearch.k8s.elastic.co/v1
3.  kind: Elasticsearch
4.  metadata:
5.    name: quickstart
6.  spec:
7.    version: 9.0.0
8.    nodeSets:
9.      - name: default
10.        count: 1
11.        podTemplate:
12.          spec:
13.            containers:
14.              - name: elasticsearch
15.                resources:
16.                  requests:
17.                    memory: 1Gi
18.                    cpu: 1
19.                  limits:
20.                    memory: 1Gi
21.                    cpu: 1
22.        volumeClaimTemplates:
23.          - metadata:
24.              name: elasticsearch-data
25.            spec:
26.              accessModes:
27.                - ReadWriteOnce
28.              resources:
29.                requests:
30.                  storage: 5Gi
31.              storageClassName: auto-ebs-sc
32.  EOF

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

9)我们还将部署一个 Kibana 单节点集群。对于 Kibana,我们将添加一个 LoadBalancer,这将为我们提供一个外部 IP,可以从我们的设备访问 Kibana。

`

1.  cat <<EOF | kubectl apply -f -
2.  apiVersion: kibana.k8s.elastic.co/v1
3.  kind: Kibana
4.  metadata:
5.    name: quickstart
6.  spec:
7.    version: 9.0.0
8.    http:
9.      service:
10.        metadata:
11.          annotations:
12.            service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
13.        spec:
14.          type: LoadBalancer
15.    count: 1
16.    elasticsearchRef:
17.      name: quickstart
18.  EOF

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

请注意这个注解

service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"

这非常重要,因为它告诉自动模式提供一个面向公网的 LoadBalancer。如果未设置,LoadBalancer 将是内部的。

10)检查你的 pods 是否正在运行

`kubectl get pods`AI写代码

11)你也可以运行 kubectl get elasticsearch 和 kubectl get kibana 查看更具体的统计信息,如 Elasticsearch 版本、节点和健康状态。

12)访问你的服务

`kubectl get svc`AI写代码

这会在 EXTERNAL-IP 下向你显示 Kibana 的外部 URL。 LoadBalancer 可能需要几分钟来配置。 复制 EXTERNAL-IP 的值

13)获取 elastic 用户的 Elasticsearch 密码:

`kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode`AI写代码

14)通过浏览器访问 Kibana:

  • URL: https://<EXTERNAL_IP>:5601
  • 用户名: elastic
  • 密码: Arc133835D8507OIgKqkWBGx(来自上一步)

15)当你从浏览器访问 Elastic 时,你会看到这个欢迎界面。

如果你想更改 Elasticsearch 集群规格,比如更改或调整节点大小,你可以使用新的设置再次应用 yml 清单:

`

1.  cat <<EOF | kubectl apply -f -
2.  apiVersion: elasticsearch.k8s.elastic.co/v1
3.  kind: Elasticsearch
4.  metadata:
5.    name: quickstart
6.  spec:
7.    version: 9.0.0
8.    nodeSets:
9.      - name: default
10.        count: 2
11.        podTemplate:
12.          spec:
13.            containers:
14.              - name: elasticsearch
15.                resources:
16.                  requests:
17.                    memory: 1.5Gi
18.                    cpu: 2
19.                  limits:
20.                    memory: 1.5Gi
21.                    cpu: 2
22.        volumeClaimTemplates:
23.          - metadata:
24.              name: elasticsearch-data
25.            spec:
26.              accessModes:
27.                - ReadWriteOnce
28.              resources:
29.                requests:
30.                  storage: 7.5Gi
31.              storageClassName: auto-ebs-sc
32.  EOF

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

在这个示例中,我们将增加一个节点,增加内存、CPU 和磁盘。

Kibana 也同样适用:

`

1.  cat <<EOF | kubectl apply -f -
2.  apiVersion: kibana.k8s.elastic.co/v1
3.  kind: Kibana
4.  metadata:
5.    name: quickstart
6.  spec:
7.    version: 9.0.0
8.    http:
9.      service:
10.        metadata:
11.          annotations:
12.            service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
13.        spec:
14.          type: LoadBalancer
15.    count: 1
16.    elasticsearchRef:
17.      name: quickstart
18.    podTemplate:
19.      spec:
20.        containers:
21.          - name: kibana
22.            env:
23.              - name: NODE_OPTIONS
24.                value: "--max-old-space-size=1024"
25.            resources:
26.              requests:
27.                memory: 0.5Gi
28.                cpu: 0.5
29.              limits:
30.                memory: 1Gi
31.                cpu: 1
32.  EOF

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

我们可以调整容器的 CPU/内存,也可以调整 Node.js 的内存使用(max-old-space-size)。

请记住,已有的卷声明无法缩小。应用更新后,运维工具会在最小中断时间内完成更改。

测试完成后记得删除集群,以避免不必要的费用。

`eksctl delete cluster --name elastic-test --region us-east-1`AI写代码

结论

在本指南中,我们使用 ECK 在 AWS EKS 自动模式下部署了 Elasticsearch 和 Kibana。自动模式为你管理集群资源,而 ECK 管理扩缩容和编排。结果是,比使用 AWS Marketplace 需要更多操作,但比直接在虚拟机上运行 Elasticsearch 少得多。这在控制和简化之间取得了良好平衡,也是一个很好的构建基础。

下一步

如果你想了解更多关于 Kubernetes 和自动模式的内容,可以查看这些文章:

原文:www.elastic.co/search-labs…