eck 简介 Elastic Cloud on Kubernetes (ECK)可以基于 kubernetes operator 在 kubernetes 集群中自动化部署、管理、编排 Elasticsearch、Kibana、APM Server 服务。
ECK 功能绝不仅限于简化 Kubernetes 上 Elasticsearch 和 Kibana 的部署工作这一项任务,ECK 专注于简化所有后期运行工作,例如:
管理和监测多个集群 轻松升级至新的集群版本 扩大或缩小集群容量 更改集群配置 动态调整本地存储的规模(包括 Elastic Local Volume(一款本地存储驱动器)) 执行备份 在 ECK 上启动的所有 Elasticsearch 集群都默认受到保护,这意味着在最初创建后便已启用加密并受到默认强密码的保护。
官网:https://www.elastic.co/cn/elastic-cloud-kubernetes
项目地址:https://github.com/elastic/cloud-on-k8s
部署 ECK 参考:
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-quickstart.html
https://github.com/elastic/cloud-on-k8s/tree/master/config/recipes/beats
https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-volume-claim-templates.html
https://github.com/elastic/cloud-on-k8s/tree/master/config/samples
环境信息: 准备 3 个节点,这里配置 master 节点可调度 pod:
[root@master01 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master01 Ready master 7d v1.18.2 node01 Ready 7d v1.18.2 node02 Ready 7d v1.18.2 1 2 3 4 5 eck 部署版本:eck v1.1.0
准备 nfs 存储 eck 数据需要进行持久化,可以使用 emptydir 类型的临时卷进行简单测试,也可以使用 nfs 或者 rook 等持久存储,作为测试,这里使用 docker 临时在 master01 节点部署 nfs server,提供 pvc 所需的存储资源。
docker run -d
–name nfs-server
–privileged
–restart always
-p 2049:2049
-v /nfs-share:/nfs-share
-e SHARED_DIRECTORY=/nfs-share
itsthenetwork/nfs-server-alpine:latest
1
2
3
4
5
6
7
8
部署 nfs-client-provisioner,动态申请 nfs 存储资源,192.168.93.11 为 master01 节点的 ip 地址,nfsv4 版本 nfs.path 指定为 / 即可。
这里使用 helm 从阿里云 helm 仓库部署 nfs-client-provisioner。
helm repo add apphub https://apphub.aliyuncs.com
helm install nfs-client-provisioner
–set nfs.server=192.168.93.11
–set nfs.path=/
apphub/nfs-client-provisioner
1
2
3
4
5
6
查看创建 storageClass,默认名称为 nfs-client,下面部署 elasticsearch 时会用到该名称:
[root@master01 ~]# kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-client cluster.local/nfs-client-provisioner Delete Immediate true 172m 1 2 3 所有节点安装 nfs 客户端并启用 rpcbind 服务
yum install -y nfs-utils systemctl enable –now rpcbind 1 2 安装 eck operator 部署 1.1.0 版本 eck
kubectl apply -f https://download.elastic.co/downloads/eck/1.1.0/all-in-one.yaml 1 查看创建的 pod
[root@master01 ~]# kubectl -n elastic-system get pods NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 1 17m 1 2 3 查看创建的 crd,创建了 3 个 crd,apmserver、elasticsearche 以及 kibana.
[root@master01 ~]# kubectl get crd | grep elastic apmservers.apm.k8s.elastic.co 2020-04-27T16:23:08Z elasticsearches.elasticsearch.k8s.elastic.co 2020-04-27T16:23:08Z kibanas.kibana.k8s.elastic.co 2020-04-27T16:23:08Z 1 2 3 4 部署 es 和 kibana 下载 github 中 release 版本的示例 yaml 到本地,这里下载 1.1.0 版本:
curl -LO https://github.com/elastic/cloud-on-k8s/archive/1.1.0.tar.gz tar -zxf cloud-on-k8s-1.1.0.tar.gz cd cloud-on-k8s-1.1.0/config/recipes/beats/ 1 2 3 创建命名空间
kubectl apply -f 0_ns.yaml 1 部署 es 和 kibana,count 为 3 指定部署 3 个 es 节点,前期也可以部署单个节点,之后在进行扩容,指定 storageClassName 为 nfs-client,添加 http 部分指定服务类型为 nodePort。
$ cat 1_monitor.yaml apiVersion: elasticsearch.k8s.elastic.co/v1 kind: Elasticsearch metadata: name: monitor namespace: beats spec: version: 7.6.2 nodeSets:
- name: mdi
count: 3
config:
node.master: true
node.data: true
node.ingest: true
node.store.allow_mmap: false
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
accessModes:
- ReadWriteOnce resources: requests: storage: 50Gi storageClassName: nfs-client http: service: spec: type: NodePort
- metadata:
name: elasticsearch-data
spec:
accessModes:
apiVersion: kibana.k8s.elastic.co/v1 kind: Kibana metadata: name: monitor namespace: beats spec: version: 7.6.2 count: 1 elasticsearchRef: name: “monitor” http: service: spec: type: NodePort 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 执行 yaml 文件部署 es 和 kibana
kubectl apply -f 1_monitor.yaml 1 如果无法拉取镜像可以手动替换为 dockerhub 镜像:
docker pull elastic/elasticsearch:7.6.2 docker pull elastic/kibana:7.6.2 docker tag elastic/elasticsearch:7.6.2 docker.elastic.co/elasticsearch/elasticsearch:7.6.2 docker tag elastic/kibana:7.6.2 docker.elastic.co/kibana/kibana:7.6.2 1 2 3 4 查看创建的 Elasticsearch 和 kibana 资源,包括运行状况,版本和节点数
[root@master01 ~]# kubectl get elasticsearch NAME HEALTH NODES VERSION PHASE AGE quickstart green 3 7.6.2 Ready 77m
[root@master01 ~]# kubectl get kibana NAME HEALTH NODES VERSION AGE quickstart green 1 7.6.2 137m 1 2 3 4 5 6 7 查看创建的 pods:
[root@master01 ~]# kubectl -n beats get pods NAME READY STATUS RESTARTS AGE monitor-es-mdi-0 1/1 Running 0 109s monitor-es-mdi-1 1/1 Running 0 9m monitor-es-mdi-2 1/1 Running 0 3m26s monitor-kb-54cbdf6b8c-jklqm 1/1 Running 0 9m 1 2 3 4 5 6 查看创建的 pv 和 pvc
[root@master01 ~]# kubectl -n beats get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE elasticsearch-data-monitor-es-mdi-0 Bound pvc-882be3e2-b752-474b-abea-7827b492d83d 10Gi RWO nfs-client 3m33s elasticsearch-data-monitor-es-mdi-1 Bound pvc-8e6ed97e-7524-47f5-b02c-1ff0d2af33af 10Gi RWO nfs-client 3m33s elasticsearch-data-monitor-es-mdi-2 Bound pvc-31b5f80d-8fbd-4762-ab69-650eb6619a2e 10Gi RWO nfs-client 3m33s
[root@master01 ~]# kubectl -n beats get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-31b5f80d-8fbd-4762-ab69-650eb6619a2e 50Gi RWO Delete Bound beats/elasticsearch-data-monitor-es-mdi-2 nfs-client 3m35s pvc-882be3e2-b752-474b-abea-7827b492d83d 50Gi RWO Delete Bound beats/elasticsearch-data-monitor-es-mdi-0 nfs-client 3m35s pvc-8e6ed97e-7524-47f5-b02c-1ff0d2af33af 50Gi RWO Delete Bound beats/elasticsearch-data-monitor-es-mdi-1 nfs-client 3m35s 1 2 3 4 5 6 7 8 9 10 11 实际数据存储在 master01 节点/nfs-share 目录下:
[root@master01 ~]# tree /nfs-share/ -L 2 /nfs-share/ ├── beats-elasticsearch-data-monitor-es-mdi-0-pvc-250c8eef-4b7e-4230-bd4f-36b911a1d61b │ └── nodes ├── beats-elasticsearch-data-monitor-es-mdi-1-pvc-c1a538df-92df-4a8e-9b7b-fceb7d395eab │ └── nodes └── beats-elasticsearch-data-monitor-es-mdi-2-pvc-dc21c1ba-4a17-4492-9890-df795c06213a └── nodes 1 2 3 4 5 6 7 8 查看创建的 service,部署时已经将 es 和 kibana 服务类型改为 NodePort,方便从集群外访问。
[root@master01 ~]# kubectl -n beats get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE monitor-es-http NodePort 10.96.82.186 9200:31575/TCP 9m36s monitor-es-mdi ClusterIP None 9m34s monitor-kb-http NodePort 10.97.213.119 5601:30878/TCP 9m35s 1 2 3 4 5 默认 elasticsearch 启用了验证,获取 elastic 用户的密码:
PASSWORD=$(kubectl -n beats get secret monitor-es-elastic-user -o=jsonpath=’{.data.elastic}’ | base64 –decode)
echo $PASSWORD 1 2 3 访问 elasticsearch
浏览器访问 elasticsearch:
https://192.168.93.11:31575/ 1 或者从 Kubernetes 集群内部访问 elasticsearch 的 endpoint:
|
|
访问 kibana 在浏览器中访问 kibana,用户密码与 elasticsearch 相同,选择 Explore on my own,可以看到还没有创建 index。
https://192.168.93.11:30878/ 部署 filebeat 使用 dockerhub 的镜像,版本改为 7.6.2.
|
|
查看创建的 pods
|
|
如果无法拉取镜像,可手动拉取:
|
|
访问 kibana,此时可以搜索到 filebeat 的 index,填写 index pattern,选择@timestrap 然后创建 index.
查看收集到的日志
部署 metricbeat
|
|
查看创建的 pods
|
|
此时访问 kibana 可以看到 index 中多了 metricbeat
版权声明:本文为 CSDN 博主「freesharer」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/networken/article/details/105948927