写点什么

在 Kubernetes 集群上部署和管理 JFrog Artifactory

  • 2020-04-22
  • 本文字数:3632 字

    阅读完需:约 12 分钟

在Kubernetes集群上部署和管理JFrog Artifactory

介绍

Elasticsearch 是一个基于 Apache Lucene 并由 Elastic 开发的开源搜索引擎。它可扩展性、弹性和性能等特性都十分优越,全球各地的公司,包括 Mozilla、Facebook、Github、Netflix、eBay、纽约时报等,每天都在使用它。Elasticsearch 是大型数据集最受欢迎的分析平台之一,所有你能看到包含搜索引擎的地方都几乎有 Elasticsearch 的存在。它在操作数据时使用基于文档的方法,并且在用户执行搜索时几乎可以实时解析它。它以 JSON 格式存储数据,并按索引和类型组织数据。


如果我们在传统关系数据库的组件和 Elasticsearch 的组件之间进行类比,它们看起来像这样:


  • 数据库或表 → 索引

  • 行/列 → 包含属性的文档

Elasticsearch 的优势

  • 它源自 Apache Lucene,提供了极其强大的全文搜索功能。

  • 它使用基于文档的体系结构,将复杂的现实世界实体存储为结构化 JSON 文档。默认情况下,它会索引所有字段,这在搜索时提供了巨大的性能。

  • 它不使用带有索引的模式。文档通过包含它们来添加新字段,从而可以自由添加、删除或更改相关字段,而无需与传统数据库模式升级相关的停机时间。

  • 它对文档执行语言搜索,返回与搜索条件匹配的文档。它使用 TFIDF 算法对结果进行评分,使更多相关文档在结果列表中更高。

  • 它允许模糊搜索,即使拼写错误的搜索词也可以帮助查找结果。

  • 它支持实时搜索自动完成,在用户键入搜索查询时返回结果。

  • 它使用 RESTful API,通过简单、轻量级的界面展示其功能。

  • Elasticsearch 以极快的速度执行复杂查询。它还缓存查询,返回与缓存过滤器匹配的其他请求的缓存结果。

  • 它可以水平扩展,从而可以扩展资源并平衡集群节点之间的负载。

  • 它将索引分解为碎片,每个碎片具有任意数量的副本。每个节点都知道集群中每个文档的位置,并在必要时在内部路由请求以检索数据。

术语

Elasticsearch 使用特定术语来定义其组件。


  • 集群:一起工作的节点集合。

  • 节点:作为集群一部分的单个服务器,存储数据,并参与集群的索引和搜索功能。

  • 索引:具有类似特征的文档集合。

  • 文档:可以编制索引的基本信息单元。

  • Shard(分片):索引分为多个部分,称为分片,允许索引水平缩放。

  • 副本:索引分片的副本

前期准备

要完成此次 demo,我们至少需要以下之一:


  • 已配置好的 Rancher 部署和 Kubernetes 集群,或

  • 两个节点,在其中部署 Rancher 和 Kubernetes,或

  • 用于部署 Rancher 的节点和在托管提供程序(如 GKE)中运行的 Kubernetes 集群。


本文使用 Google Cloud Platform,但您也可以使用任何其他提供商或基础架构。

启动 Rancher

如果您还没有部署 Rancher,请先启动一个,具体步骤可以参考此处快速上手指南:


https://rancher.com/quick-start/

启动集群

根据这一指南,使用 Rancher 设置和配置最适合您的环境的集群:


https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/

部署 Elasticsearch

如果您已经习惯了 kubectl,可以直接使用 manifest。如果您更喜欢使用 Rancher 用户界面,请继续往下阅读。


我们将 Elasticsearch 部署为具有两个服务的 StatefulSet:一个是用于与 pod 通信的 headless service,另一个则用于从 Kubernetes 集群外部与 Elasticsearch 交互。


svc-cluster.yaml



svc-loadbalancer.yaml



es-sts-deployment.yaml


apiVersion: v1kind: ConfigMapmetadata:  name: es-configdata:  elasticsearch.yml:|    cluster.name: my-elastic-cluster    network.host: "0.0.0.0"    bootstrap.memory_lock: false    discovery.zen.ping.unicast.hosts: elasticsearch-cluster    discovery.zen.minimum_master_nodes: 1    xpack.security.enabled: false    xpack.monitoring.enabled: false  ES_JAVA_OPTS: -Xms512m -Xmx512m---apiVersion: apps/v1beta1kind: StatefulSetmetadata:  name: esnodespec:  serviceName: elasticsearch  replicas: 2  updateStrategy:    type: RollingUpdate  template:    metadata:      labels:        app: es-cluster    spec:      securityContext:        fsGroup: 1000      initContainers:      - name: init-sysctl        image: busybox        imagePullPolicy: IfNotPresent        securityContext:          privileged: true        command: ["sysctl", "-w", "vm.max_map_count=262144"]      containers:      - name: elasticsearch        resources:            requests:                memory: 1Gi        securityContext:          privileged: true          runAsUser: 1000          capabilities:            add:            - IPC_LOCK            - SYS_RESOURCE        image: docker.elastic.co/elasticsearch/elasticsearch:6.5.0        env:        - name: ES_JAVA_OPTS          valueFrom:              configMapKeyRef:                  name: es-config                  key: ES_JAVA_OPTS        readinessProbe:          httpGet:            scheme: HTTP            path: /_cluster/health?local=true            port: 9200          initialDelaySeconds: 5        ports:        - containerPort: 9200          name: es-http        - containerPort: 9300          name: es-transport        volumeMounts:        - name: es-data          mountPath: /usr/share/elasticsearch/data        - name: elasticsearch-config          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml          subPath: elasticsearch.yml      volumes:        - name: elasticsearch-config          configMap:            name: es-config            items:              - key: elasticsearch.yml                path: elasticsearch.yml  volumeClaimTemplates:  - metadata:      name: es-data    spec:      accessModes: [ "ReadWriteOnce" ]      resources:        requests:          storage: 5Gi
复制代码


$ kubectl apply -f es-sts-deployment.yaml configmap/es-config created statefulset.apps/esnode created
复制代码

通过 Rancher UI 部署 Elasticsearch

如果您想的话,可以通过 Rancher UI 将上述每个 manifest 都导入您的集群。下面的屏幕截图显示了每个过程。

导入 svc-cluster.yaml




导入 svc-loadbalancer.yaml


导入 es-sts-deployment.yaml




检索负载均衡器 IP

您后期会需要我们所部署的负载均衡器的地址的。您可以通过 kubectl 或 UI 检索此内容。

使用 CLI

$ kubectl get svc elasticsearch-loadbalancer NAME                         TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE elasticsearch-loadbalancer   LoadBalancer   10.59.246.186   35.204.239.246   80:30604/TCP   33m
复制代码

使用 UI

测试集群

使用我们在上一步中检索的地址来查询集群以获取基本信息。



查询集群以获取有关其节点的信息。master 列中的星号突出显示当前主节点。



检查可用的指数:



因为这是一个全新的安装,所以它没有任何以前的索引或数据。为了继续本教程,我们将注入一些我们稍后可以使用的示例数据。我们将使用的文件可从 Elastic 网站获得:


https://www.elastic.co/guide/en/kibana/current/tutorial-load-dataset.html


下载它们,然后使用以下命令加载它们:



当我们重新检查索引时,我们将看到我们有五个新的索引数据。


$ curl 35.204.239.246/_cat/indices?v health status index               uuid                   pri rep docs.count docs.deleted store.size pri.store.size green  open   logstash-2015.05.20 MFdWJxnsTISH0Z9Vr0aT3g   5   1       4750            0     49.9mb         25.2mb green  open   logstash-2015.05.18 lLHV2nzvTOG9mzlpKaG9sg   5   1       4631            0     46.5mb         23.5mb green  open   logstash-2015.05.19 PqNnVUgXTyaDSfmCQZwbLQ   5   1       4624            0     48.2mb         24.2mb green  open   shakespeare         rwl3xBgmQtm8B3V7GFeTZQ   5   1     111396            0       46mb         23.1mb green  open   bank                z0wVGsbrSiG2cQwRXwaCOg   5   1       1000            0    949.2kb        474.6kb
复制代码


其中每个都包含不同类型的文档。对于 shakespeare 索引,我们可以搜索游戏的名称。对于 logstash-2015.05.19 索引,我们可以根据 IP 地址查询和过滤数据,对于 bank 索引,我们可以搜索有关特定帐户的信息。




结论

Elasticsearch 非常强大。它既简单又复杂——易于部署和使用,而与数据交互的方式也很复杂。


本文向您展示了如何使用 Rancher 和 Kubernetes 部署它以及如何通过 RESTful API 进行查询的基础知识。


如果您希望探索在日常情况下使用 Elasticsearch 的方法,我们建议您探索 ELK 堆栈的其他部分:Kibana、Logstash 和 Beats。这些工具完善了 Elasticsearch 部署,使其可用于存储、检索和可视化来自系统和应用程序的各种数据。


2020-04-22 18:321075

评论

发布
暂无评论
发现更多内容

Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)

刘大猫

JVM 监控 Arthas 监控工具 perfcounter

征程 6 yolov5s-rgb-nhwc量化指南

地平线开发者

自动驾驶; 算法工具链 地平线征程6

佛山市南海区委书记顾耀辉一行莅临能飞航空,共探低空经济发展新局

科技热闻

YashanDB 知识库|JDBC 查 st_geometry 报内存分配失败?一行授权搞定!

数据库砖家

数据库

郎酒入选"2025外国人喜爱的中国品牌"

财见

Arcadis在最新的国际建筑成本报告中表示,日内瓦重新夺回了世界上最昂贵的城市的称号

财见

Voice Agent Camp 招募:GPT-4o 一周年,我们决定发起一个创业营丨超音速计划 2025

声网

iVX 研发基座技术与多厂商协作框架深度解析

代码制造者

构架 全栈低代码

原来鼠标的这个侧边键还能这样用!

程序员郭顺发

A10 vThunder 5.2.1-P12 LTS - 虚拟化应用交付控制器 (ADC)

sysin

A10

50系与40系显卡差别:ToDesk云电脑登顶?顺网云/海马云/青椒云差距多大?

Yan-英杰

AI 云电脑

扎克伯格:AR 眼镜会是未来的手机,VR 则是未来的电视;Manus AI 融资 7500 万美元,开放免费使用丨日报

声网

AIGC 创作者必备!梦精灵提示词管理器让创作效率起飞​

龙正哲

Apache Seatunnel & Amazon Bedrock 助力生成式 AI 应用规模化生产实践

亚马逊云科技 (Amazon Web Services)

A10 ACOS 5 - 专为现代应用程序设计的开放式云就绪操作系统

sysin

A10

哈尔滨等保测评、等保测评公司、机构怎么选

黑龙江陆陆信息测评部

A10 Thunder 5.2.1-P12 LTS - 应用交付与负载均衡

sysin

A10

HarmonyOS 如何实现传输中的数据加密

网罗开发

鸿蒙 HarmonyOS HarmonyOS NEXT

手把手教你如何利用CodeBuddy编写属于自己的AI助手

芯动大师

CodeBuddy首席试玩官

2个小时!我自己搭建了一套安全管理系统!

中烟创新

《算法导论(第4版)》阅读笔记:p39-p48

codists

算法

INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行

极限实验室

elasticsearch console

一键三连不求人!用 CodeBuddy 写个浏览器插件自动点赞、评论、收藏

不惑

CodeBuddy首席试玩官

行业首创!快手开源短视频内容质量评测标准KuaiMod!

快手技术

中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世

六月的雨在InfoQ

MCP CodeBuddy首席试玩官 MCP Server MCP头号玩家

等保测评、黑龙江等保。等保测评公司

黑龙江陆陆信息测评部

RocketMQ原理—消息读写的性能优化

量贩潮汐·WholesaleTide

RocketMQ

PySide vs PyQt:Python GUI开发史诗级对决,谁才是王者?

程序员晚枫

Python 开源 qt GUI

Easysearch 时序数据的基于时间范围的合并策略

极限实验室

Performance merge easysearch

【HarmonyOS next】ArkUI-X休闲益智猜字谜【基础】

RunkBear

iOS Developer HarmonyOS NEXT ArkUI框架

HarmonyOS NEXT 跑马灯组件详解

巴库一郎

鸿蒙 HarmonyOS HarmonyOS NEXT 实践分享

在Kubernetes集群上部署和管理JFrog Artifactory_文化 & 方法_Rancher_InfoQ精选文章