跳至内容

常见问题解答: Amazon EKS 插件

3 分钟阅读
0

我对 Amazon Elastic Kubernetes Service (Amazon EKS) 插件有一些疑问。

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

**问:**如何检查在我的 Amazon EKS 集群中部署 Amazon EKS 插件失败的原因?

要检查失败的原因,请使用 Amazon EKS 控制台或 AWS CLI。

在 Amazon EKS 控制台上,完成以下步骤:

  1. 打开 Amazon EKS 控制台
  2. 在导航窗格中,选择 Clusters(集群)。然后,选择要为其创建插件的集群的名称。
  3. 选择 Add-ons(插件)选项卡。
  4. 选择处于 Degraded(降级)、Pending(待处理)或 Inactive(非活动)状态的插件。您可以在 Health issues(运行状况问题)部分找到失败的原因。

运行 AWS CLI describe-addon 命令:

$ aws eks describe-addon --cluster-name example-cluster --addon-name coredns

您可以在 Addonissue 对象中找到失败的原因。

输出示例:

{    "addon": {
        "addonName": "coredns",
        "clusterName": "eksn",
        "status": "DEGRADED",
        "addonVersion": "v1.8.7-eksbuild.4",
        "health": {
            "issues": [
                {
                    "code": "InsufficientNumberOfReplicas",
                    "message": "The add-on is unhealthy because it doesn't have the desired number of replicas."
                }
            ]
        }
        "addonArn": "arn:aws:eks:us-east-2:acc-ID:addon/EKS_CLUSTER/coredns/76c68b04-0804-2419-8da6-90d8318af308",
        "createdAt": "2024-01-17T06:07:23.826000+00:00",
        "modifiedAt": "2024-04-19T04:40:03.537000+00:00",
        "tags": {}
    }
}

**问:**我收到以下错误消息: “The add-on is unhealthy because it doesn't have the desired number of replicas.” 如何对此错误进行故障排除?

要检查集群中相应容器组 (pod) 的状态,请运行以下命令:

kubectl get pods -n kube-system
kubectl describe pod pod-name -n kube-system
kubectl logs pod-name -n kube-system

请将 pod-name 替换为您的容器组 (pod) 的名称。

要解析输出中容器组 (pod) 的状态,请参阅我如何排查 Amazon EKS 中的容器组 (pod) 状态问题?

**问:**我收到以下错误消息: “Conflicts found when trying to apply.Will not continue due to resolve conflicts mode.” 如何对此错误进行故障排除?

在 JSON 文件中写入配置。然后,将文件应用于插件。有关详细信息,请参阅 如何避免在创建或更新 Amazon EKS 托管插件时出现配置冲突?

**问:**如何自定义我的 Amazon EKS 插件的配置?

要为您的插件创建自定义配置,请使用 CreateAddon API 中的 ConfigurationValue 参数。

要检查 CoreDNS 插件的配置选项,请运行 describe-addon 命令:

aws eks describe-addon-configuration --addon-name coredns --addon-version v1.9.3-eksbuild.2 --query configurationSchema --output text | jq

输出示例:

{
  "$ref": "#/definitions/Coredns",
  "$schema": "http://json-schema.org/draft-06/schema#",
  "definitions": {
    "Coredns": {
      "additionalProperties": false,
      "properties": {
        "computeType": {
          "type": "string"
        },
        "corefile": {
          "description": "Entire corefile contents to use with installation",
          "type": "string"
        },
        "nodeSelector": {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        "replicaCount": {
          "type": "integer"
        },
        "resources": {
          "$ref": "#/definitions/Resources"
        }
      },
      "title": "Coredns",
      "type": "object"
    },
    "Limits": {
      "additionalProperties": false,
      "properties": {
        "cpu": {
          "type": "string"
        },
        "memory": {
          "type": "string"
        }
      },
      "title": "Limits",
      "type": "object"
    },
    "Resources": {
      "additionalProperties": false,
      "properties": {
        "limits": {
          "$ref": "#/definitions/Limits"
        },
        "requests": {
          "$ref": "#/definitions/Limits"
        }
      },
      "title": "Resources",
      "type": "object"
    }
  }
}

输出中的 configurationSchema 元素为选定版本的 CoreDNS 插件提供了可配置元素。

要更新此插件,请根据 JSON 架构指定自定义配置。例如,为了帮助在一组特定的节点上调度 CoreDNS 部署容器组,您可以自定义 nodeSelector 参数中的 selector_value

示例:

{
    "nodeSelector": {
        "selector_key": "selector_value"
    }
}

: 当我尝试使用自定义配置创建或更新插件时,为什么会收到以下错误: “ConfigurationValue provided in request is not supported: Json schema validation failed with error”?

以下配置会导致此错误:

...
"Limits":
    {
        "cpu":"100m",
        "memory":"500Mi"
    }
...

确认您的高级配置遵循插件版本支持的 configurationSchema 格式。要指定 CoreDNS 插件的资源配额和请求,请运行以下架构:

...
{
   "resources": {
        "limits": {
            "cpu": "200m",
            "memory": "200Mi",
        },
        "requests": {
            "cpu": "100m",
            "memory": "100Mi"
        }
    }
}
...

**问:**更新插件后,为什么 Amazon EKS 将带有自定义参数的插件 JSON 架构恢复为默认参数?

UpdateAddon API 操作期间,如果您未在 configurationValues 字段中包含插件的自定义参数,则该插件将恢复为默认参数。

要在更新插件时保持对配置的编辑,请执行以下操作之一:

在每次 UpdateAddon API 操作期间,将自定义参数包含在 configurationValues 参数中。

UpdateAddon 操作中使用 --resolve-conflicts PRESERVE 选项。

**问:**如何检查插件是由 Amazon EKS 管理的还是自行管理的?

要检查在集群中部署的插件的类型,请运行 AWS CLI describe-addon 命令:

aws eks describe-addon --cluster-name example-cluster --addon-name example-addon --query addon.addonVersion --output text

**注意:**将 example-cluster 替换为您的集群名称,将 example-addon 替换为您的插件名称。

如果输出提供有关您的插件的信息,则 Amazon EKS 会管理该插件。如果您在输出中收到错误消息,则该插件是自行管理的。

**问:**如何将集群中的自行管理插件迁移到 Amazon EKS 插件?

使用适当的冲突解决方法创建 Amazon EKS 插件

当您创建 Amazon EKS 插件时,您可以在 configurationSchema 字段中传递您的自定义配置。

要保持集群内配置的更改,请在更新或删除插件时使用 PRESERVE 选项。要保持 Kubernetes API 对 Amazon EKS 插件无法管理的字段所做的更改,请使用 PRESERVE 选项。如果架构不支持此托管字段,则可以在插件部署或 DaemonSet 中手动添加自定义项。然后,使用 PRESERVE 选项进行下一次更新操作。

当您为冲突解决方法选择 OVERWRITE 时,Amazon EKS 会恢复插件的自定义设置,并使用其默认值覆盖您的值。

**问:**如何将 Amazon EKS 插件迁移到自行管理的插件?

您必须从 Amazon EKS 集群中移除 Amazon EKS 插件,然后运行 delete-addon 命令:

aws eks delete-addon --cluster-name example-cluster --addon-name example-addon --preserve

**注意:**将 example-cluster 替换为您的集群名称,将 example-addon 替换为您的插件名称。使用 --preserve 标志来保留底层 Kubernetes 资源。

AWS 官方已更新 2 年前