在今天的文章中,我们来讲述如何在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进行搜索。
参考: