使用 Helm 图表为 Kubernetes 集群部署 日志记录代理

您可以使用 Helm 图表来部署 日志记录代理 v1.6.x,以便从 Kubernetes 群集收集基础架构和应用程序日志并将其路由到 IBM Cloud Logs 实例。

您还可以使用 Terraform IBM 模块 (TIM) 在支持的 集群上部署和配置日志代理。日志记录代理 在支持的 Kubernetes 集群上部署和配置日志代理。 该模块通过使用基础架构即代码( IaC )自动化,自动完成基于 Helm 的部署和关键配置设置。

完成以下步骤,在Kubernetes集群上部署代理:

准备工作

  • 确保您可以访问 Kubernetes 集群,并拥有创建命名空间和部署代理的权限。

  • 安装以下 CLI:

    • 使用 IBM Cloud CLI 登录 IBM Cloud 并管理 IBM Cloud 服务,如创建 API 密钥。

    • Kubernetes CLI,用于通过 kubectl 命令来管理集群。 了解更多信息

  • 阅读 日志记录代理

  • 检查可用的代理版本。 有关详细信息,请参阅 检查可用的代理版本。 请注意,Helm图表的版本将与代理的版本相匹配,例如,如果您使用的是版本1.3.0的代理,就会有一个版本为1.3.0的Helm图表。

步骤 1. 定义代理的身份验证方法

为代理选择身份类型和验证方法。 然后,创建受信任的配置文件或 API 密钥。 向 IBM Cloud Logs 发送日志所需的角色是 Sender

您可以使用服务 ID 或受信任配置文件作为代理与IBM® Cloud Logs服务进行身份验证时使用的身份。 有关更多信息,请参阅 为摄取授予 IAM 权限

选择下列其中一个选项:

选项 1:使用受信任的配置文件进行身份验证

创建可信档案。 更多信息,请参阅 生成用于摄取的可信配置文件

选项 2:使用服务 ID API 密钥进行身份验证

生成用于服务 ID 身份验证的 API 密钥。 有关更多信息,请参阅 生成用于摄取的 API 密钥

步骤 2. 为 日志记录代理 配置 Helm 图表值文件

完成以下步骤:

  1. 创建一个名为 logs-values.yaml 的文件,内容如下:

    此文件包含针对您的部署的特定配置。

    metadata:
      name: "logs-agent"
    image:
      version: "1.6.1"  # required
    
    clusterName: "ENTER_CLUSTER_NAME"     # Enter the name of your cluster. This information is used to improve the metadata and help with your filtering.
    
    env:
      # ingestionHost is a required field. For example:
      # ingestionHost: "<logs instance>.ingress.us-east.logs.cloud.ibm.com"
      ingestionHost: "" # required
    
      # If you are using private CSE proxy, then use port number "3443"
      # If you are using private VPE Gateway, then use port number "443"
      # If you are using the public endpoint, then use port number "443"
      ingestionPort: "" # required
    
      iamMode: "TrustedProfile"
      # trustedProfileID - trusted profile id - required for iam trusted profile mode
      trustedProfileID: "Profile-yyyyyyyy-xxxx-xxxx-yyyy-zzzzzzzzzzzz" # required if iamMode is set to TrustedProfile
    
  2. 使用适合您环境的特定值更新 yaml 文件中的字段。

    Helm图所需参数
    字段名称 描述
    image.version 部署的代理版本 请参阅步骤1
    clusterName 集群的名称——这将把标签 kubernetes.cluster_name 引入所有日志行
    env.ingestionHost IBM Cloud Logs 实例用于接收日志的公共或私有入口端点
    env.ingestionPort 入口端点端口
    公共入口端点 = 443
    私有入口端点(VPE) = 443
    私有入口端点(CSE) = 3443
    env.iamMode TrustedProfileIAMAPIKey 基于 步骤 1 中选择的身份验证方法
    env.trustedProfileID 如果 iamModeTrustedProfile,请提供可信配置文件ID,否则无需提供(例如:Profile-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx )。
    env.iamEnvironment 指定正确的IAM认证终端。 有效值是 ProductionPrivateProductionCustom。 如果省略,默认值为 Production
    env.iamHost 如果 iamEnvironmentCustom,请提供IAM主机(例如:private.eu-de.iam.cloud.ibm.com ),否则无需提供。

步骤 3. 安装 Helm 图表

如果您使用 iamMode 作为 IAMAPIKey,那么 apikey 需要存在于名为 logs-agent 的 Kubernetes 保密密钥中,密钥名称为 IAM_API_KEY。 在运行舵机安装程序时加入 --set secret.iamAPIKey=<your iamAPIKey> 选项,即可使用 Helm 图表创建秘密。 如果秘密是手动创建的,或者您使用的是 iamMode=TrustedProfile,则不要包含此选项。

完成以下步骤:

  1. 登录集群。 有关详细信息,请参阅 访问群集

  2. 执行 Helm 模拟运行,查看 Helm 图表将创建的资源。

    如果您使用的是 iamMode=TrustedProfile,那么完整的命令是

    helm install <install-name> --dry-run oci://icr.io/ibm-observe/logs-agent-helm --version <chart-version> --values <PATH>/logs-values.yaml -n ibm-observe --create-namespace
    

    如果您使用的是 iamMode=IAMAPIKey,那么完整的命令是

    helm install <install-name> --dry-run oci://icr.io/ibm-observe/logs-agent-helm --version <chart-version> --values <PATH>/logs-values.yaml -n ibm-observe --create-namespace --set secret.iamAPIKey=<APIKey-value> --hide-secret
    

    其中:

    • <install-name> 是 Helm 安装程序的名称 (logs-agent)
    • <chart-version> 是舵手图的版本。 Helm 图表版本应与代理图像版本一致。 有关详细信息,请参阅 Helm 图表版本
    • <PATH>logs-values.yaml 文件所在的目录路径。
    • <APIKey-value> 是与 ServiceID 步骤 1 中的设置 关联的 IAM 密码
    • 添加 --hide-secret 以隐藏 API 密钥,避免命令运行后在输出数据中显示。

    如果您想在本地查看舵图内容,可以使用以下命令将舵图下载到计算机上:helm pull oci://icr.io/ibm-observe/logs-agent-helm --version <chart-version>。 下载的 tgz 文件包含图表内容。

    例如,您可以从 logs-values.yaml 文件所在的目录运行以下命令:

    helm install logs-agent --dry-run oci://icr.io/ibm-observe/logs-agent-helm --version 1.6.0 --values ./logs-values.yaml -n ibm-observe --create-namespace --set secret.iamAPIKey=<secret> --hide-secret
    
  3. 验证要创建的资源后,运行不包含 --dry-run 选项的 Helm 安装程序

    如果您使用的是 iamMode=TrustedProfile,那么完整的命令是

    helm install <install-name>  oci://icr.io/ibm-observe/logs-agent-helm --version <chart-version> --values <PATH>/logs-values.yaml -n ibm-observe --create-namespace
    

    如果您使用的是 iamMode=IAMAPIKey,那么完整的命令是

    helm install <install-name> oci://icr.io/ibm-observe/logs-agent-helm --version <chart-version> --values <PATH>/logs-values.yaml -n ibm-observe --create-namespace --set secret.iamAPIKey=<APIKey-value>
    

    其中:

    • <install-name> 是 Helm 安装程序的名称 (logs-agent)
    • <chart-version> 是舵手图的版本。 Helm 图表版本应与代理图像版本一致。 有关详细信息,请参阅 Helm 图表版本
    • <PATH>logs-values.yaml 文件所在的目录路径。
    • <APIKey-value> 是与 ServiceID 步骤 1 中的设置 关联的 IAM 密码

步骤 4. 验证代理已成功部署

部署代理时,检查是否创建了以下资源:

  • ibm-observe 命名空间。

    运行以下命令列出群集中的命名空间,并检查 logger-agent 是否显示为激活状态。

    kubectl get namespace
    
  • 命名空间 ibm-observe 中的配置映射 logs-agent.

    运行以下命令查看代理配置详细信息。

    kubectl get configmap logs-agent -n ibm-observe
    

    您还可以使用

    kubectl describe configmaps logs-agent -n ibm-observe
    
  • 命名空间 ibm-observe 中的守护进程 logs-agent.

    运行以下命令查看守护进程集。

    kubectl get ds -n ibm-observe
    
  • 验证代理是否已启动:

    kubectl -n ibm-observe get ds logs-agent
    
  • 使用以下命令读取代理 pod 列表:

    kubectl get pods -n ibm-observe -o wide
    
    NAME                  READY   STATUS    RESTARTS   AGE    IP              NODE           NOMINATED NODE   READINESS GATES
    logs-agent-4lwvt      1/1     Running   0          2d5h   172.17.61.181   192.168.16.4   <none>           <none>
    logs-agent-g7z87      1/1     Running   0          2d5h   172.17.0.48     192.168.32.4   <none>           <none>
    logs-agent-nw56s      1/1     Running   0          2d5h   172.17.32.232   192.168.0.10   <none>           <none>
    

    READY 列显示所有 pod 的 1/1STATUSRunning。 确认群集中的每个节点都已准备好代理 pod。

    要查看群集中有多少工人可用,可以运行以下命令:

    kubectl get nodes
    
    NAME           STATUS   ROLES           AGE   VERSION
    192.168.0.10   Ready    master,worker   8d    v1.20.0+558d959
    192.168.32.4   Ready    master,worker   8d    v1.20.0+558d959
    192.168.16.4   Ready    master,worker   8d    v1.20.0+558d959
    

    这两个列表中每个列表的条目数必须相同,您可以将节点名称中的 IP 地址与 pod 列表 NODE 列中的值相匹配。

    如果您的节点不是以 IP 命名,您可以附加 -o wide 选项,然后比较 INTERNAL-IP 列中的值。

    要查看 pod 的日志,请运行 kubectl logs <POD_NAME>> -n ibm-observe

    要检查已部署的舵图,请运行 helm list -n ibm-observe

步骤 5. 验证日志是否已传送到目标目的地

完成以下步骤:

  1. 访问 IBM Cloud Logs 实例的 Web UI。.

  2. 正确配置代理后,您可以通过默认仪表板视图查看日志。 日志记录代理 使用包含群集名称的 kubernetes 对象标记日志记录。

    kubernetes.cluster_name:<CLUSTER_NAME>
    

    您可以在 IBM Cloud Logs 实例中运行查询 kubernetes.cluster_name:<YOUR_CLUSTER_NAME> 来搜索群集生成的日志。