在本文中,您将了解如何使用 Fluentd 日志记录代理将 Kubernetes 集群事件数据发布到 Amazon Elastic Search。然后将使用Kibana(Elasticsearch 的开源可视化工具)查看数据。 Amazon ES 由集成的 Kibana 集成组成。我们将引导您完成以下流程:
- 创建 Kubernetes 集群
- 创建 Amazon ES 集群
- 在 Kubernetes 集群上部署 Fluentd 日志代理
- 在 Kibana 中可视化 kubernetes 日期
步骤一:创建 Kubernetes 集群
Kubernetes 是 Google 创建的一个开源平台,用于管理容器化应用程序。它使您能够在集群环境中管理、扩展和部署容器化应用程序。 我们可以使用Kubernetes跨不同主机编排容器,使用所有资源动态扩展容器化应用程序,并拥有集中的容器管理环境。我们将从创建 Kubernetes 集群开始,我将逐步向您演示如何在 CentOS 7 上安装和配置 Kubernetes。
1.配置主机
- vi /etc/hosts
- 根据主机文件中的主机详细信息进行更改
2.执行以下命令禁用 SELinux
- setenforce 0
- sed -i –follow-symlinks ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux
3.启用br_netfilter内核模块
kubernetes 安装需要 br_netfilter 模块。
运行以下命令启用 br_netfilter 内核模块。
- modprobe br_netfilter
- echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
4.通过运行以下命令禁用 SWAP。
- swapoff -a
- 然后编辑/etc/fstab并注释交换行
5.安装最新版本的Docker CE。通过运行以下命令安装 docker-ce 的软件包依赖项。
- yum install -y yum-utils device-mapper-persistent-data lvm2
- 将 docker 存储库添加到系统并使用 yum 命令安装 docker-ce。
-
yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
yum install -y docker-ce
6.安装Kubernetes使用以下命令将kubernetes存储库添加到centos 7系统中。
- yum install -y kubelet kubeadm kubectl
[kubernetes]
name=Kubernetes
baseurl=<a href="https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64">https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64</a>
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=<a href="https://packages.cloud.google.com/yum/doc/yum-key.gpg">https://packages.cloud.google.com/yum/doc/yum-key.gpg</a>
<a href="https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg">https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg</a>
EOF
通过运行下面的 yum 命令来安装kubernetes软件包 kubeadm、kubelet 和 kubectl。
- systemctl start docker && systemctl enable docker
安装完成后,重新启动所有这些服务器。重启后启动docker和kubelet服务
-
systemctl start docker && systemctl enable docker
-
systemctl start kubelet && systemctl enable kubelet
7.Kubernetes集群初始化
登录主服务器并运行以下命令
- systemctl start kubelet && systemctl enable kubelet
Kubernetes 初始化完成后,您将获得结果。从获得的结果中复制命令并执行它以开始使用集群。 记下结果中的 kubeadm join 命令。该命令将用于将新节点注册到 kubernetes 集群。 8.将flannel网络部署到kubernetes集群
- kubectl get nodes
- kubectl get pods –all-namespaces
您将看到“k8s-master”节点作为“主”集群运行,状态为“就绪”,并且您将获得集群所需的所有 pod,包括网络 pod 的“kube-flannel-ds”配置。9.向集群添加节点连接到node01服务器并运行kubeadm join命令
- kubeadm join 172.31.7.47:6443 –token at03m9.iinkh5ps9q12sh2i –discovery-token-ca-cert-hash sha256:3f6c1824796ef1ff3d9427c883bde915d5bc13331d74891d831f29a8c4a0c5ab
连接到node02服务器并运行kubeadm join命令
- kubeadm join 172.31.7.47:6443 –token at03m9.iinkh5ps9q12sh2i –discovery-token-ca-cert-hash sha256:3f6c1824796ef1ff3d9427c883bde915d5bc13331d74891d831f29a8c4a0c5ab
等待一段时间并验证“k8s-master”主集群服务器,使用以下命令检查节点和 Pod。
- kubectl get nodes
现在您将看到worker1和worker2已添加到集群中,状态为“就绪”。
- kubectl get pods –all-namespaces
Kubernetes集群master初始化和配置已完成。
步骤 2:创建 Amazon ES 集群
Elasticsearch 是一个开源搜索和分析引擎,用于日志分析和应用程序的实时监控。Amazon Elasticsearch Service (Amazon ES) 是一项 AWS 服务,允许在 AWS 云中部署、操作和扩展 Elasticsearch。您可以使用 Amazon ES 分析来自 Amazon SES 的电子邮件发送事件我们将创建一个 Amazon ES 集群,然后将 Fluentd 日志记录代理部署到 Kubernetes 集群,该集群将收集日志并发送给 Amazon ES 集群本部分介绍如何使用 Amazon ES 控制台创建 Amazon ES 集群。创建 Amazon ES 集群
-
- 登录 AWS 管理控制台并打开 Amazon Elasticsearch Service 控制台:https://console.aws.amazon.com/es/
- 选择创建新域并在 Amazon ES 控制台中选择部署类型。
- 在版本下,保留 Elasticsearch 版本字段的默认值。
- 选择下一步
- 在配置集群页面的配置域下输入您的弹性搜索域的名称。
- 在配置集群页面上,选择数据实例下的以下选项
- 实例类型 – 选择 t2.micro.elasticsearch(符合免费套餐条件)。
- 实例数量– 1
- 在专用主实例下
- 启用专用主控 – 请勿启用此选项。
- 启用区域感知 – 请勿启用此选项。
- 在存储配置下,选择以下选项。
- 存储类型– 选择 EBS。对于 EBS 设置,选择通用 (SSD) 的 EBS 卷类型和 EBS 卷大小10。
- 加密状态下 –请勿启用此选项
- 快照配置下
- 自动快照开始时间– 选择自动快照开始时间 00:00 UTC(默认)。
- 选择下一步
- 在网络配置下,选择 VPC 访问,然后根据您的 VPC 选择详细信息,如下所示。 在 Kibana 身份验证下: – 不要启用此选项。
- 要设置访问策略,请选择允许对域的开放访问。注意:- 在生产中,您应该限制对特定 IP 地址或范围的访问。
- 选择下一步。
- 在审核页面上,检查您的设置,然后选择确认并创建。
注意:集群部署最多需要十分钟。单击创建的弹性搜索域后,记下您的 Kibana URL。
步骤 3:在 Kubernetes 集群上部署 Fluentd 日志代理
Fluentd 是一个开源数据收集器,它可以让您统一数据收集和消费,以便更好地使用和理解数据。在本例中,我们将在 Kubernetes 集群上部署 Fluentd 日志记录,该集群将收集日志文件并发送给 Amazon Elastic Search。我们将创建一个 ClusterRole,它提供对 pod 和命名空间对象的权限,以便向集群发出获取、列出和监视请求。首先,我们需要配置RBAC(基于角色的访问控制)权限,以便Fluentd可以访问相应的组件。1.flutterd-rbac.yaml:
apiVersion: v1
kind: ServiceAccount
metadata:
name: fluentd
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: fluentd
namespace: kube-system
rules:
- apiGroups:
- ""
resources:
- pods
- namespaces
verbs:
- get
- list
- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: fluentd
roleRef:
kind: ClusterRole
name: fluentd
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: fluentd
namespace: kube-system
创建: $ kubectl create -f kubernetes/ Fluentd-rbac.yaml
现在,我们可以创建 DaemonSet。
2. fluidd-daemonset.yaml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
labels:
k8s-app: fluentd-logging
version: v1
kubernetes.io/cluster-service: "true"
spec:
template:
metadata:
labels:
k8s-app: fluentd-logging
version: v1
kubernetes.io/cluster-service: "true"
spec:
serviceAccount: fluentd
serviceAccountName: fluentd
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1.3-debian-elasticsearch
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch.logging"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
- name: FLUENT_ELASTICSEARCH_SCHEME
value: "http"
- name: FLUENT_UID
value: "0"
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
确保根据您的弹性搜索环境定义 FLUENT_ELASTICSEARCH_HOST 和 FLUENT_ELASTICSEARCH_PORT
部署:
$ kubectl create -f kubernetes/ Fluentd-daemonset.yaml 验证日志
$ kubectl logs fluentd-lwbt6 -n kube-system | grep Connection
连接您应该在日志中看到 Fluentd 连接到 Elasticsearch:
步骤 4:在 Kibana 中可视化 kubernetes 数据
- 连接到 kibana 控制面板 URL 以从 Amazon ES 控制台获取
- 要在 Kibana 中查看 Fluentd 收集的日志,请单击“管理”,然后选择“Kibana”下的“索引模式”
- 选择默认索引模式(logstash-*)
- 单击“下一步”并设置“时间过滤器字段名称”(@timestamp),然后选择“创建索引模式”
- 单击“发现”查看您的应用程序日志
- 单击可视化并选择创建可视化并选择饼图。填写以下字段,如下所示。
-
- 选择Logstash-*索引并点击分割切片
- 聚合——重要术语
- 字段 = Kubernetes.pod_name.keyword
- 尺寸 – 10
7. 并应用更改 就是这样!您可以通过这种方式可视化在 Kibana 中创建的 Kubernetes Pod。通过日志分析进行监控是任何应用程序部署的关键组成部分。 您可以在 Kubernetes 中收集和整合整个集群的日志,以便从一个仪表板监控整个集群。在我们的示例中,我们看到 fluidd 充当 kubernetes 集群和 Amazon ES 之间的中介。Fluentd 结合了日志收集和聚合,并将日志发送到 Amazon ES,以通过 kibana 进行日志分析和数据可视化。上面的示例展示了如何使用 fluidd 将 AWS Elasticsearch 日志记录和 kibana 监控添加到 kubernetes 集群。