写点什么

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

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

    阅读完需:约 12 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

介绍

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:32832

评论

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

得物视频编辑工具优化全指南

得物技术

性能优化 线程 视频特效 视频转码

详解UDS CAN诊断:DiagnosticSessionControl Service(SID:0X10)

不脱发的程序猿

嵌入式 汽车电子 ISO 14229 UDS诊断 诊断和通信管理功能单元

单一职责原则详解

杨充

python版本管理工具DVC

AIWeker

人工智能 版本管理 11月月更 dvc

Python数据可视化:如何选择合适的图表可视化?

不脱发的程序猿

Python Python数据可视化 选择合适的图表可视化? 数据分析可视化

读《程序是怎样跑起来的》体会

听风go

读书笔记 后端 计算机 计算机原理 读书总结

凝心聚力 开源共建 | 统信软件参与成立OpenKunlun开源固件社区

统信软件

开源 开源社区 开源技术

支持向量机-ROC曲线中的概率和阈值

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

「Go易错集锦」正确使用defer避免代码重复

Go学堂

golang 程序员 个人成长 defer 11月月更

制造业要用龙头带动整条产业链发展,阿里云智能制造加速器首次集结

B Impact

详解UDS CAN诊断:什么是UDS(ISO 14229)诊断?

不脱发的程序猿

嵌入式 汽车电子 ISO 14229 CAN诊断 UDS诊断

融云全球社交泛娱乐洞察,老资格的「游戏社交」还有哪些想象空间

融云 RongCloud

社交 泛娱乐社交

开闭原则详细介绍

杨充

Linux yum 命令

芯动大师

yum源 11月月更 Linux系统指令

华为云大数据平台,助力企业数字化转型成效明显

路过的憨憨

华为云桌面Workspace,让云上工作更高效!

路过的憨憨

Python数据可视化:类别比较图表可视化

不脱发的程序猿

Python Python数据可视化 数据分析可视化 类别比较型图表

华为云GaussDB 为企业数字化踩了一脚油门

爱科技的水月

研发管理如何度量「人效」

feijieppm

项目管理 研发效能 技术管理 文化 & 方法 效能度量

支持向量机-SVC的模型评估指标

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

企业办公新模式,随时随地云上协同!

秃头也爱科技

2022-11-29:查找重复的电子邮箱。以下数据中a@b.com是重复的,请写出sql语句。 DROP TABLE IF EXISTS person; CREATE TABLE person (

福大大架构师每日一题

数据库 福大大

汽配行业erp系统解决方案!

优秀

低代码 ERP系统 汽配行业

细说值传递、引用传递和地址传递

盐咔咔

编程语言 计算机基础 11月月更

Python 操作Mysql

度假的小鱼

pymysql 11月月更 Python操作Mysql

赫夫曼树编码实验报告

我是一个茶壶

数据结构 哈夫曼树 11月月更

一文了解 Go 标准库 strings 常用函数和方法

陈明勇

Go golang 字符串 11月月更 strings

数据治理:数据标准建设方法和流程

用友BIP

xxj-job服务端架构流程

IT巅峰技术

深度学习-浅谈keras的扩展性

AIWeker

深度学习 keras 11月月更

【web 开发基础】PHP中的数组 (41)

迷彩

php 数据结构 11月月更 关联数组 索引数组

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