如何实时可视化 Kubernetes 集群事件

2023年 8月 15日 23.9k 0

在本文中,您将了解如何使用 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
  • 根据主机文件中的主机详细信息进行更改

IMG1 - Elasticsearch - Edureka 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并注释交换行

第四步 - Elasticsearch - Edureka 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 初始化完成后,您将获得结果。从获得的结果中复制命令并执行它以开始使用集群。 命令 - kubernetes 集群 - Edureka 记下结果中的 kubeadm join 命令。该命令将用于将新节点注册到 kubernetes 集群。 集群 -kubernetes 集群 - Edureka 8.将flannel网络部署到kubernetes集群

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
flannel 网络 - kubernetes 集群 - Edureka flannel网络已经部署到Kubernetes集群中。等待一段时间,然后使用以下命令检查 kubernetes 节点和 pod。
  • 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 集群 - Edureka 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 集群

    1. 登录 AWS 管理控制台并打开 Amazon Elasticsearch Service 控制台:https://console.aws.amazon.com/es/
    2. 选择创建新域并在 Amazon ES 控制台中选择部署类型。 Elasticsearch - kubernetes 集群 - Edureka
    3. 在版本下,保留 Elasticsearch 版本字段的默认值。
    4. 选择下一步
    5. 在配置集群页面的配置域下输入您的弹性搜索域的名称
    6. 在配置集群页面上,选择数据实例下的以下选项
      • 实例类型 – 选择 t2.micro.elasticsearch(符合免费套餐条件)。
      • 实例数量– 1
    7. 在专用主实例下
      • 启用专用主控 – 请勿启用此选项。
      • 启用区域感知 – 请勿启用此选项。
    8. 在存储配置下,选择以下选项。
      • 存储类型– 选择 EBS。对于 EBS 设置,选择通用 (SSD) 的 EBS 卷类型和 EBS 卷大小10。
    9. 加密状态下 –请勿启用此选项
    10. 快照配置下
      • 自动快照开始时间– 选择自动快照开始时间 00:00 UTC(默认)。
    11. 选择下一步
    12. 在网络配置下,选择 VPC 访问,然后根据您的 VPC 选择详细信息,如下所示。 VPC - kubernetes 集群 - Edureka 在 Kibana 身份验证下: – 不要启用此选项。
    13. 要设置访问策略,请选择允许对域的开放访问。注意:- 在生产中,您应该限制对特定 IP 地址或范围的访问。 访问策略 - kubernetes 集群 - Edureka
    14. 选择下一步。
    15. 在审核页面上,检查您的设置,然后选择确认并创建。

注意:集群部署最多需要十分钟。单击创建的弹性搜索域后,记下您的 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 部署 - kubernetes 集群 - Edureka 验证日志

$ kubectl logs fluentd-lwbt6 -n kube-system | grep Connection

连接您应该在日志中看到 Fluentd 连接到 Elasticsearch: 连接 - kubernetes 集群 - Edureka

步骤 4:在 Kibana 中可视化 kubernetes 数据

  1. 连接到 kibana 控制面板 URL 以从 Amazon ES 控制台获取
  2. 要在 Kibana 中查看 Fluentd 收集的日志,请单击“管理”,然后选择“Kibana”下的“索引模式”
  3. 选择默认索引模式(logstash-*)
  4. 单击“下一步”并设置“时间过滤器字段名称”(@timestamp),然后选择“创建索引模式” 
  5. 单击“发现”查看您的应用程序日志 应用程序日志 - kubernetes 集群 - Edureka
  6. 单击可视化并选择创建可视化并选择饼图。填写以下字段,如下所示。
    • 选择Logstash-*索引并点击分割切片
    • 聚合——重要术语
    • 字段 = Kubernetes.pod_name.keyword
    • 尺寸 – 10

VisualizeSetting1 - kubernetes 集群 - Edureka 7. 并应用更改 VisualizeSetting2 - kubernetes 集群 - Edureka 就是这样!您可以通过这种方式可视化在 Kibana 中创建的 Kubernetes Pod。通过日志分析进行监控是任何应用程序部署的关键组成部分。 您可以在 Kubernetes 中收集和整合整个集群的日志,以便从一个仪表板监控整个集群。在我们的示例中,我们看到 fluidd 充当 kubernetes 集群和 Amazon ES 之间的中介。Fluentd 结合了日志收集和聚合,并将日志发送到 Amazon ES,以通过 kibana 进行日志分析和数据可视化。上面的示例展示了如何使用 fluidd 将 AWS Elasticsearch 日志记录和 kibana 监控添加到 kubernetes 集群。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论