【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

评论

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

dart系列之:dart类中的泛型

程序那些事

flutter dart 程序那些事 11月日更

往ABAP gateway system上和CloudFoundry 部署HTML5应用

Jerry Wang

log SAP CloudFoundry 11月日更

直播带货系统都有什么功能?如何搭建?

风行无疆

来看看深度学习如何在文娱行业“落地”

博文视点Broadview

Apache APISIX 社区周报 | 2021 11.1-11.14

API7.ai 技术团队

云原生 API网关 社区周报 Apache APISIX

Vue项目优化打包——前端加分项

CRMEB

Scrum Master是什么?Scrum Master的职责是什么?和PM又有哪些区别?

PingCode

敏捷开发 PM Scrum Master

【高并发】通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程

冰河

Java 并发编程 多线程 高并发 异步编程

前端服务框架调研:Next.js、Nuxt.js、Nest.js、Fastify

智联大前端

node.js Vue 服务端 React

数据分片的原则和经验

编程宝库

系统架构 数据分片 编程宝库

一文详细分析公式树开源库

华为云开发者联盟

算法 数据 公式树 变异

uni-app技术分享| 10分钟实现一个简易uniapp视频通话

anyRTC开发者

uni-app 音视频 WebRTC 实时通信 视频通话

河南等保测评公司都有哪几家?都在哪里?

行云管家

网络安全 信息安全 数据安全 等级保护

三大重磅报告,莅临GOPS全球运维大会#324龙智展位即可获取!

龙智—DevSecOps解决方案

运维 gops

研究综述 | AI -自动化机器学习

索信达控股

机器学习 自动化机器学习 机器学习算法

架构训练营模块七作业 - 设计消息队列存储消息数据的 MySQL 表

李焕之

千万级学生管理系统的考试试卷存储方案

Steven

架构实战营

9个问题,带你掌握流程控制语句中的java原理

华为云开发者联盟

Java 变量 finally 流程控制 语句

Android Activity Deeplink启动来源获取源码分析

vivo互联网技术

android 源码解析 Activity

云小课 | DSC之数据水印,防止数据被盗用

华为云开发者联盟

版权保护 华为云 数据安全中心 数据水印 追踪溯源

在 Spring Boot 中使用搜索引擎 Elasticsearch

码语者

Spring Boot Elastic Search

软硬一体的算法实践,阿里云如何以算法实现场景 “再创新”?

阿里云视频云

阿里云 算法 视频超分 视频云 异构计算

令人不悦的–requests.exceptions.ProxyError

老表

Python Error 11月日更 ProxyError

Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

华为云开发者联盟

windows 漏洞 Windows漏洞 MS08-067 远程代码

如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量

Jerry Wang

Java SAP CloudFoundry 11月日更

基于OneData的数据仓库方法论

大数据技术指南

11月日更

Vue进阶(幺玖零):表单验证 trigger:‘blur‘ OR trigger:‘change‘ 区别

No Silver Bullet

Vue 表单校验 11月日更

springboot从数据库中获取application配置

小鲍侃java

11月日更

实战 | 超详细的Kafka集群操作

五分钟学大数据

11月日更

手把手带你玩转LiteOS Ping组件

华为云开发者联盟

协议 LiteOS ping 组件 数据包

软件架构治理 之 如何识别和定位架构问题

码猿外

微服务 架构设计 软件架构治理

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