使用 AWS EKS 部署 Easysearch

随着企业对数据搜索和分析需求的增加,高效的搜索引擎解决方案变得越来越重要。Easysearch 作为一款强大的企业级搜索引擎,可以帮助企业快速构建高性能、可扩展的数据检索系统。在云计算的背景下,使用容器化技术来部署和管理这些解决方案已经成为主流选择,而 Amazon Elastic Kubernetes Service (EKS) 则提供了一个强大且易于使用的平台来运行容器化的应用程序。

本文旨在探索如何在 AWS EKS 上部署 Easysearch,并通过实践操作展示从集群配置到服务部署的完整过程。通过本文,读者可以了解如何在云环境中快速搭建高效的搜索服务,最大化利用云资源的弹性和可扩展性。

准备工作

  1. 准备一个 AWS Global 账户,本文选择东京区域(ap-northeast-1)进行部署。
  2. 部署 EKS 集群版本为 1.30,同时需要在 Linux 环境中安装 AWS CLI、Helm、eksctl 和 kubectl 等命令行工具。本文使用 eksctl 管理 EKS 集群,eksctl 是 AWS 官方推出的高效管理 EKS 集群的命令行工具。
  3. 本文将使用 EBS-CSI-Driver 作为存储驱动来部署 Easysearch 服务,并通过 AWS LoadBalancer Controller 将 Easysearch Console 服务以 AWS 负载均衡器的方式对外提供服务,连接集群内部的 Easysearch。

命令行工具的安装

安装 AWS CLI:

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install -i /usr/local/aws-cli -b /usr/local/bin
aws --version

安装 Helm:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh

安装 eksctl:

# 对于 ARM 系统,设置 ARCH 为:`arm64`、`armv6` 或 `armv7`
ARCH=amd64
PLATFORM=$(uname -s)_$ARCHcurl -sLO "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$PLATFORM.tar.gz"# (可选)验证校验和
curl -sL "https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_checksums.txt" | grep $PLATFORM | sha256sum --checktar -xzf eksctl_$PLATFORM.tar.gz -C /tmp && rm eksctl_$PLATFORM.tar.gzsudo mv /tmp/eksctl /usr/local/bin

安装 kubectl:

curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.30.2/2024-07-12/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH

配置 EKS 集群环境

我们使用 eksctl 创建一个 1.30 版本的集群,这里通过 YAML 模板定义 EKS 集群的 VPC 网络配置,并根据 eksctl 官方文档调整相关字段。将以下模板保存为 my-cluster.yaml 文件:

# 创建一个包含 2 个 m5.2xlarge 实例的节点组
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfigmetadata:name: LAB-1-30region: ap-northeast-1vpc:subnets:private:ap-northeast-1a: { id: subnet-11223344 }ap-northeast-1c: { id: subnet-55667788 }ap-northeast-1d: { id: subnet-99001122 }nodeGroups:- name: managed-workers-01labels: { role: workers }instanceType: m5.2xlargeminSize: 2maxSize: 4desiredCapacity: 3privateNetworking: truevolumeSize: 30

通过以下命令创建集群:

eksctl create cluster -f my-cluster.yaml 

集群创建完成后,使用以下命令检查集群是否就绪:

# 更新 kubeconfig 的凭证文件
aws eks update-kubeconfig --name LAB-1-30 --region ap-northeast-1
kubectl get node
[ec2-user@ip-10-0-0-84 ~]$ kubectl get node 
NAME                                              STATUS   ROLES    AGE   VERSION
ip-10-0-100-132.ap-northeast-1.compute.internal   Ready    <none>   16m   v1.30.2-eks-1552ad0
ip-10-0-101-148.ap-northeast-1.compute.internal   Ready    <none>   16m   v1.30.2-eks-1552ad0

安装 EBS-CSI-Driver 插件,后续部署时可以指定 StorageClass 来使用亚马逊云的 EBS 块存储服务:

eksctl utils associate-iam-oidc-provider --region=ap-northeast-1 --cluster=LAB-1-30 --approve
eksctl create iamserviceaccount \--name ebs-csi-controller-sa \--namespace kube-system \--cluster LAB-1-30 \--region ap-northeast-1 \--role-name AmazonEKS_EBS_CSI_DriverRole \--role-only \--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \--approveeksctl create addon --cluster LAB-1-30 --name aws-ebs-csi-driver --version latest --region ap-northeast-1 \--service-account-role-arn arn:aws:iam::112233445566:role/AmazonEKS_EBS_CSI_DriverRole --force[ec2-user@ip-10-0-0-84 ~]$ kubectl get pod -n kube-system | grep -i ebs
ebs-csi-controller-868598b64f-pwmxq   6/6     Running   0          11m
ebs-csi-controller-868598b64f-qn2lz   6/6     Running   0          11m
ebs-csi-node-fplxg                    3/3     Running   0          11m
ebs-csi-node-v6qwj                    3/3     Running   0          11m

安装 AWS LoadBalancer Controller 组件:

eksctl create iamserviceaccount \--cluster=LAB-1-30 \--region ap-northeast-1 \--namespace=kube-system \--name=aws-load-balancer-controller \--role-name AmazonEKSLoadBalancerControllerRole_130 \--attach-policy-arn=arn:aws:iam::112233445566:policy/AWSLoadBalancerControllerIAMPolicy \--approvehelm repo add eks https://aws.github.io/eks-charts
helm repo update eks
wget https://raw.githubusercontent.com/aws/eks-charts/master/stable/aws-load-balancer-controller/crds/crds.yaml 
kubectl apply -f crds.yamlhelm install aws-load-balancer-controller eks/aws-load-balancer-controller \-n kube-system \--set clusterName=LAB-1-30 \--set serviceAccount.create=false \--set serviceAccount.name=aws-load-balancer-controller  \--set region=ap-northeast-1# 验证安装
kubectl get deployment -n kube-system aws-load-balancer-controller
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           39s

至此,我们已经完成了 EKS 集群的配置。

安装 Easysearch 服务

本文中,将通过 AWS LoadBalancer 部署 Console 服务。首先,通过 Helm 将 Console 相关的模板文件拉取到本地,执行以下命令:

helm pull infinilabs/console
tar -zxvf console-0.2.0.tgz 
cd console

目录结构如下:

[ec2-user@ip-10-0-0-84 console]$ tree
.
├── Chart.yaml
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── serviceaccount.yaml
│   └── statefulset.yaml
└── values.yaml

我们需要修改 service.yamlvalues.yaml 中的部分配置:

# serivce.yaml
# 参考 AWS Load Balancer Controller 的文档,配置负载均衡器面向公网
metadata:annotations:service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facingservice.beta.kubernetes.io/aws-load-balancer-nlb-target-type: instanceservice.beta.kubernetes.io/aws-load-balancer-subnets: subnet-11223344, subnet-55667788, subnet-9911223344# values.yaml
# 使用 GP2 StorageClass,并指定 Service Type 为 LoadBalancer
service:type: LoadBalancer
storageClassName: gp2

使用 Helm 部署 console 服务:

kubectl create ns Easysearch
helm upgrade --install console . -f values.yaml -n Easysearch# 检查是否创建了 Service 并获取负载均衡器的 DNS 地址
kubectl get svc -n Easysearch
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP                                               PORT(S)             AGE
console      LoadBalancer   172.20.237.237   k8s-xxxx.elb.ap-northeast-1.amazonaws.com                 9000:32190/TCP      6h49m

接下来是创建 Easysearch 单节点集群服务。创建一个新的 values.yaml 文件并定义使用 GP2 类型的 StorageClass,如下:

cd ~
echo 'storageClassName: gp2' > values.yaml
cat << EOF | kubectl apply -n Easysearch -f -
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:name: Easysearch-ca-issuer
spec:selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:name: Easysearch-ca-certificate
spec:commonName: Easysearch-ca-certificateduration: 87600h0m0sisCA: trueissuerRef:kind: Issuername: Easysearch-ca-issuerprivateKey:algorithm: ECDSAsize: 256renewBefore: 2160h0m0ssecretName: Easysearch-ca-secret
EOF
helm install Easysearch infinilabs/Easysearch -n Easysearch -f values.yaml

至此,我们已在 AWS EKS 平台上完成了 Easysearch 的部署。可以通过 Kubernetes 中的 Service DNS 地址在 Console 中验证连接到内部的 Easysearch 服务。本文中使用的地址为:Easysearch.Easysearch.svc.cluster.local:9200

也可以在 Easysearch 的 Pod 中使用命令进行连接验证:

kubectl exec -n Easysearch Easysearch-0 -it -- curl -ku 'admin:admin' https://Easysearch.Easysearch.svc.cluster.local:9200
{"name" : "Easysearch-0","cluster_name" : "infinilabs","cluster_uuid" : "fq3r_ZaHSFuZDjDtKyJY_w","version" : {"distribution" : "Easysearch","number" : "1.6.0","distributor" : "INFINI Labs","build_hash" : "e5d1ff9067b3dd696d52c61fbca1f8daed931fb7","build_date" : "2023-09-22T00:55:32.292580Z","build_snapshot" : false,"lucene_version" : "8.11.2","minimum_wire_lucene_version" : "7.7.0","minimum_lucene_index_compatibility_version" : "7.7.0"},"tagline" : "You Know, For Easy Search!"
}

总结

通过本文的实践操作,我们成功地在 AWS EKS 平台上部署了 Easysearch 服务,验证了其在云环境中的高效运行能力。从 EKS 集群的配置、存储和网络资源的准备,到最终的 Easysearch 部署与测试,整个过程展示了如何利用 AWS 提供的工具和服务,快速构建企业级搜索引擎解决方案。

通过这次部署,我们不仅了解了 Easysearch 在 Kubernetes 环境中的部署方法,还深入体验了 AWS EKS 平台的强大功能。未来,随着企业数据量的不断增长,结合云计算的弹性和容器化技术的优势,将会为企业的数据管理和搜索提供更加高效的解决方案。

参考文档

  1. AWS 命令行界面
  2. Helm
  3. eksctl
  4. Helm Chart 部署 Easysearch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试】功能测试理论基础

目录 项目的测试流程&#x1f3f4; 需求评审 评审形式 测试人员在需求评审中职责 测试计划与方案 测试计划 问题 测试方案&#x1f3f4; 测试计划与方案的对比 功能测试设计&#x1f3f4; 测试设计的步骤 项目的测试流程&#x1f3f4; 作用&#xff1a; 有序有效开展…

Flink消费Kafka数据积压排查解决

0、背景 有个Flink任务每天不定时会出现数据积压&#xff0c;无论是白天还是数据量很少的夜里&#xff0c;且积压的数据量会越来越多&#xff0c;得不到缓解&#xff0c;只能每日在积压告警后重启&#xff0c;重启之后消费能力一点毛病没有&#xff0c;积压迅速缓解&#xff0…

【云原生】RBAC授权详解

使用 RBAC签权 文章目录 使用 RBAC签权一、RBAC介绍1.1、介绍1.2、RBAC四种对象 二、Role和ClusterRole三、RoleBinding和ClusterRoleBinding四、示例Role4.1、创建Kubernetes用户4.2、Role示例4.3、RoleBinding4.4、验证4.5、退回管理员权限用户 五、示例ClusterRole5.2、创建…

平安城市/雪亮工程现状及需求分析:EasyCVR视频汇聚平台助力雪亮工程项目建设

一、背景现状 经过近几年的努力&#xff0c;平安城市雪亮工程建设取得了显著的成绩&#xff0c;完成了前端高清视频点位和高清卡口系统建设&#xff0c;建成了&#xff08;视频监控类&#xff09;、&#xff08;卡口类&#xff09;和&#xff08;应用类&#xff09;的平台。这…

1.Linux_常识

UNIX、Linux、GNU 1、UNIX UNIX是一个分时操作系统&#xff0c;特点是多用户、多任务 实时操作系统&#xff1a;来了请求就去解决请求 分时操作系统&#xff1a;来了请求先存着&#xff0c;通过调度轮到执行时执行 2、Linux Linux是一个操作系统内核 发行版本&#xff1…

C++练习备忘录

1. 保留两位小数输出格式 #include <iostream> #include <iomanip> using namespace std; int main() {double S 0;S (15 25) * 20 / 2;cout << fixed << setprecision(2) << S;return 0; }2. 设置输出宽度 #include <iostream> #inclu…

OD C卷 - 传递悄悄话

传递悄悄话 &#xff08;100&#xff09; 给定一个二叉树&#xff0c;节点采用顺序存储&#xff0c;如 i0 表示根节点&#xff0c;2i 1 表示左子树根&#xff0c;2i 2 表示右子树根;每个节点站一个人&#xff0c;节点数值表示由父节点到该节点传递消息需要的时间&#xff1b…

海量数据处理商用短链接生成器平台 - 1

第一章 海量数据处理商用短链接生成器平台介绍 第1集 什么是短链接生成器 短链接生成器是一种工具&#xff0c;可以将较长的链接转换成较短的链接。这种工具在许多场景中都很有用&#xff0c;包括营销、社交媒体分享和数据报告等。以下是一些关于短链接生成器的优点和作用&…

【Kubernetes】集群外部的请求访问集群内应用的最佳方式:Ingress

《Service 服务》系列&#xff0c;共包含以下文章&#xff1a; Service 概念与实战Service 类型&#xff1a;NodePort、ClusterlP、LoadBalancer、ExternalName虚拟 IP 与 Service 的代理模式集群外部的请求访问集群内应用的最佳方式&#xff1a;Ingress &#x1f60a; 如果您…

白骑士的C#教学附加篇 5.1 C#开发工具

系列目录 上一篇&#xff1a;白骑士的C#教学实战项目篇 4.4 游戏开发 在这一部分&#xff0c;我们将介绍一些额外的内容和工具&#xff0c;以帮助您提高 C# 开发的效率和质量。掌握合适的开发工具和调试技巧&#xff0c;可以让您在编写和维护代码时更加高效和从容。 开发工具对…

智慧水务项目(七)vscode 远程连接ubuntu 20.04 服务器,调试pyscada,踩坑多多

一、说明 以前用过pycharm&#xff0c;远程连接还可以&#xff0c;但是vscode用以前还可以&#xff0c;就用它开发python了&#xff0c;想搞个远程&#xff0c;源码直接放服务器上&#xff0c;能远程调试&#xff0c;其实也很方便的&#xff0c;结果第一次还成功了&#xff0c;…

学习笔记第二十八天

有名管道&#xff08;FIFO&#xff09; 有名管道是Linux系统中一种特殊的文件类型&#xff0c;它允许不相关的进程之间进行通信。有名管道在文件系统中具有具体的路径和名称&#xff0c;因此可以被多个进程共同访问。 特点 持久性&#xff1a;有名管道在文件系统中以文件的形…

LeetCode刷题笔记第231题:2 的幂

LeetCode刷题笔记第231题&#xff1a;2 的幂 题目&#xff1a; 想法&#xff1a; 对输入的数值循环除以2直至数值小于等于1&#xff0c;如果最终的数值为1则为2的幂&#xff0c;小于1则不是2的幂。 class Solution:def isPowerOfTwo(self, n: int) -> bool:if n 1:retur…

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结

目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖&#xff1f; 9、…

【Java】 Java 中的 BufferedReader 详解

我听见有人猜 你是敌人潜伏的内线 和你相知多年 我确信对你的了解 你舍命救我画面 一一在眼前浮现 司空见惯了鲜血 你忘记你本是娇娆的红颜 感觉你我彼此都那么依恋 &#x1f3b5; 许嵩《内线》 在 Java 中&#xff0c;处理文件输入和输出操作时&#xff…

如何开发一款流畅、稳定、有趣味性的棋类游戏?

开发一款流畅、稳定且具有趣味性的棋类游戏&#xff0c;需要从多个角度出发&#xff0c;进行全面的设计和技术实现。以下是开发过程中的关键要素&#xff1a; 1. 明确游戏规则与玩法设计&#xff1a; 首先&#xff0c;确定棋类游戏的基本规则和核心玩法。规则需要严谨而不复杂…

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

东南大学:Wi-Fi 6搭档全光以太,打造“数智东南”信息高速路

东南大学&#xff1a;Wi-Fi 6搭档全光以太&#xff0c;打造“数智东南”信息高速路 - 华为企业业务 打好ICT底座&#xff0c;平台和应用层面就会非常通畅了。首先&#xff0c;出海企业的需求既有普遍性&#xff0c;也有垂直性行业的特性需求。普遍性需求需要通信、沟通数据和传…

虚幻反射-

在Unreal Engine中&#xff0c;如果你想获取一个AActor中的所有FProperty&#xff0c;可以使用TFieldIterator来遍历特定类的属性。以下是一些关键步骤和示例代码&#xff1a; 包含必要的头文件&#xff1a;首先&#xff0c;确保包含了反射相关的头文件。 #include "Engin…

GB/T 26825-2011 FJ抗静电防腐胶检测

FJ抗静电防腐胶是指涂覆于石油、化工贮运设备或建筑物室内地面上&#xff0c;能够防止静电积累并疏导静电快速释放的防腐蚀材料。 GB/T 26825-2011 FJ抗静电防腐胶检测项目&#xff1a; 测试项目 测试方法 干燥时间 GB/T 1728 硬度 GB/T 6739 粘接强度 GB/T 26825 抗压…