写点什么

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

评论

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

Graphic Inspector for mac(mac图像检查器)

春天的风暖暖的

ForkLift for Mac(文件管理程序)

春天的风暖暖的

用AirPods控制的创新iPhone游戏:RidePods技术解析

qife122

ios开发 空间音频

两种不同的并行

Miracle

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI开发框架需求洞察

qife122

开源框架 AI开发

Topaz Photo Pro for Mac(智能图像增强软件)

春天的风暖暖的

FotoMagico for Mac(专业幻灯片制作软件)

春天的风暖暖的

Affinity Designer for Mac(强大的矢量图设计软件)

春天的风暖暖的

Tinderbox 11 for Mac(mac笔记工具)

春天的风暖暖的

Processing:创意编程与可视化的强大工具

程序员架构进阶

可视化 数据可视化 10月月更 Processing

LunarBar for mac(菜单栏极简日历工具)

春天的风暖暖的

Bartender 6 for mac(菜单栏图标管理软件)

春天的风暖暖的

DxO PhotoLab 9 ELITE Edition for mac(全新的RAW照片编辑器)

春天的风暖暖的

企业选择YashanDB的核心考量因素解析

数据库砖家

Algoriddim djay Pro Ai for Mac(DJ混音软件)

春天的风暖暖的

Squeezer for Mac(图片压缩优化工具)

春天的风暖暖的

企业数字化转型中的YashanDB角色与价值解析

数据库砖家

OSXBytes Lock-It for Mac(应用程序加密工具)

春天的风暖暖的

Cisdem Video Converter for Mac(视频格式转换器)

春天的风暖暖的

Duplicate Photos Fixer Pro for Mac(重复照片清理软件)

春天的风暖暖的

企业数字化转型战略中的YashanDB数据库角色定位

数据库砖家

Mac Mouse Fix for Mac mac鼠标平滑滚动工具

春天的风暖暖的

在AI技术唾手可得的时代,挖掘用户真实需求成为产品成功的关键——某知名设备电量监控工具需求探索

qife122

功能优化 产品需求分析

[大厂实践] CPU 性能拆解:利用率如何影响性能

俞凡

架构

OpenAI炸场!Sora 2正式发布,它不只是个视频模型,更是一个社交宇宙!

hepingfly【gzh:和平本记】

AI sora

MediaInfo for mac(媒体信息检测软件)

春天的风暖暖的

YT Saver for Mac(视频下载和转换器)

春天的风暖暖的

FxFactory 8 Pro for Mac(视觉特效处理包)

春天的风暖暖的

Swinsian for Mac(音乐播放器)

春天的风暖暖的

Mac电脑清理工具:OSXBytes Remove-It for Mac

春天的风暖暖的

DVD-Cloner XR for mac(DVD复制刻录)

春天的风暖暖的

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