• 前提

    • 在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. ffmpeg库安装及入门指南(Windows篇)- 2022年底钜献

    最近项目需要,使用了 ffmpeg 做摄像头视频采集和串流.这几天有点时间,打算把相关的一些知识记录分享一下. 在撰写本文时,我又在另外一台电脑上把 ffmpeg 重新安装了一遍,所以绝对真实靠谱!如 ...

  2. 连接MySql时提示%d format: a number is required, not str

    代码: sql = "select * from appelementinfo" coon = pymysql.connect(user='root', password='', ...

  3. vue项目引入echarts柱状图

    一.components文件下引入 barCharts.vue文件 <template> <div :class="className" :style=" ...

  4. 基于 Traefik 的激进 TLS 安全配置实践

    前言 Traefik是一个现代的HTTP反向代理和负载均衡器,使部署微服务变得容易. Traefik可以与现有的多种基础设施组件(Docker.Swarm模式.Kubernetes.Marathon. ...

  5. [Python]Python调用Matlab (Pycharm版本)

    目录 第一步:生成Build文件夹 第二步: 复制build文件夹到Pycharm下 第三步:调用代码 第一步:生成Build文件夹 C:\Program Files\MATLAB\R2016a\ex ...

  6. [WPF]DataContext结果不显示

    namespace DataContext_ItemSource_Demo { public class Person { public string Name; } public class Vie ...

  7. visualstudio2017 community版本,有点失去信心了,同样两行代码,外观看不出任何区别,但是一个报错

    不多废话,先上代码 注意查看函数fputs_FILE,该函数的两行代码fopen_s是同样的,但事实上: 第一条fopen_s执行起来会报错,但是第二条就不会!!! /* 练习:获取用户键盘输入,写入 ...

  8. ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析

    目录 建表语法 数据处理 汇总的通用规则 AggregateFunction 列中的汇总 嵌套结构数据的处理 资料分享 参考文章 SummingMergeTree引擎继承自MergeTree.区别在于 ...

  9. 特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:技术知识前置【一】-文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评KG生产质量保障

    特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:技术知识前置[一]-文本匹配算法.知识融合学术界方案.知识融合业界落地方案.算法测评KG生产质量保障 ...

  10. Ubuntu 安装 samba 服务器

    下载 samba 工具 sudo apt install samba samba-common 配置 sudo vim /etc/samba/smb.conf // 复制到san.conf最下面 [u ...