跳至内容

如何对 Amazon EKS 集群的 Container Insights 问题进行故障排除?

3 分钟阅读
0

我在为我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群配置 Amazon CloudWatch Container Insights 时遇到了问题。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

检查 Container Insights 安装

要检查您是否在 Amazon EKS 集群上正确安装了 Container Insights,请运行以下命令:

kubectl get pods -n amazon-cloudwatch

然后,针对您的容器组 (pod) 运行以下命令:

kubectl describe pod pod-name -n amazon-cloudwatch

**注意:**请将 pod-name 替换为容器组 (pod) 名称。

检查命令输出的“事件”部分。

要查看您的 CloudWatch 日志,请运行以下命令:

kubectl logs pod-name  -n amazon-cloudwatch

将 CloudWatch Observability 作为 Amazon EKS 托管插件进行安装

使用 Amazon EKS 插件为 Amazon EKS 安装具有增强型可观测性的 Container Insights

**注意:**您可以在仅运行 Kubernetes 版本 1.23 或更高版本的 Amazon EKS 集群上使用 CloudWatch Observability EKS 插件。

要将 CloudWatch Observability 作为自主管理型插件进行安装,请完成以下步骤:

  1. 要安装 cert-manager,请运行以下命令:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml
  2. 要安装自定义资源定义 (CRD),请运行以下命令:

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl apply --server-side -f -
  3. 要安装 CloudWatch 容器代理运算符,请运行以下命令:

    ClusterName=my-cluster-name
    RegionName=my-cluster-region
    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -

对指标未显示在 AWS 管理控制台中进行故障排除

如果您未在 AWS 管理控制台上看到 Container Insights 指标,请确认您是否已完成 Container Insights 设置。

对 Container Insights 错误进行故障排除

未经授权的崩溃: 无法从 kubelet 检索 cadvisor 数据

要解决此问题,请确保在 kubelet 中激活 Webhook 授权模式。

端点无效错误

错误消息示例:

"log": “2020-04-02T08:36:16Z E! cloudwatchlogs:代码: InvalidEndpointURL,消息:无效的端点 URI,原始错误:&url.Error{Op:\"parse\",URL:\"https://logs.{{region_name}}.amazonaws.com/\",错误:\"{\"},&awserr.baseError{code:\"InvalidEndpointURL\",消息:\"无效的端点 URI\",错误:[]error{(*url.Error)(0xc0008723c0)}}\n”,

要解决此问题,请确保替换命令中的所有占位符值。例如,在运行 AWS CLI 时,请确认您用于 cluster-nameregion-name 的信息对于您的部署是正确的。

集群升级后,Amazon EKS 或 Kubernetes 上缺少容器组 (pod) 指标

错误消息示例:

“W! 未收集容器组 (pod) 指标”

如果在升级集群后缺少容器组 (pod) 指标,请检查节点上的容器运行时是否按预期运行。

要解决此问题,请更新您的部署清单,将主机上的 containerd 套接字挂载到容器中。

部署清单示例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cloudwatch-agent
  namespace: amazon-cloudwatch
spec:
  template:
    spec:
      containers:
        - name: cloudwatch-agent
# ...
          # Don't change the mountPath
          volumeMounts:
# ...
            - name: dockersock
              mountPath: /var/run/docker.sock
              readOnly: true
            - name: varlibdocker
              mountPath: /var/lib/docker
              readOnly: true
            - name: containerdsock # NEW mount
              mountPath: /run/containerd/containerd.sock
              readOnly: true
# ...
      volumes:
# ...
        - name: dockersock
          hostPath:
            path: /var/run/docker.sock
        - name: varlibdocker
          hostPath:
            path: /var/lib/docker
        - name: containerdsock # NEW volume
          hostPath:
            path: /run/containerd/containerd.sock

有关完整的清单示例,请参阅 GitHub 网站上的 cwagent-daemonset.yaml

在 Amazon EKS 中使用 Bottlerocket 时没有 容器组 (pod) 指标

错误消息示例:

“W! 未收集容器组 (pod) 指标”

Bottlerocket 在主机上使用不同的 containerd 路径。如果您使用 Bottlerocket,则必须将所有卷更改为 Bottlerocket 容器路径位置。

命令示例:

volumes:
  # ...
    - name: containerdsock
      hostPath:
        # path: /run/containerd/containerd.sock
        # bottlerocket does not mount containerd sock at normal place
        # https://github.com/bottlerocket-os/bottlerocket/commit/91810c85b83ff4c3660b496e243ef8b55df0973b
        path: /run/dockershim.sock

收集 Prometheus 指标时 CloudWatch 代理的日志卷意外增加

要解决此问题,请将 CloudWatch 代理更新到最新的可用版本。要查找您的当前版本,请参阅查找有关 CloudWatch 代理版本的信息。要安装最新版本,请参阅安装 CloudWatch 代理

CloudWatch 代理上出现 CrashLoopBackoff 错误

要解决此问题,请确保您正确配置了您的 AWS Identity and Access Management (IAM) 权限。

CloudWatch 代理或 Fluentd 容器组 (pod) 卡在待处理状态

您的容器组 (pod) 可能卡在 Pending(待处理)状态。或者,您收到来自 CloudWatch 代理或 Fluentd 容器组 (pod) 的 FailedScheduling 错误。要解决此问题,请根据代理所需的代码量和 RAM,确认您的节点具有足够的计算资源。

要描述容器组 (pod),请运行以下命令:

kubectl describe pod cloudwatch-agent-85ppg -n amazon-cloudwatch

Fluent Bit 的 Configmap 未正确部署

要解决此问题,请确认您在 amazon-cloudwatch 命名空间中正确部署了 fluent-bit-config 配置映射。

错误消息示例:

[2024/10/02 11:16:42] [error] [config] inconsistent use of tab and space
[2024/10/02 11:16:42] [error] [config] error in /fluent-bit/etc/..2024_10_02_11_16_29.3759745087//application-log.conf:62: invalid indentation level
[2024/10/02 11:16:42] [error] configuration file contains errors, aborting.cwagent-daemonset.yaml
AWS 官方已更新 9 个月前