博客

如何在 Azure AKS 上自动部署 Elasticsearch

了解如何使用 AKS Automatic 和 ECK 在 Azure 上部署带有 Kibana 的 Elasticsearch,以实现部分托管的 Elasticsearch 设置配置。

本文是系列文章的一部分,我们将学习如何使用不同的基础架构安装 Elasticsearch。

Elasticsearch 部署工作

与基于 Marketplace 的弹性云解决方案相比,ECK 需要付出更多努力,但它比自己部署虚拟机更加自动化,因为 Kubernetes 操作员将负责系统协调和节点扩展。

这一次,我们将使用自动功能与 Azure Kubernetes 服务 (AKS) 配合工作。在其他文章中,您将学习如何使用Azure VMAzure Marketplace

什么是 AKS 自动系统?

Azure Kubernetes 服务(AKS)可自动 管理集群设置、动态分配资源并集成安全最佳实践,同时保持 Kubernetes 的灵活性,使开发人员能够在几分钟内从容器镜像转为部署应用程序。

AKS Automatic 消除了大部分集群管理开销,在简单性和灵活性之间取得了良好的平衡。正确的选择取决于您的使用情况,但如果您计划这样做,决定就会容易得多:

  • 部署测试环境: 部署快速而简单,是快速实验或短期集群的理想选择。

  • 无需严格的虚拟机、存储或网络要求即可工作: AKS Automatic 提供预定义的默认设置,因此,如果这些设置符合您的需求,就可以省去额外的配置。

  • 首次使用 Kubernetes: 通过处理集群的大部分设置工作,AKS Automatic 可降低学习曲线,让团队专注于自己的应用。

 如何创建 Azure Kubernetes 服务 (AKS) 自动集群

资料来源 快速入门:创建 Azure Kubernetes 服务 (AKS) 自动集群(预览版)

对于 Elasticsearch,我们将使用Elastic Cloud on Kubernetes (ECK),它是官方的 Elastic Kubernetes 操作员,可以简化 Elastic Stack 的 Kubernetes 部署协调。

如何设置 AKS 自动系统

1.登录Microsoft Azure 门户

2.在右上角, 单击 上的 Cloud Shell按钮访问控制台,并从那里部署 AKS 群集。或者,您也可以使用Azure 云外壳

请记住,在教程中将项目 ID 更新为您的项目 ID。

打开 AKS 时的样子应该如上截图所示。

3.安装 aks-preview Azure CLI 扩展。该预览版允许我们在创建群集时选择--sku automatic ,从而启用 AKS 自动功能。

az extension add --name aks-preview

如果看到此信息,说明 AKS 扩展已正确安装。

4.使用az feature register 命令注册 功能标志

az feature register --namespace Microsoft.ContainerService --name AutomaticSKUPreview

您将看到我们刚刚创建的功能订阅的详细信息:

确认注册状态,直到从 "正在注册"变为 "已注册"。完成注册可能需要几分钟时间。

az feature show --namespace Microsoft.ContainerService --name AutomaticSKUPreview

运行az provider register 以传播更改。

az provider register --namespace Microsoft.ContainerService

5.创建资源组

资源组是要管理和部署的 Azure 资源的逻辑组。

az group create --name elastic-resource --location eastus

6.创建自动驾驶仪群集。我们将把它命名为myAKSAutomaticCluster ,并使用刚刚创建的资源组。确保以下任何一种虚拟机大小都有16 个可用vCPU:Standard_D4pds_v5Standard_D4lds_v5Standard_D4ads_v5Standard_D4ds_v5Standard_D4d_v5Standard_D4d_v4Standard_DS3_v2Standard_DS12_v2,以便 AKS 分配资源。

az aks create \
    --resource-group elastic-resource \
    --name myAKSAutomaticCluster \
    --sku automatic \
    --generate-ssh-keys

* 如果出现 MissingSubscriptionRegistration 错误,请带着缺失的订阅返回第 4 步。例如, The subscription is not registered to use namespace ' microsoft.insights ' 需要运行 az provider register --namespace Microsoft.Insights.

按照交互式登录:

此时会出现一条要求运行 "az login "的信息。您必须运行该命令,然后等待。

7.等待准备就绪。制作大约需要 10 分钟。

8.配置 kubectl 命令行访问权限。

az aks get-credentials --resource-group elastic-resource --name myAKSAutomaticCluster

请注意,我们安装的扩展正在启用 AKS Automatic。

9.确认节点已部署。

kubectl get nodes

您将看到一条禁止的错误信息;请复制错误信息中的用户 ID。

10.将用户添加到 AKS 访问控制中。

获取 AKS ID。复制命令输出。

az aks show --resource-group elastic-resource  --name myAKSAutomaticCluster --query id --output tsv

使用 AKS ID 和用户的主要 ID 创建角色分配。

az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --assignee <PRINCIPAL_ID> --scope <AKS_ID>

11.尝试再次确认节点已部署。

kubectl get nodes

12.安装 Kubernetes 上的弹性云(ECK)操作员。

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

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

13.让我们使用默认值创建一个单节点 Elasticsearch 实例。

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
EOF

我们禁用nmap 是因为默认 AKS 机器的vm.max_map_count 值过低。不建议在生产中禁用它,但可以增加vm.max_map_count 的值。您可以在这里阅读更多关于如何做到这一点的信息。

14.我们也来部署一个 Kibana 单节点集群。对于 Kibana,我们将添加一个负载平衡器,它将为我们提供一个外部 IP,我们可以用它从我们的设备访问 Kibana。

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

默认情况下,AKS Automatic 会将负载平衡器配置为公共负载平衡器;您可以通过设置元数据注释来更改行为:

service.beta.kubernetes.io/azure-load-balancer-internal: "true"

15.检查 pod 是否正在运行。

kubectl get pods

16.您还可以运行kubectl get elasticsearchkubectl get kibana 获取更具体的统计信息,如 Elasticsearch 版本、节点和健康状况。

17.获取您的服务。

kubectl get svc

这将在 EXTERNAL-IP 下显示 Kibana 的外部 URL。负载平衡器的调配可能需要几分钟时间。复制 EXTERNAL-IP 的值。

18.获取 "elastic "用户的 Elasticsearch 密码:

kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode

19.通过浏览器访问 Kibana

a.url: https://<EXTERNAL_IP>:5601

b.用户名:elastic

c.密码:c44A295CaEt44D6xIzN6Zs5m(来自上一步)

20.从浏览器访问 Elastic Cloud 时,您将看到欢迎屏幕。

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

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
    - name: default
      count: 2
      config:
        node.store.allow_mmap: false
      podTemplate:
        spec:
          containers:
            - name: elasticsearch
              resources:
                requests:
                  memory: 1.5Gi
                  cpu: 2
                limits:
                  memory: 1.5Gi
                  cpu: 2
EOF

在本例中,我们将增加一个节点,并修改 RAM 和 CPU。如您所见,现在kubectl get elasticsearch 显示了 2 个节点:

Kibana 也是如此:

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
  podTemplate:
    spec:
      containers:
        - name: kibana
          env:
            - name: NODE_OPTIONS
              value: "--max-old-space-size=1024"
          resources:
            requests:
              memory: 0.5Gi
              cpu: 0.5
            limits:
              memory: 1Gi
              cpu: 1
EOF

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

请记住,现有的批量索赔不能缩减。应用更新后,操作员将在最短的时间内完成更改。

测试完成后,请记住删除群集,以避免不必要的成本。

az aks delete --name myAKSAutomaticCluster --resource-group elastic-resource

结论

使用 Azure AKS Automatic 和 ECK 可为部署 Elasticsearch 和 Kibana 提供一个平衡的解决方案:它降低了操作复杂性,确保了自动扩展和更新,并充分利用了 Kubernetes 的灵活性。这种方法非常适合需要可靠、可重复和可维护的部署流程,而无需手动管理每个基础架构细节的团队,使其成为测试和生产环境的实用选择。

后续步骤

如果您想了解有关 Kubernetes 的更多信息,可点击此处查看官方文档:

相关内容

如何在不同版本的 Elasticsearch& 集群之间迁移数据

Kofi Bartlett

介绍 Kibana 中的 Elasticsearch 查询规则用户界面

Jhon Guzmán

正确使用 JavaScript 的 Elasticsearch,第二部分

Jeffrey Rengifo

语义搜索的实现:使用 Elasticsearch 构建食谱搜索

Andre Luiz

如何在 AWS Marketplace 上部署 Elasticsearch

Eduard Martin

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用