部署eck在kubernets

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

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[root@master01 ~]# kubectl run -it --rm centos--image=centos -- sh
sh-4.4#
sh-4.4# PASSWORD=elastic-kb-8667f4c6c5
sh-4.4# curl -u "elastic:$PASSWORD" -k "https://monitor-es-http:9200"
{
  "name" : "quickstart-es-default-2",
  "cluster_name" : "quickstart",
  "cluster_uuid" : "mrDgyhp7QWa7iVuY8Hx6gA",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

访问 kibana 在浏览器中访问 kibana,用户密码与 elasticsearch 相同,选择 Explore on my own,可以看到还没有创建 index。

https://192.168.93.11:30878/ 部署 filebeat 使用 dockerhub 的镜像,版本改为 7.6.2.

1
2
3
sed -i 's#docker.elastic.co/beats/filebeat:7.6.0#elastic/filebeat:7.6.2#g' 2_filebeat-kubernetes.yaml

kubectl apply -f 2_filebeat-kubernetes.yaml

查看创建的 pods

1
2
3
4
5
[root@master01 beats]# kubectl -n beats get pods -l k8s-app=filebeat
NAME             READY   STATUS    RESTARTS   AGE
filebeat-dctrz   1/1     Running   0          9m32s
filebeat-rgldp   1/1     Running   0          9m32s
filebeat-srqf4   1/1     Running   0          9m32s

如果无法拉取镜像,可手动拉取:

1
2
3
4
5
docker pull elastic/filebeat:7.6.2
docker tag elastic/filebeat:7.6.2 docker.elastic.co/beats/filebeat:7.6.2

docker pull elastic/metricbeat:7.6.2
docker tag elastic/metricbeat:7.6.2 docker.elastic.co/beats/metricbeat:7.6.2

访问 kibana,此时可以搜索到 filebeat 的 index,填写 index pattern,选择@timestrap 然后创建 index.

查看收集到的日志

部署 metricbeat

1
sed -i 's#docker.elastic.co/beats/metricbeat:7.6.0#elastic/metricbeat:7.6.2#g' 3_metricbeat-kubernetes.yaml

查看创建的 pods

1
2
3
4
5
6
[root@master01 beats]# kubectl -n beats get pods -l  k8s-app=metricbeat
NAME                          READY   STATUS    RESTARTS   AGE
metricbeat-6956d987bb-c96nq   1/1     Running   0          76s
metricbeat-6h42f              1/1     Running   0          76s
metricbeat-dzkxq              1/1     Running   0          76s
metricbeat-lffds              1/1     Running   0          76s

此时访问 kibana 可以看到 index 中多了 metricbeat

版权声明:本文为 CSDN 博主「freesharer」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/networken/article/details/105948927

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up