# 升级 Linux 节点

LLMS index: [llms.txt](/llms.txt)

---

<!--
title: Upgrading Linux nodes
content_type: task
weight: 40
-->

<!-- overview -->

<!--
This page explains how to upgrade a Linux Worker Nodes created with kubeadm.
-->
本页讲述了如何升级用 kubeadm 创建的 Linux 工作节点。

## 准备开始

<!--
You need to have shell access to all the nodes, and the kubectl command-line tool must
be configured to communicate with your cluster. It is recommended to run this tutorial 
on a cluster with at least two nodes that are not acting as control plane hosts.
-->
<p>你必须有 Shell 能访问所有节点，且必须配置 kubectl 命令行工具让其与你的集群通信。
建议运行本教程的集群至少有两个节点，且这两个节点不能作为控制平面主机。</p>
 
  <p>要获知版本信息，请输入  <code>kubectl version</code>.</p>


<!--
* Familiarize yourself with [the process for upgrading the rest of your kubeadm
cluster](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade). You will want to
upgrade the control plane nodes before upgrading your Linux Worker nodes.
-->
* 你自己要熟悉[升级剩余 kubeadm 集群的过程](/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade)。
  你需要先升级控制面节点，再升级 Linux 工作节点。

<!-- steps -->

<!--
## Changing the package repository

If you're using the community-owned package repositories (`pkgs.k8s.io`), you need to 
enable the package repository for the desired Kubernetes minor release. This is explained in
[Changing the Kubernetes package repository](/docs/tasks/administer-cluster/kubeadm/change-package-repository/)
document.
-->
## 更改软件包仓库   {#changing-the-package-repository}

如果你正在使用社区自治的软件包仓库（`pkgs.k8s.io`），
你需要启用所需的 Kubernetes 小版本的软件包仓库。
这一点在[更改 Kubernetes 软件包仓库](/zh-cn/docs/tasks/administer-cluster/kubeadm/change-package-repository/)文档中有详细说明。

<div class="alert alert-secondary callout note" role="note">
  <strong>说明：</strong> 自 2023 年 9 月 13 日起，Kubernetes 已经<a href="/zh-cn/blog/2023/08/31/legacy-package-repository-deprecation/">弃用并冻结了旧版软件包仓库 (<code>apt.kubernetes.io</code> 和<code>yum.kubernetes.io</code>)。</a>
<strong>强烈建议使用<a href="/zh-cn/blog/2023/08/15/pkgs-k8s-io-introduction/">托管在 <code>pkgs.k8s.io</code> 上的新软件包仓库</a>来安装 2023 年 9 月 13 日之后发布的 Kubernetes 版本。</strong>
旧版软件包仓库已被弃用，其内容可能在未来的任何时间被删除，恕不另行通知。新的软件包仓库提供了从 Kubernetes v1.24.0 版本开始的下载。
</div>


<!--
## Upgrading worker nodes

### Upgrade kubeadm

Upgrade kubeadm:
-->
## 升级工作节点   {#upgrading-worker-nodes}

### 升级 kubeadm   {#upgrade-kubeadm}

升级 kubeadm：

<ul class="nav nav-tabs" id="tabs-k8s-install-kubeadm-worker-nodes" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-k8s-install-kubeadm-worker-nodes-0" role="tab" aria-controls="tabs-k8s-install-kubeadm-worker-nodes-0" aria-selected="true">Ubuntu、Debian 或 HypriotOS</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-k8s-install-kubeadm-worker-nodes-1" role="tab" aria-controls="tabs-k8s-install-kubeadm-worker-nodes-1">CentOS、RHEL 或 Fedora</a></li></ul>

<div class="tab-content" id="tabs-k8s-install-kubeadm-worker-nodes-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-k8s-install-kubeadm-worker-nodes-0" role="tabpanel" aria-labelledby="tabs-k8s-install-kubeadm-worker-nodes-0-tab" tabindex="k8s-install-kubeadm-worker-nodes"><!--
```shell
# replace x in 1.36.x-* with the latest patch version
sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.36.x-*' && \
sudo apt-mark hold kubeadm
```
-->
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 将 1.36.x-* 中的 x 替换为最新的补丁版本</span>
</span></span><span class="line"><span class="cl">sudo apt-mark unhold kubeadm <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">sudo apt-get update <span class="o">&amp;&amp;</span> sudo apt-get install -y <span class="nv">kubeadm</span><span class="o">=</span><span class="s1">&#39;1.36.x-*&#39;</span> <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">sudo apt-mark hold kubeadm
</span></span></code></pre></div></div><div class="tab-body tab-pane fade"
        id="tabs-k8s-install-kubeadm-worker-nodes-1" role="tabpanel" aria-labelledby="tabs-k8s-install-kubeadm-worker-nodes-1-tab" tabindex="k8s-install-kubeadm-worker-nodes"><!--
For systems with DNF:
```shell
# replace x in 1.36.x-* with the latest patch version
sudo yum install -y kubeadm-'1.36.x-*' --disableexcludes=kubernetes
```
-->
<p>对于使用 DNF 的系统：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 将 1.36.x-* 中的 x 替换为最新的补丁版本</span>
</span></span><span class="line"><span class="cl">sudo yum install -y kubeadm-<span class="s1">&#39;1.36.x-*&#39;</span> --disableexcludes<span class="o">=</span>kubernetes
</span></span></code></pre></div><!--
For systems with DNF5:
```shell
# replace x in 1.36.x-* with the latest patch version
sudo yum install -y kubeadm-'1.36.x-*' --setopt=disable_excludes=kubernetes
```
-->
<p>对于使用 DNF5 的系统：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 将 1.36.x-* 中的 x 替换为最新的补丁版本</span>
</span></span><span class="line"><span class="cl">sudo yum install -y kubeadm-<span class="s1">&#39;1.36.x-*&#39;</span> --setopt<span class="o">=</span><span class="nv">disable_excludes</span><span class="o">=</span>kubernetes
</span></span></code></pre></div></div></div>


<!--
### Call "kubeadm upgrade"

For worker nodes this upgrades the local kubelet configuration:
-->
### 执行 "kubeadm upgrade"    {#call-kubeadm-upgrade}

对于工作节点，下面的命令会升级本地的 kubelet 配置：

```shell
sudo kubeadm upgrade node
```

<!--
### Drain the node

Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
-->
### 腾空节点   {#drain-node}

将节点标记为不可调度并驱逐所有负载，准备节点的维护：

<!--
```shell
# execute this command on a control plane node
# replace <node-to-drain> with the name of your node you are draining
kubectl drain <node-to-drain> --ignore-daemonsets
```
-->
```shell
# 在控制平面节点上执行此命令
# 将 <node-to-drain> 替换为你正腾空的节点的名称
kubectl drain <node-to-drain> --ignore-daemonsets
```

<!--
### Upgrade kubelet and kubectl

1. Upgrade the kubelet and kubectl:
-->
### 升级 kubelet 和 kubectl   {#upgrade-kubelet-and-kubectl}

1. 升级 kubelet 和 kubectl:

   <ul class="nav nav-tabs" id="tabs-k8s-kubelet-and-kubectl" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-k8s-kubelet-and-kubectl-0" role="tab" aria-controls="tabs-k8s-kubelet-and-kubectl-0" aria-selected="true">Ubuntu、Debian 或 HypriotOS</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-k8s-kubelet-and-kubectl-1" role="tab" aria-controls="tabs-k8s-kubelet-and-kubectl-1">CentOS、RHEL 或 Fedora</a></li></ul>

<div class="tab-content" id="tabs-k8s-kubelet-and-kubectl-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-k8s-kubelet-and-kubectl-0" role="tabpanel" aria-labelledby="tabs-k8s-kubelet-and-kubectl-0-tab" tabindex="k8s-kubelet-and-kubectl">   <!--
   ```shell
   # replace x in 1.36.x-* with the latest patch version
   sudo apt-mark unhold kubelet kubectl && \
   sudo apt-get update && sudo apt-get install -y kubelet='1.36.x-*' kubectl='1.36.x-*' && \
   sudo apt-mark hold kubelet kubectl
   ```
   -->
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 将 1.36.x-* 中的 x 替换为最新的补丁版本</span>
</span></span><span class="line"><span class="cl">sudo apt-mark unhold kubelet kubectl <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">sudo apt-get update <span class="o">&amp;&amp;</span> sudo apt-get install -y <span class="nv">kubelet</span><span class="o">=</span><span class="s1">&#39;1.36.x-*&#39;</span> <span class="nv">kubectl</span><span class="o">=</span><span class="s1">&#39;1.36.x-*&#39;</span> <span class="o">&amp;&amp;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">sudo apt-mark hold kubelet kubectl
</span></span></code></pre></div></div><div class="tab-body tab-pane fade"
        id="tabs-k8s-kubelet-and-kubectl-1" role="tabpanel" aria-labelledby="tabs-k8s-kubelet-and-kubectl-1-tab" tabindex="k8s-kubelet-and-kubectl">   <!--
   For systems with DNF:
   ```shell
   # replace x in 1.36.x-* with the latest patch version
   sudo yum install -y kubelet-'1.36.x-*' kubectl-'1.36.x-*' --disableexcludes=kubernetes
   ```
   -->
<p>对于使用 DNF 的系统：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 将 1.36.x-* 中的 x 替换为最新的补丁版本</span>
</span></span><span class="line"><span class="cl">sudo yum install -y kubelet-<span class="s1">&#39;1.36.x-*&#39;</span> kubectl-<span class="s1">&#39;1.36.x-*&#39;</span> --disableexcludes<span class="o">=</span>kubernetes
</span></span></code></pre></div>   <!--
   For systems with DNF5:
   ```shell
   # replace x in 1.36.x-* with the latest patch version
   sudo yum install -y kubelet-'1.36.x-*' kubectl-'1.36.x-*' --setopt=disable_excludes=kubernetes
   ```
   -->
<p>对于使用 DNF5 的系统：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 将 1.36.x-* 中的 x 替换为最新的补丁版本</span>
</span></span><span class="line"><span class="cl">sudo yum install -y kubelet-<span class="s1">&#39;1.36.x-*&#39;</span> kubectl-<span class="s1">&#39;1.36.x-*&#39;</span> --setopt<span class="o">=</span><span class="nv">disable_excludes</span><span class="o">=</span>kubernetes
</span></span></code></pre></div></div></div>


<!--
1. Restart the kubelet:
-->
2. 重启 kubelet：

   ```shell
   sudo systemctl daemon-reload
   sudo systemctl restart kubelet
   ```

<!--
### Uncordon the node

Bring the node back online by marking it schedulable:
-->
### 取消对节点的保护   {#uncordon-node}

通过将节点标记为可调度，让节点重新上线：

<!--
```shell
# execute this command on a control plane node
# replace <node-to-uncordon> with the name of your node
kubectl uncordon <node-to-uncordon>
```
-->
```shell
# 在控制平面节点上执行此命令
# 将 <node-to-uncordon> 替换为你的节点名称
kubectl uncordon <node-to-uncordon>
```

## 接下来

<!--
* See how to [Upgrade Windows nodes](/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes/).
-->
* 查阅如何[升级 Windows 节点](/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes/)。
