• 前提

    • 在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. 软件开发目录规范、python常用内置模块

    编程思想的转变 1.面条版阶段 所有的代码全部堆叠在一起.可以看成是直接将所有的数据放在C盘        视频.音频.文本.图片 2.函数版阶段 根据功能的不同封装不同的函数.可以看成是将C盘下的数 ...

  2. WCH沁恒 CH37系列芯片选型以及常见问题的处理(CH376/CH378)

    选型 型号 接口 功能 备注 电源 CH372 并口 USB_Device 全速 USB 设备接口,兼容 USB V2.0 3.1-3.6 4.2-5.4 CH374 SPI/并口 Host/Devi ...

  3. DTMF2num拨号音识别

    说明 很多出题人可能会把手机或者其他设备打电话的拨号音作为一个题目技能中的考察点. 什么是DTMF? 双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频.每按一个键就发送一个高频 ...

  4. 使用 Helm 安装 MQTT 服务器-EMQX

    EMQX ️ Info: 使用 EMQX 通过 Helm3 在 Kubernetes 上部署 EMQX 4.0 集群 | EMQ emqx/deploy/charts/emqx at main-v4. ...

  5. 基于ERNIELayout&pdfplumber-UIE的多方案学术论文信息抽取

    本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5196032?contributionType=1 基于ERNIELayout& ...

  6. LeetCode HOT 100:验证二叉搜索树(从左右子树获取信息进行推导)

    题目:98. 验证二叉搜索树 题目描述: 给你一个二叉树,让你判断该二叉树是否是二叉搜索树.什么是二叉搜索树呢?就是某一个节点的左子树上的所有节点的值都小于当前节点,右子树上的所有节点值都大于当前节点 ...

  7. SQLSERVER 的复合索引和包含索引到底有啥区别?

    一:背景 1. 讲故事 在 SQLSERVER 中有非常多的索引,比如:聚集索引,非聚集索引,唯一索引,复合索引,Include索引,交叉索引,连接索引,奇葩索引等等,当索引多了之后很容易傻傻的分不清 ...

  8. BBS升级版

    BBS项目 项目的前期准备 1.django2.2 创建一个django目录 (需要配置环境变量和数据库) 'DIRS': [os.path.join(BASE_DIR, 'templates'), ...

  9. P8796 [蓝桥杯 2022 国 AC] 替换字符

    题面 给定一个仅含小写英文字母的字符串 \(s\) 和 \(m\) 次操作,每次操作选择一个区间 \([l_i,r_i]\) 将 \(s\) 的该区间中的所有字母 \(x_i\) 全部替换成字母 \( ...

  10. day09-AOP-02

    AOP-02 4.问题提出 在上一篇的MyProxyProvider类中,我们的输出语句功能比较弱,在实际开发中,我们希望是以一个方法的形式,嵌入到真正执行的目标方法前,怎么办? 1.使用土方法解决 ...