

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 更新 Kubernetes `kube-proxy` 自行管理的附加组件
<a name="kube-proxy-add-on-self-managed-update"></a>

**重要**  
建议您向集群添加 Amazon EKS 类型的附加组件，而不是自行管理类型的附加组件。如果不熟悉这些类型之间的区别，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。有关向集群中添加 Amazon EKS 附加组件的更多信息，请参阅 [创建 Amazon EKS 附加组件](creating-an-add-on.md)。如果您无法使用 Amazon EKS 附加组件，我们鼓励您向[容器路线图 GitHub 存储库](https://github.com/aws/containers-roadmap/issues)提交有关您为什么无法使用的问题。

## 先决条件
<a name="managing-kube-proxy-prereqs"></a>
+ 现有 Amazon EKS 集群。要部署一个角色，请参阅[开始使用 Amazon EKS](getting-started.md)。

## 注意事项
<a name="managing-kube-proxy-considerations"></a>
+  Amazon EKS 集群上的 `Kube-proxy` 具有[与 Kubernetes 相同的兼容性和偏斜策略](https://kubernetes.io/releases/version-skew-policy/#kube-proxy)。了解如何[验证 Amazon EKS 附加组件版本与集群的兼容性](addon-compat.md)。

  1. 确认已在集群上安装自行管理类型的附加组件。将 *my-cluster* 替换为您的集群的名称。

     ```
     aws eks describe-addon --cluster-name my-cluster --addon-name kube-proxy --query addon.addonVersion --output text
     ```

     如果返回错误消息，则表明集群上安装有自行管理类型的附加组件。本主题中的其余步骤用于更新自行管理类型的附加组件。如果返回版本号，则表明集群上安装有 Amazon EKS 类型的附加组件。要更新附加组件的 Amazon EKS 类型，请使用[更新 Amazon EKS 附件组件](updating-an-add-on.md)中的程序，而不是此主题中的程序。如果不熟悉这些附加组件类型之间的区别，请参阅 [Amazon EKS 附加组件](eks-add-ons.md)。

  1. 查看集群上当前安装的容器映像版本。

     ```
     kubectl describe daemonset kube-proxy -n kube-system | grep Image
     ```

     示例输出如下。

     ```
     Image:    602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.29.1-eksbuild.2
     ```

     在示例输出中，集群上安装的版本是 *v1.29.1-eksbuild.2*。

  1. 通过将 *602401143452* 和 *region-code* 替换为上一步中输出的值，更新 `kube-proxy` 附加组件。将 *v1.30.6-eksbuild.3* 替换为[最新可用的自行管理 kube-proxy 容器映像版本中](managing-kube-proxy.md#managing-kube-proxy-images)针对各 Amazon EKS 集群版本表列出的 `kube-proxy` 版本。
**重要**  
每种图像类型的清单都不同，且在*默认*或*最小*图像类型之间不兼容。您必须使用与前一个图像相同的图像类型，以便入口点与参数匹配。

     ```
     kubectl set image daemonset.apps/kube-proxy -n kube-system kube-proxy=602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.30.6-eksbuild.3
     ```

     示例输出如下。

     ```
     daemonset.apps/kube-proxy image updated
     ```

  1. 确认新版本现已安装在集群上。

     ```
     kubectl describe daemonset kube-proxy -n kube-system | grep Image | cut -d ":" -f 3
     ```

     示例输出如下。

     ```
     v1.30.0-eksbuild.3
     ```

  1. 如果您在同一集群中使用 `x86` 和 `Arm` 节点，而且您的集群是在 2020 年 8 月 17 日之前部署的。那么请使用以下命令编辑您的 `kube-proxy` 清单以将多个硬件架构的节点选择器纳入其中。您只需执行此操作一次。将选择器添加到清单中之后，您无需在每次更新附加组件时都进行添加。如果您的集群是在 2020 年 8 月 17 日或之后部署的，则 `kube-proxy` 已经具有多架构功能。

     ```
     kubectl edit -n kube-system daemonset/kube-proxy
     ```

     将以下节点选择器添加到编辑器中的文件中，然后保存文件。有关在编辑器的何处纳入此文本的示例，请参阅 GitHub 上的 [CNI 清单](https://github.com/aws/amazon-vpc-cni-k8s/blob/release-1.11/config/master/aws-k8s-cni.yaml#L265-#L269)文件。这让 Kubernetes 能够根据节点的硬件架构提取正确的硬件映像。

     ```
     - key: "kubernetes.io/arch"
       operator: In
       values:
       - amd64
       - arm64
     ```

  1. 如果集群最初是使用 Kubernetes `1.14` 版本或更高版本创建的，则可以跳过此步骤，因为 `kube-proxy` 已经包含了此 `Affinity Rule`。如果 Amazon EKS 集群最初是使用 Kubernetes `1.13` 版本或更低版本创建的，且打算在集群中使用 Fargate 节点，则编辑 `kube-proxy` 清单纳入 `NodeAffinity` 规则，防止从 Fargate 节点上调度 `kube-proxy` 容器组（pod）。您只需执行此编辑一次。将 `Affinity Rule` 添加到清单中之后，您无需在每次更新附加组件时都进行添加。编辑 `kube-proxy` Daemonset。

     ```
     kubectl edit -n kube-system daemonset/kube-proxy
     ```

     将以下 `Affinity Rule` 添加到编辑器中文件中的 DaemonSet `spec` 部分，然后保存文件。有关在编辑器的何处纳入此文本的示例，请参阅 GitHub 上的 [CNI 清单](https://github.com/aws/amazon-vpc-cni-k8s/blob/release-1.11/config/master/aws-k8s-cni.yaml#L270-#L273)文件。

     ```
     - key: eks.amazonaws.com/compute-type
       operator: NotIn
       values:
       - fargate
     ```