k8s部署生产级elasticsearch+kibana 步骤、踩坑及解决方案

写在最前

本文中的流程思路大体上与 ECK 文档 相近,如果你已经在看这个文档,可以直接跳到踩坑及解决方案部分进行阅读。官方文档在 elasticsearch 存储相关设置,以及 kibana 配置公网可访问上有一些坑。
补充 filebeat 部署步骤:k8s部署 filebeat 步骤、踩坑及解决方案

支持版本

  • Kubernetes 1.18-1.22
  • Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS), and Amazon Elastic Kubernetes Service (EKS)
  • Elasticsearch, Kibana, APM Server: 6.8+, 7.1+

环境准备

  • Kubernetes Cluster。能正确创建pvc,能正确创建 LoadBalancer (笔者使用 K8S 1.20 版本,Amazon EKS 服务,pvc 使用 AWS EBS块存储卷,LoadBalancer 使用 AWS 经典负载均衡器)
  • Linux 运行环境,配置好 kubectl

部署

ECK

ECK 本质是一个elastic 家族的 operator,部署直接输入如下命令:

kubectl create -f https://download.elastic.co/downloads/eck/1.8.0/crds.yaml
kubectl apply -f https://download.elastic.co/downloads/eck/1.8.0/operator.yaml

返回如下结果:
部署 ECK
查看 operator 运行日志,没有异常:
查看 ECK 日志
查看运维工具,配置正常:
kube-ops-view ECK

elasticsearch

创建配置文件

创建 es.yml 配置文件

---
# 这一块是使用 EBS csi driver 创建性能更好的 gp3 块存储,详见下方注释
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aws-gp3
  namespace: elastic-system
provisioner: ebs.csi.aws.com # EBS csi driver 需要提前部署,也可以使用官方的 kubernetes.io/aws-ebs,官方的不支持 gp3
parameters:
  type: gp3 # 官方的这里填 gp2
reclaimPolicy: Delete # 当pod被回收,存储是否需要删除,Delete是删除,Retain是保留
allowVolumeExpansion: true # 是否允许存储卷扩展大小
volumeBindingMode: WaitForFirstConsumer

---

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: es
  namespace: elastic-system
spec:
  version: 7.14.1 # 这里填自己要用的版本
  nodeSets:
  - name: default
    count: 1 # 测试环境1节点就够了,生产 >= 3
    config:
      node.master: true
      node.data: true
      node.ingest: true
      node.store.allow_mmap: false
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data # 这里不要修改,进阶用法参考 ECK 官方文档
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 100Gi # 配置默认大小,allowVolumeExpansion为true后续可以扩展
        storageClassName: aws-gp3 # StorageClass 名称

StorageClass 参考 官方文档,官方 provisioner 默认支持 gp2、io1 等,高性能 gp3 暂未支持(截止到2022/01/13)。

部署

kubectl apply -f es.yml

验证

验证健康状态,Health 需要是 green

kubectl get elasticsearch -n elastic-system

获取 HEALTH

验证pod状态,需都为 Ready,STATUS 为 Running

kubectl get pods --selector='elasticsearch.k8s.elastic.co/cluster-name=es' -n elastic-system

验证能否调用 API (需要用户名密码)

PASSWORD=$(kubectl get secret es-es-elastic-user -n elastic-system -o go-template='{{.data.elastic | base64decode}}')
kubectl port-forward service/es-es-http 9200 -n elastic-system # 另一个窗口运行
curl -u "elastic:$PASSWORD" -k "https://localhost:9200"

验证 API

kibana

创建配置文件

创建 kibana.yml 配置文件

apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: kibana
  namespace: elastic-system
spec:
  version: 7.14.1
  count: 1
  elasticsearchRef:
    name: es # 填上面 elasticsearch 的名称,需要完全一致
  http:
    service:
      spec:
        type: LoadBalancer # 默认是 ClusterIP,不能直接访问
        ports:
          - port: 80 # 这里是把原有的 5601 端口 映射为 80 端口,方便访问以及使用域名解析
            targetPort: 5601
    tls:
      selfSignedCertificate:
        disabled: true # 如果是生产环境,建议设置 tls 的配置,这样才能加密数据

部署

kubectl apply -f kibana.yml

验证

验证健康状态,Health 需要是 green

kubectl get kibana-n elastic-system

验证pod状态,需都为 Ready,STATUS 为 Running

kubectl get pod --selector='kibana.k8s.elastic.co/name=kibana' -n elastic-system

登录验证

kubectl get secret kibana-es-elastic-user -o=jsonpath='{.data.elastic}' -n elastic-system | base64 --decode; echo # 获取密码,用户名默认为 elastic
kubectl get service kibana-kb-http -n elastic-system # 复制 external ip 到浏览器,打开输入账户密码,登录成功

登陆前
登陆后

踩坑及解决方案

elasticsearch pvc 配置不对导致无法正确启动

如果你是按照官方文档如下配置直接照抄,那 elasticsearch 无法正确启动。
官方文档
原因是官方参考配置中的 storageClassName: standard 不存在,你可以选择删除这一行选择默认配置,也可以选择查看当前支持的 storageClass:

kubectl get sc -n elastic-system

支持的 StorageClass
可以发现,默认是 gp2,还有一个是我在 yaml 中自己定义的 aws-gp3,其实自己定义一个能确保一定存在,不容易出错。

elasticsearch 存储配置对了但无法启动,不配置存储能启动

检查是否 provisioner 是否能开相应的云资源

  1. 官方的不支持 AWS gp3
  2. ebs csi driver 是否正常启动
  3. node 是否有权限控制云资源(我遇到的是 IAM role 没有创建设置 EBS 块存储的权限,增加相应的 IAM policy 权限后,就正常了)

kibana 默认配置下不能访问

应该修改为 LoadBalancer 或者 ingress,也可以选择把默认的 5601 端口映射为80,这样可以把公司的域名CNAME 到 external ip 上,方便直接访问。

...
http:
    service:
      spec:
        type: LoadBalancer # 默认是 ClusterIP,不能直接访问
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要安装和部署ElasticsearchKibana,你可以按照以下步骤进行操作: 1. 首先,你需要从Elasticsearch官网下载Elasticsearch的安装包。你可以使用以下命令来下载最新版本的Elasticsearch安装包: ``` wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.0.tar.gz ``` 2. 下载完成后,解压缩安装包。你可以使用以下命令来解压缩文件: ``` tar -xzf elasticsearch-6.7.0.tar.gz ``` 3. 进入解压缩后的目录: ``` cd elasticsearch-6.7.0 ``` 4. 接下来,你需要修改Elasticsearch的配置文件。你可以使用任何文本编辑器打开`config/elasticsearch.yml`文件,并进行必要的配置更改。例如,你可以修改绑定的IP地址、端口号等。 5. 完成配置后,你可以启动Elasticsearch。使用以下命令启动Elasticsearch: ``` ./bin/elasticsearch ``` 6. 启动后,你可以访问`http://localhost:9200`来验证Elasticsearch是否成功启动。你应该能够看到Elasticsearch的信息。 7. 现在,你可以继续安装和部署Kibana。从Kibana官网下载Kibana的安装包。你可以使用以下命令来下载最新版本的Kibana安装包: ``` wget https://artifacts.elastic.co/downloads/kibana/kibana-6.7.0-linux-x86_64.tar.gz ``` 8. 下载完成后,解压缩Kibana的安装包。你可以使用以下命令来解压缩文件: ``` tar -xzf kibana-6.7.0-linux-x86_64.tar.gz ``` 9. 进入解压缩后的目录: ``` cd kibana-6.7.0-linux-x86_64 ``` 10. 接下来,你需要修改Kibana的配置文件。你可以使用任何文本编辑器打开`config/kibana.yml`文件,并进行必要的配置更改。例如,你可以修改Elasticsearch的连接地址、端口号等。 11. 完成配置后,你可以启动Kibana。使用以下命令启动Kibana: ``` ./bin/kibana ``` 12. 启动后,你可以访问`http://localhost:5601`来访问Kibana的Web界面。在Kibana中,你可以进行数据可视化和分析等操作。 通过按照以上步骤,你可以成功安装和部署ElasticsearchKibana。记得根据你的具体需求进行配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王元恺David

感谢你的支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值