10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

在 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:321136

评论

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

亲身体验告诉你:亚马逊云科技海外服务器是否值得一试?

热爱编程的小K

服务器 亚马逊 #科技 Amazon EC2 云服务器

低代码观点分享文,邀您来讨论

inBuilder低代码平台

低代码平台

数据流图:一篇文章教你如何轻松画出来

职场工具箱

流程图 教程分享 绘图工具

阿里云全球宕机:从阿里云故障看企业IT挑战

轶天下事

阿里云的故障是一次意外还是一次危机?

轶天下事

Perfectly Clear Workbench for mac 智能图像清晰处理工具推荐

加油,小妞!

图像处理

服务器 突然断电有什么危害

Geek_f19a80

如何在 Python 中执行 MySQL 结果限制和分页查询

小万哥

Python 程序员 软件 后端 开发

Console LDAP 配置解密

极限实验室

console ldap

AI应用新时代的起点,亚马逊云科技加速大模型应用

不叫猫先生

人工智能 大语言模型 Amazon CodeWhisperer

Amazon EC2使用测评

查拉图斯特拉说

服务器 亚马逊云科技 EC2

阿里云全球性故障引发技术圈热议,企业IT应急应该怎么办?

轶天下事

从“浮云”到“冰山”:华为云安全的绝世“五功”

轶天下事

MacOS系统的硬件信息扫描工具:EtreCheck pro for Mac

加油,小妞!

etrecheckpro 硬件信息扫描工具

环境变量配置无效?

矩视智能

深度学习 机器视觉

选购护眼台灯,全网都没有说清一个关键点!——照度均匀度

电子信息发烧客

KK 架构训练营 - Week3

jjn0703

架构

阿里云严重故障,全线产品受影响(已恢复)

轶天下事

AWS云服务器EC2实例进行操作系统迁移

乌龟哥哥

AWS Amazon EC2

Mac电脑硬件信息查看 EtreCheckpro 激活最新版

胖墩儿不胖y

Mac软件推荐 硬件信息检查工具

华大北斗荣获2023年度卫星导航定位科技进步奖特等奖

江湖老铁

一起学Elasticsearch系列-Query DSL

Java随想录

Java 大数据 ES

CnosDB 狂欢!全面支持 Helm 部署,轻松搞定你的分布式时序数据库!

CnosDB

开源 时序数据库 CnosDB

2.4.0 Milky Way 强势登场!新功能大爆炸,让你High翻全场!

CnosDB

开源 时序数据库 CnosDB

阿里云全球大崩溃是意外?盘点那些自称安全的云厂商

轶天下事

强大好用的shell:shell命令

小齐写代码

文心一言 VS 讯飞星火 VS chatgpt (133)-- 算法导论11.2 5题

福大大架构师每日一题

福大大架构师每日一题

为什么说Kstry是业务架构首选框架

lykan

微服务 后端 并发 规则引擎 流程编排

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