• 前提

    • 在win上安装docker desktop,没有网络限制,而且,打开kubernetes之后,很快就安装启动好了。
    • 在win上安装scoop,有网络限制,需要访问github raw的文件内容,安装方法 官网 有安装命令 > Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time > irm get.scoop.sh | iex
      • 为什么要安装scoop, 因为可以在win的机器上,快速安装命令行工具。
      • 因为windows的docker desktop安装了之后,没有命令行工具 kubectl 和 docker了 (20230228近期安装更新的)
    • 如果本身是mac环境的也是需要安装docker desktop或者虚拟机linux系列上面部署k8s集群也无妨。
    • 对elasticsearch以及kibana的知识,本文没有细述,需要另外查找
    • 一些内容是通过chatgpt返回的过程和方法,所以基本上没有去网上查其他的资料。主要还是自己的认知,然后把chatgpt的零碎的内容整合起来,可能会比百度更快,但是,如果真的遇到问题,无法得到答案,自己排查,比如排查了2天,ssl连接不上elasticsearch,因为k8s的service的selector配错了,是app=elasticsearch-master, 我漏了-master
  • 其他的一些环境安装
    • 通过上面的scoop,在win上面安装docker 和kubectl ,但是对于curl命令powershell有自己的解释,所以建议安装git,就会有自带的git bash。git bash运行方法,可以右键选择启动gi t bash,或者在vscode编辑器的终端中选择git bash的终端。
    • 在win上面安装tightVNC, 配置好密码,其他默认。然后在mac上的app store里面安装ripple remote就可以远程连接局域网的win主机了。如果有打不出的字符,win+ R启动osk屏幕键盘。
    • 用scoop安装base64,因为后面elasticsearch的密码存在了k8s的secret里面,需要base64解码
    • 用scoop安装jq,对json内容进行解析和操作,因为elasticsearch返回的内容多为json格式。
    • 用scoop安装helm scoop install helm
    • 如果可以创建共享文件夹,或者用nas硬盘的话,vscode在两台机器上面是可以同时编辑同一个文件的。这样就好像粘贴板一样。远程桌面也可以复制文本,复制文件到共享目录下面
  • 正文
    • 在安装好docker desktop(k8s)的机器上运行命令, 启动elasticsearch 和kibana
    • 如果kibana查找elasticsearch失败了。用helm uninstall kibana也不能彻底删除干净,再次启动的时候要换个名字了。
    • 相关的helm chart的使用文档和chart的文件在git上。链接在这ELK Helm Chart
# 安装helm的chart的来源
helm repo add elastic https://helm.elastic.co # 可以另外创建一个k8s的namespace
kubectl create namespace elastic-system # 需要注意的是,如果docker desktop,k8s集群只有一个节点,默认是replicas=3
# 导致唯一在running状态下的pod elasticsearch-master-0一直不是ready状态
# 好像是还有一个pushto not ready的一个参数可以设置,但是效果我没有去看
# 所以务必加上 --set replicas=1, 否则kibana启动直接失败
helm install elasticsearch elastic/elasticsearch --set replicas=1 -n elastic-system # 启动之后会得到一下的log打印出来
1. Watch all cluster members come up.
$ kubectl get pods --namespace=elastic-system -l app=elasticsearch-master -w
2. Retrieve elastic user's password.
$ kubectl get secrets --namespace=elastic-system elasticsearch-master-credentials -ojsonpath='{.data.password}' | base64 -d
3. Test cluster health using Helm test.
$ helm --namespace=elastic-system test elasticsearch
# kibana启动多了这个
3. Retrieve the kibana service account token.
$ kubectl get secrets --namespace=elastic-system kibana-kibana-es-token -ojsonpath='{.data.token}' | base64 -d #第二个是为了获取kibana的用户elastic的密码的,可以看到还有elasticsearch-master-certs 的secret
#也可以通过base64解码,然后把内容生成3个证书文件
#这样就不用通过 k8s的拷贝命令, 来吧pod中的证书文件给复制下来了
kubectl cp elasticsearch-master-0:/usr/share/elasticsearch/config/certs ./certs #第一个命令,是查看有没有elasticsearch的pod,处于running,并且ready的状态
# 其他多余的就不细说了。这一步是必要的过程
#elasticsearch的pod READY之后,可以启动kibana
helm install kibana elastic/kibana -n elastic-system # 如果失败了重新来,需要改名字比如后面加数字,因为uninstall不干净,留了一个configmap,
# 就算删除之后,helm也提示名称重复,暂时不知道原因
# kubectl delete all -all 或者 kubectl delete all -n elastic-system也不行
helm uninstall kibana
helm install kibana2 elastic/kibana -n elastic-system #另外说一句,虽然elasticsearch是作为stateful部署的,但是数据的持久化,还是靠的pvc
#否则一旦pod重启数据就没有了,这个helm的chart已经给我们写好了,如果需要额外配置,需要用values.yml添加需要修改的参数,然后启动 # 这个时候查看k8s中,可以看到elasticsearch已经有一个service是提供给kibana来通信的。
# 但是我们自己需要去访问kibana, 或者对elasticsearch发送请求,如curl或者客户端
# 就需要把kibana和elasticsearch暴露到节点之外。为了长期部署的方便,不建议使用port-forward
# --address 0.0.0.0这样其他局域网的机器也可以访问
kubectl port-forward service/kibana-kibana 5601:5601 --address 0.0.0.0 -n elastic-system # 需要另外创建2个service, type是nodeport,但是nodeport的端口的范围是固定的30000到多少
# nodeport命令里面不知道怎么没有selector这个参数了,只能输出文件之后修改selector
# 这文件就不列出来了。查看label的方法如下
kubectl get pods -n elastic-system --show-labels # 先导出文件,dry-run不能少,端口可以自己定义,我这里写了9200有点关系的32400
kubectl create service nodeport my-elasticsearch-service --tcp=9200:9200 --node-port=32400 -o yaml --dry-run=client > elasticsearchservice.yml # 修改文件中的selector的部分
# 我就是因为少了-master导致ssl链接不上,排查了2天
把 app: my-elasticsearch-service 改成 app: elasticsearch-master # 然后启动 apply create都可以
kubectl apply -f .\elasticsearchservice.yml # 然后是kibana的service, 我选了和5601相近的32601
kubectl create service nodeport my-kibana-service --tcp=5601:5601 --node-port=32601 -o yaml --dry-run=client > kibanaservice.yml # 然后启动
kubectl create -f .\kibanaservice.yml
  • 验证

    • 到了这里就配置好了。感觉就是4个命令的事情
    • 验证的一些步骤
# 看看elasticsearch和kibana是不是正常启动着,这个在上面的过程中就会看到
# 比如说docker desktop里面有没有elasticsearch和kibana的容器在运行着
# 通过kubectl get pod -n elasticsearch, 或者get service看看这些服务 # 连接kibana
# 在本机的话就是访问 localhost:32601就能看到kibana的登录页面
# 通过上面获得密码的方法就不用进elasticsearch去找密码了。我也不知道怎么找密码,暂时只知道怎么重置密码,密码在启动log里面
# 进elasticsearch的方法
kubectl exec -it elasticsearch-master-0 -n elastic-system -- /bin/bash # 进kibana的方法
kubectl exec -it kibana-kibana-XXXpodname -n elastic-system -- /bin/bash # 获取密码的方法
kubectl get secrets --namespace=elastic-system elasticsearch-master-credentials -ojsonpath='{.data.password}' | base64 -d # 进去之后因为elasticsearch里面什么数据也没有,想要去创建index pattern,只会出现一个添加integration的界面,所以看不出这个pod的数据是持久的。
# 要验证这个elasticsearch的数据是持久的,可以添加一个用户。然后把docker关了重启,然后再登录进去
# 然后发现这个用户还在。这里我说的就比较模糊了。不细说的原因是因为我也没有对elk掌握的很深,elk知识,不是我两句话能说的清的。 # 然后看一下elasticsearch的数据现在没办法用index patten映射,可以先去dev tools里面加2条数据
# kibana据说是nodejs前端,devtools上发送的内容是不会直接去elasticsearch服务的,是有后台转发给elasticsearch
# 在kibana的dev tool的console随便加点不多的数据,可以随时删掉
POST products/_bulk
{"index":{"_id":1}}
{"name":"Wine - Maipo Valle Cabernet","price":152,"in_stock":38,"sold":47,"tags":["Beverage","Alcohol","Wine"],"description":"Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem. Integer tincidunt ante vel ipsum. Praesent blandit lacinia erat. Vestibulum sed magna at nunc commodo placerat. Praesent blandit. Nam nulla. Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede. Morbi porttitor lorem id ligula.","is_active":true,"created":"2004\/05\/13"}
{"index":{"_id":2}}
{"name":"Tart Shells - Savory","price":99,"in_stock":10,"sold":430,"tags":[],"description":"Pellentesque at nulla. Suspendisse potenti. Cras in purus eu magna vulputate luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus vestibulum sagittis sapien. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam vel augue. Vestibulum rutrum rutrum neque. Aenean auctor gravida sem.","is_active":true,"created":"2007\/10\/14"} # 添加好了之后,去kibana的dataviews那里就可以看到添加elasticsearch的index pattern。不再是啥也没有了。
# 在登录kibana的时候,也基本上验证了kibana成功连接上elasticsearch了。 # 连接elasticsearch
# 没有用到客户端,可以用nodejs, python,或者java
# 这里用curl试一下,如果是windows环境,要在git bash里面用curl命令,随便用的一个命令
# 改成自己的password
curl --insecure -u elastic:passwordXXXXXX -H "Content-Type:application/x-ndjson" -XGET 'https://localhost:32401/orders/_search?scroll=1m' -d '{ "query": { "match_all": {} } }' # 返回没这个index, 随便找的命令,当然没有这个index
{"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [orders]","resource.type":"index_or_alias","resource.id":"orders","index_uuiuid":"_na_","index":"orders"}],"type":"index_not_found_exception","reason":"no such index [orders]","resource.type":"index_or_alias","resource.id":"orders","iexndex_uuid":"_na_","index":"orders"},"status":404} # 在elasticsearch自己的pod上因为我当时去排查问题
curl --insecure --cacert config/cert/ca.crt -u elastic:passwordXXX -H "Content-Type:application/json" -XGET 'https://localhost:9200/orders/_search?scroll=1m' -d '{ "query": { "match_all": {} } }' # 在kibana的pod上
# 在pod上都是正常的,所以是自己的service配错了
# charles或者用wireshark抓包抓不到dev tool的console的请求,才发现是前端的后台发送的请求
curl --insecure -u elastic:passwordXXXX -H "Content-Type:application/json" -XGET 'https://elasticsearch-master:9200/orders/_search?scroll=1m' -d '{ "query": { "match_all": {} } }'
  • 题外话

    • 那么现在部署好了。可以愉快的玩耍起来了。
    • 其实在helm的chart里面还有logstash以及2个beat这几个主力,其实这些也不占什么内存,就本地部署测试一下也是可以的
    • helm chart里面把密码和证书部署在k8s中,这个内容,我也没有去细看,
    • 包括似乎还有kibana获取短时有效的elasticsearch的token, 和elasticsearch形成信任关系这个步骤也不清楚,如果是自己部署,要把token从elasticsearch启动log里面粘贴出来,贴到kibana的初始页面,这样才回到用户登录的界面,默认管理员用户elastic
    • 新的docker-desktop居然不用那么费劲,以前是有个github上的sh, 执行获得需要的包,而且最新的docker-desktop的包所对应的版本可能没有。所以要去release note里面找️一版本的dockerdesktop。坑爹的是,安装了之后,没有命令行docker和kubectl, UI界面的功能倒是全了,终于想通了。
    • 证书有什么用不知道,ssl去连接的时候,还是提示要authentication
    • 这个helm的elasticsearch的chart 用一些附加的配置的命令 helm install kibana elastic/kibana -f values.yaml 或者把这个git下载下来,然后在本地启动。helm的使用方法就不多说了。
    • 好,暂时先说这么多
  • 最后想说句话,本来觉得笔记贴过来很快,写个博客。内容也比较简单。用处可能会有一点点。但是感觉写了好久,快2个小时。

helm在k8s上部署Elasticsearch和Kibana的更多相关文章

  1. 在k8s上部署日志系统elfk

    日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...

  2. kubernetes之三 使用kubectl在k8s上部署应用

    在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...

  3. 优化:在k8s上部署的gitlab

    gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...

  4. 使用Rancher在K8S上部署高性能PHP应用程序

    介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...

  5. 【BIGDATA】在Centos上部署ElasticSearch 7.3.2及kibana

    一.下载: 首先,下载ElasticSearch和kibana安装包,版本自选,官方下载页https://www.elastic.co/cn/downloads/ 二.版本检查 很重要的一步,要检查C ...

  6. k8s上安装elasticsearch集群

    官方文档地址:https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-quickstart.html yaml文件地址:https://dow ...

  7. 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群

    作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...

  8. 在k8s上部署第一个php应用

    一.搭建nginx+php 1.站点配置文件 1.1创建nginx-configmap.yaml [root@master k8s]# cat nginx-configmap.yaml apiVers ...

  9. k8s 上部署 Redis 三主三从 集群

    目录 介绍 为什么要使用Redis? 什么是Redis群集? 在Kubernetes中部署Redis集群 从 GitHub 上下载: 创建pv 创建statefulset 创建service 初始化 ...

  10. 通过重新上传修改后的docker镜像来在kubeapps上实现k8s上部署的nginx版本更新,回退等

    docker操作:制作自定义镜像 # docker下载官方nginx镜像 docker pull nginx # 基于该镜像运行一个容器 docker run -it -d --name nginx_ ...

随机推荐

  1. NavigationDuplicated Navigating to current location (“/XXX”) is not allowed

    导航不允许导航到当前位置https://stackoverflow.com/questions/57837758/navigationduplicated-navigating-to-current- ...

  2. sha1_b64_scrape

    过无限debugger:https://www.cnblogs.com/hkwJsxl/p/16702143.html 网站 aHR0cHM6Ly9hbnRpc3BpZGVyOC5zY3JhcGUuY ...

  3. CVE-2007-4556 s2-001

    漏洞名称 S2-001 远程代码执行 利用条件 WebWork 2.1 (with altSyntax enabled), WebWork 2.2.0 - WebWork 2.2.5, Struts ...

  4. 如何在 Nuxt 3 中使用 wavesurfer.js

    安装 wavesurfer.js 在项目中安装 wavesurfer.js npm install --save wavesurfer.js 常规方式引入 如果你的根目录中没有 components ...

  5. 梯度下降算法 Gradient Descent

    梯度下降算法 Gradient Descent 梯度下降算法是一种被广泛使用的优化算法.在读论文的时候碰到了一种参数优化问题: 在函数\(F\)中有若干参数是不确定的,已知\(n\)组训练数据,期望找 ...

  6. 聚合查询、分组查询、ORM中如何给表再次添加新的字段、F与Q查询、ORM查询优化、ORM事务操作、ORM常用字段类型、ORM常用字段参数、Ajax、数据编码格式(Content-Type)、ajax携带文件数据

    今日内容 聚合查询 在ORM中支持单独使用聚合函数,需要使用aggregate方法. 聚合函数:Max最大.Min最小.Sum总和.Avg平均.count统计 from django.db.model ...

  7. 近邻取样插值方法缩放BGRA图片数据

    近邻取样插值原理: 对于缩放后图片中的某点 (Dx, Dy) 对应于原图片中的点 (Sx, Sy),它们之间存在如下的比例关系: (Sx-0)/(SW-0)=(Dx-0)/(DW-0) (Sy-0)/ ...

  8. Axure 环境进度条

    步骤一:拖拉摆放好相关控件 1.4个半圆环,一个白色上半圆环 (上白),一个白色下半圆环 (下白),一个灰色上半圆环 (上灰),一个灰色下半圆环 (下灰),排放层次为: 下灰<下白<上灰& ...

  9. three.js一步一步来--如何画出一根线

    下面是画出线的代码,可以参考一下哟~~ <template> <div style="width:1000px; height:800px"> <p& ...

  10. 遗传算法求TSP问题

    一.实验内容及目的 本实验以遗传算法为研究对象,分析了遗传算法的选择.交叉.变异过程,采用遗传算法设计并实现了商旅问题求解,解决了商旅问题求解最合适的路径,达到用遗传算法迭代求解的目的.选择.交叉.变 ...