写在最前
支持版本环境准备 部署
ECKelasticsearch
创建配置文件部署验证 踩坑及解决方案
elasticsearch pvc 配置不对导致无法正确启动elasticsearch 存储配置对了但无法启动,不配置存储能启动kibana 默认配置下不能访问
写在最前本文中的流程思路大体上与 ECK 文档 相近,如果你已经在看这个文档,可以直接跳到踩坑及解决方案部分进行阅读。官方文档在 elasticsearch 存储相关设置,以及 kibana 配置公网可访问上有一些坑。
TODO: 后续补充 filebeat 安装步骤
Kubernetes 1.18-1.22Google 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
返回如下结果:
查看 operator 运行日志,没有异常:
查看运维工具,配置正常:
创建 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
验证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"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 无法正确启动。
原因是官方参考配置中的 storageClassName: standard 不存在,你可以选择删除这一行选择默认配置,也可以选择查看当前支持的 storageClass:
kubectl get sc -n elastic-system
可以发现,默认是 gp2,还有一个是我在 yaml 中自己定义的 aws-gp3,其实自己定义一个能确保一定存在,不容易出错。
检查是否 provisioner 是否能开相应的云资源
- 官方的不支持 AWS gp3ebs csi driver 是否正常启动node 是否有权限控制云资源(我遇到的是 IAM role 没有创建设置 EBS 块存储的权限,增加相应的 IAM policy 权限后,就正常了)
应该修改为 LoadBalancer 或者 ingress,也可以选择把默认的 5601 端口映射为80,这样可以把公司的域名CNAME 到 external ip 上,方便直接访问。
... http: service: spec: type: LoadBalancer # 默认是 ClusterIP,不能直接访问
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)