如何将Kubernetes日志发送到外部Elasticsearch


您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南










在云中或本地环境中设置Kubernetes集群后,将需要以一种轻松灵活的方式检查仓库中正在发生的事情,最好的方法之一是调查日志。当您需要修复或了解特定时间发生的情况时,虽然可以登录到集群并检查Pod或主机的日志,但是突然检查每个Pod的日志变得很麻烦,尤其是当您有多个Pod时为了使您更轻松地在一个平台上检查集群的状态,我们将在外部服务器上部署Elasticsearch和Kibana,然后使用Elastic的节拍(Filebeat,Metricbeat等)将日志从集群发送到Elasticsearch如果您已经有一个ELK Stack正在运行,那就更好了。

下图显示了我们将在本指南中完成的架构,它实际上是一个3节点的Kubernetes集群以及一个Elasticsearch和Kibana服务器,它们将通过Filebeat和Metricbeat日志收集器从集群接收日志。

首先,我们将需要一个同时安装了Kibana的Elasticsearch服务器。您可以省略Logstash,但是如果需要进一步过滤日志,则可以安装它。请按照以下指南安装Elasticsearch和Kibana:

如何在CentOS 7上安装ElasticSearch 7.x

如何在Debian上安装Elasticsearch 7

如何在Ubuntu上安装Elasticsearch 7,6,5

在您的Elasticsearch主机上,确保可以从外部访问它。您可以在配置中编辑以下部分

$ sudo vim /etc/elasticsearch/elasticsearch.yml

# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9200
#

然后在防火墙上允许该端口

sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --reload

其次,您必须拥有一个Kubernetes集群,因为它是我们关注从中获取日志的地方。我们有一些指南可以帮助您设置它们,以防万一您需要快速引导它们。它们在下面共享:

使用kubeadm在Ubuntu上安装Kubernetes集群

使用kubeadm在CentOS 7上安装Kubernetes集群

使用EKS轻松在AWS上设置Kubernetes集群

使用Ansible和Kubespray部署Kubernetes集群

使用Rancher RKE安装生产Kubernetes集群

准备就绪后,我们可以继续在集群中安装Filebeat和Metricbeat吊舱,以开始收集日志并将其发送到ELK。确保您能够在Kubernetes集群中运行kubectl命令。

步骤1:下载示例Filebeat和Metricbeat文件

登录到您的Kubernetes主节点并运行以下命令以获取Elastic提供的Filebeat和Metricbeat yaml文件。

cd ~
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.9/deploy/kubernetes/filebeat-kubernetes.yaml
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.9/deploy/kubernetes/metricbeat-kubernetes.yaml

步骤2:编辑文件以适合您的环境

在这两个文件中,我们只需要更改一些内容,在ConfigMap下,您将找到如下所示的elasticseach输出:将IP(192.168.10.123)和端口(9200)更改为Elasticsearch服务器的IP。

    output.elasticsearch:
      hosts: ['${ELASTICSEARCH_HOST:192.168.10.123}:${ELASTICSEARCH_PORT:9200}']
      #username: ${ELASTICSEARCH_USERNAME}
      #password: ${ELASTICSEARCH_PASSWORD}

在同一文件中的DaemonSet下,您将找到以下配置:请注意,我们正在显示要更改的区域。编辑IP(192.168.10.123)和端口(9200)以也与您的Elastcsearch服务器的IP地址匹配。为您的Elasticsearch配置了用户名和密码,您可以随意在显示的注释部分中添加它们。

        env:
        - name: ELASTICSEARCH_HOST
          value: "192.168.10.123"
        - name: ELASTICSEARCH_PORT
          value: "9200"
        #- name: ELASTICSEARCH_USERNAME
        #  value: elastic
        #- name: ELASTICSEARCH_PASSWORD
        #  value: changeme
        - name: ELASTIC_CLOUD_ID

请注意,如果您希望将Filebeat和Metricbeat资源部署在另一个名称空间上,只需编辑“库伯系统”由您选择。

在“部署”下,您可以通过编辑以下代码段中显示的映像(docker.elastic.co/beats/metricbeat:7.9.0)来更改要部署的Filebeat和Metricbeat的版本。我将使用7.9.0版。

###For Metricbeat####
    spec:
      serviceAccountName: metricbeat
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: metricbeat
        image: docker.elastic.co/beats/metricbeat:7.9.0

如果您也想更改其版本,请对filebeat yml文件执行相同的操作。

###For Filebeat####
    spec:
      serviceAccountName: metricbeat
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: metricbeat
        image: docker.elastic.co/beats/filebeat:7.9.0

重要注意事项

如果您希望将节拍部署在主节点上,我们将不得不增加容忍度,如下所示是metricbeat的示例:这不是整个DaemonSet配置,只是我们感兴趣的部分,您可以保留其他部分完整地添加容差,如以下规范下的配置所示。根据您的需要,filebeat配置也可以适用。

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: metricbeat
  namespace: kube-system
  labels:
    k8s-app: metricbeat
spec:
  selector:
    matchLabels:
      k8s-app: metricbeat
  template:
    metadata:
      labels:
        k8s-app: metricbeat
    spec:
###PART TO EDIT###
      # This toleration is to have the daemonset runnable on master nodes
      # Remove it if your masters can't run pods
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
####END OF EDIT###
      serviceAccountName: metricbeat
      terminationGracePeriodSeconds: 30
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: metricbeat
        image: docker.elastic.co/beats/metricbeat:7.9.0
        args: [
          "-c", "/etc/metricbeat.yml",
          "-e",

步骤4:部署到Kubernetes

完成所有编辑后,从您的Kubernetes集群可以很好地访问我们的Elasticsearch,是时候部署我们的节拍了。登录到主节点并运行以下命令:

kubectl apply -f metricbeat-kubernetes.yaml
kubectl apply -f filebeat-kubernetes.yaml

一段时间后,确认Pod已部署并成功运行。

$ kubectl get pods -n kube-system

NAME                                             READY   STATUS    RESTARTS   AGE
calico-kube-controllers-c9784d67d-k85hf          1/1     Running   5          11d
calico-node-brjnk                                1/1     Running   7          10d
calico-node-nx869                                1/1     Running   1          10d
calico-node-whlzf                                1/1     Running   6          11d
coredns-f9fd979d6-6vztd                          1/1     Running   5          11d
coredns-f9fd979d6-8gz4l                          1/1     Running   5          11d
etcd-kmaster.diab.mfs.co.ke                      1/1     Running   5          11d
filebeat-hlzhc                                   1/1     Running   7          7d23h <==
filebeat-mcs67                                   1/1     Running   1          7d23h <==
kube-apiserver-kmaster.diab.mfs.co.ke            1/1     Running   5          11d
kube-controller-manager-kmaster.diab.mfs.co.ke   1/1     Running   5          11d
kube-proxy-nlrbv                                 1/1     Running   5          11d
kube-proxy-zdcbg                                 1/1     Running   1          10d
kube-proxy-zvf6c                                 1/1     Running   7          10d
kube-scheduler-kmaster.diab.mfs.co.ke            1/1     Running   5          11d
metricbeat-5fw98                                 1/1     Running   7          8d  <==
metricbeat-5zw9b                                 1/1     Running   0          8d  <==
metricbeat-jbppx                                 1/1     Running   1          8d  <==

步骤5:在Kibana上创建索引

我们的Pod开始运行后,它们会立即将索引模式和日志一起发送到Elasticsearch。登录到您的Kibana并点击“堆栈管理>索引管理”而且您应该能够看到索引。

如何将Kubernetes日志发送到外部Elasticsearch

点击 ”索引管理

如何将Kubernetes日志发送到外部Elasticsearch

还有我们的索引。

如何将Kubernetes日志发送到外部Elasticsearch

要创建索引模式,请点击“索引模式的“然后击中”创建索引模式”。

如何将Kubernetes日志发送到外部Elasticsearch

在下一页上,键入与filebeat或metricbeat匹配的索引模式的名称,它们应该显示为已匹配。

如何将Kubernetes日志发送到外部Elasticsearch

创建图案,然后单击“下一步

如何将Kubernetes日志发送到外部Elasticsearch

在下拉菜单中选择“ @timestamp”,然后选择“创建索引模式

如何将Kubernetes日志发送到外部Elasticsearch

步骤6:发现您的资料

创建索引模式后,点击“发现 ”

如何将Kubernetes日志发送到外部Elasticsearch

然后选择我们创建的索引模式。

如何将Kubernetes日志发送到外部Elasticsearch

结论结论

现在我们有了轻量级的节拍,可以从您的Kubernetes集群中获取日志和指标,并将它们发送到外部Elasticsearch进行索引和灵活搜索。


您可以通过以下链接以PDF格式下载本文来支持我们。

以PDF格式下载指南










Sidebar