在今天的文章中,我们来讲述如何在 Kubernetes 里安装 Metricbeat,并收集 Kubernetes 里的 pod 信息。如果大家还没有开始安装自己的 Kubernetes 的话,建议大家阅读我之前的文章:
为了方便,在今天的展示中,我们将使用 Minikube 来进行我们的实验。
下载 Metribeat 配置文件
我们在 Elastic 的官方网站上找到链接“Running metricbeat on Kuberenetes”。我们通过如下的方法来下载这个配置文件:
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.6/deploy/kubernetes/metricbeat-kubernetes.yaml
这个下载的文档是不能直接使用的。我们必须对它进行修改:
1)这个文件所有的安装在默认的情况下都是安装到 kube-system namespace 里的。这个和我们当期的 Elastic Stack 运行所处的命名空间是不一样的。我们可以通过如下的命令来获得所的命令空间:
$ kubectl get ns
NAME STATUS AGE
default Active 15h
elastic-system Active 77m
kube-node-lease Active 15h
kube-public Active 15h
kube-system Active 15h
kubernetes-dashboard Active 78m
Elastic Stack 的 Elasticsearch 及 Kibana 都处于 default namespace,所以,我们把下载文档 metricbeat-kubernetes.yaml 里的所有的 namespace 都替换为 default。
2)在 ConfigMap metadata 为 metricbeat-daemonset-config 的部分,我们需要为访问 Elasticsearch 配置必要的证书以访问 Elasticsearch。为此,我们对它做如下的修改:
output.elasticsearch:
hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']
username: ${ELASTICSEARCH_USERNAME}
password: ${ELASTICSEARCH_PASSWORD}
ssl.certificate_authorities:
- /etc/certificate/ca.crt
在上面,我添加了如下的两行:
ssl.certificate_authorities:
- /etc/certificate/ca.crt
目前这个证书还在当前的容器中还不存在。我们需要在如下的部分来配置这个证书。
3)挂载证书
我们首先找到 DaemonSet 的这个部分:
apiVersion: apps/v1
kind: DaemonSet
并做如下的修改:

请注意红色的部分是我们需要添加的部分。很多人可能不太理解为什么这么修改。
我们可以使用如下的命令:
$ kubectl get secrets
NAME TYPE DATA AGE
default-quickstart-kibana-user Opaque 3 72m
default-token-94x6w kubernetes.io/service-account-token 3 16h
metricbeat-token-bpl4d kubernetes.io/service-account-token 3 54m
quickstart-es-default-es-config Opaque 1 78m
quickstart-es-elastic-user Opaque 1 78m
quickstart-es-http-ca-internal Opaque 2 78m
quickstart-es-http-certs-internal Opaque 3 78m
quickstart-es-http-certs-public Opaque 2 78m
quickstart-es-internal-users Opaque 3 78m
quickstart-es-transport-ca-internal Opaque 2 78m
quickstart-es-transport-certificates Opaque 3 78m
quickstart-es-transport-certs-public Opaque 1 78m
quickstart-es-xpack-file-realm Opaque 3 78m
quickstart-kb-config Opaque 2 72m
quickstart-kb-es-ca Opaque 2 72m
quickstart-kb-http-ca-internal Opaque 2 72m
quickstart-kb-http-certs-internal Opaque 3 72m
quickstart-kb-http-certs-public Opaque 2 72m
quickstart-kibana-user Opaque 1 72m
上面的命令显示的是 Kubernetes 里所有的 secrets。其中 quickstart-es-http-certs-public 里面含有访问 Elasticsearch 所需的证书信息。
4)配置 Elasticsearch 服务
我们还是针对上面的 DaemonSet 的配置,找到 ELASTICSEARCH_HOST 部分。它需要配置为 Elasticsearch 的服务。我们可以通过如下的命令来找到 Elasticsearch 的服务:
kubectl get svc
上面的命令将返回所有的服务:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 16h
quickstart-es-default ClusterIP None <none> <none> 81m
quickstart-es-http ClusterIP 10.106.166.167 <none> 9200/TCP 81m
quickstart-kb-http ClusterIP 10.111.178.132 <none> 5601/TCP 75m
在上面,quickstart-es-http 就是 Kubernetes 内部可以访问 Elasticsearch 的一个服务。如果我们想要写入到 Elasticsearch,我们必须使用这个服务:

请注意上面的红色框标识的部分。这些是我们需要改动的地方。记得把密码填入。如果你不指定这个密码的话,请参阅我之前配置Kubernetes里所述的方法。
好了,我们的配置就完成了。
安装metricbeat
在上面我们已经配置好 Metricbeat 了。我们打入如下的命令:
kubectl apply -f metricbeat-kubernetes.yaml
然后,我们使用如下的命令来查看 pods:
kubectl get pods
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
metricbeat-cq8lv 1/1 Running 0 42m
metricbeat-f69cc9574-q6sqm 1/1 Running 0 63m
quickstart-es-default-0 1/1 Running 0 85m
quickstart-kb-5c8d67cf65-r7gdx 1/1 Running 0 81m
因为我们有 Elasticsearch 及 Kibana,并且我们使用的是 DaemonSet 部署方法,在上面我们可以看见有两个运行的 Metricbeat 的 pod。它们都处于运行的状态。
在 Kibana 里监测数据
我们打开 Kibana:

在上面,我们可以看到有以 metricbeat 为开始的索引出现。我们为它创建一个 index pattern,并在 Discover 里进行查看:

在 Discover 里进行查看:

我们可以看到上传进来的 metricbeat 数据。

我们可以对相应的 pod 进行搜索。
参考:
【1】https://qbox.io/blog/shipping-kubernetes-cluster-metrics-to-elasticsearch-with-metricbeat
1954

被折叠的 条评论
为什么被折叠?



