本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net
作者:来自 Elastic Eduard Martin
在这个易于理解的指南中,学习如何使用 AWS EKS 自动模式和 ECK 在 Kubernetes 上部署 Elasticsearch 和 Kibana。
初次接触 Elasticsearch?加入我们的 Elasticsearch 入门网络研讨会吧。你也可以立即开始免费的云试用,或在本地机器上体验 Elastic。
这篇文章是一个系列的一部分,我们将在其中学习如何使用不同的基础设施安装 Elasticsearch。
这次,我们将使用 Kubernetes 服务(EKS)的自动模式。在其他文章中,你将学习如何使用 AWS EC2 和 AWS 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写代码
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写代码
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写代码
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写代码
请注意这个注解:
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写代码
在这个示例中,我们将增加一个节点,增加内存、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写代码
我们可以调整容器的 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 和自动模式的内容,可以查看这些文章: