如何将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并点击“堆栈管理” > “索引管理”而且您应该能够看到索引。
点击 ”索引管理“
还有我们的索引。
要创建索引模式,请点击“索引模式的“然后击中”创建索引模式”。
在下一页上,键入与filebeat或metricbeat匹配的索引模式的名称,它们应该显示为已匹配。
创建图案,然后单击“下一步“
在下拉菜单中选择“ @timestamp”,然后选择“创建索引模式“
步骤6:发现您的资料
创建索引模式后,点击“发现 ”,
然后选择我们创建的索引模式。
结论结论
现在我们有了轻量级的节拍,可以从您的Kubernetes集群中获取日志和指标,并将它们发送到外部Elasticsearch进行索引和灵活搜索。
。
您可以通过以下链接以PDF格式下载本文来支持我们。
以PDF格式下载指南
。
。
。
。
。
。
。
。
。
。
关
。
。
。