diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md deleted file mode 100644 index f6ee38a585f..00000000000 --- a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md +++ /dev/null @@ -1,464 +0,0 @@ ---- -title: 添加 Windows 节点 -min-kubernetes-server-version: 1.17 -content_type: tutorial -weight: 30 ---- - - - - -{{< feature-state for_k8s_version="v1.18" state="beta" >}} - - -你可以使用 Kubernetes 来混合运行 Linux 和 Windows 节点,这样你就可以 -混合使用运行于 Linux 上的 Pod 和运行于 Windows 上的 Pod。 -本页面展示如何将 Windows 节点注册到你的集群。 - -## {{% heading "prerequisites" %}} - {{< version-check >}} - - - -* 获取 [Windows Server 2019 或更高版本的授权](https://www.microsoft.com/en-us/cloud-platform/windows-server-pricing) - 以便配置托管 Windows 容器的 Windows 节点。 - 如果你在使用 VXLAN/覆盖(Overlay)联网设施,则你还必须安装 [KB4489899](https://support.microsoft.com/help/4489899)。 - -* 一个利用 kubeadm 创建的基于 Linux 的 Kubernetes 集群;你能访问该集群的控制面 - (参见[使用 kubeadm 创建一个单控制面的集群](/zh-cn/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/))。 - -## {{% heading "objectives" %}} - - -* 将一个 Windows 节点注册到集群上 -* 配置网络,以便 Linux 和 Windows 上的 Pod 和 Service 之间能够相互通信。 - - - - -## 开始行动:向你的集群添加一个 Windows 节点 - -### 联网配置 {#networking-configuration} - -一旦你有了一个基于 Linux 的 Kubernetes 控制面节点,你就可以为其选择联网方案。 -出于简单考虑,本指南展示如何使用 VXLAN 模式的 Flannel。 - - -#### 配置 Flannel {#configuring-flannel} - -1. 为 Flannel 准备 Kubernetes 的控制面 - - 在我们的集群中,建议对 Kubernetes 的控制面进行少许准备处理。 - 建议在使用 Flannel 时为 iptables 链启用桥接方式的 IPv4 流处理, - 必须在所有 Linux 节点上执行如下命令: - - ```bash - sudo sysctl net.bridge.bridge-nf-call-iptables=1 - ``` - - -2. 下载并配置 Linux 版本的 Flannel - - 下载最新的 Flannel 清单文件: - - ```bash - wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - ``` - - 修改 Flannel 清单中的 `net-conf.json` 部分,将 VNI 设置为 4096,并将 Port 设置为 4789。 - 结果看起来像下面这样: - - ```json - net-conf.json: | - { - "Network": "10.244.0.0/16", - "Backend": { - "Type": "vxlan", - "VNI": 4096, - "Port": 4789 - } - } - ``` - - {{< note >}} - 在 Linux 节点上 VNI 必须设置为 4096,端口必须设置为 4789,这样才能令其与 Windows 上的 - Flannel 互操作。关于这些字段的详细说明,请参见 - [VXLAN 文档](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)。 - {{< /note >}} - - {{< note >}} - 如要使用 L2Bridge/Host-gateway 模式,则可将 `Type` 值设置为 - `"host-gw"`,并忽略 `VNI` 和 `Port` 的设置。 - {{< /note >}} - - -3. 应用 Flannel 清单并验证 - - 首先应用 Flannel 配置: - - ```bash - kubectl apply -f kube-flannel.yml - ``` - - 几分钟之后,如果 Flannel Pod 网络被正确部署,你应该会看到所有 Pods 都处于运行中状态。 - - ```bash - kubectl get pods -n kube-system - ``` - - 输出中应该包含处于运行中状态的 Linux Flannel DaemonSet: - - ``` - NAMESPACE NAME READY STATUS RESTARTS AGE - ... - kube-system kube-flannel-ds-54954 1/1 Running 0 1m - ``` - - -4. 添加 Windows Flannel 和 kube-proxy DaemonSet - - 现在你可以添加 Windows 兼容版本的 Flannel 和 kube-proxy。为了确保你能获得兼容 - 版本的 kube-proxy,你需要替换镜像中的标签。 - 下面的例子中展示的是针对 Kubernetes {{< param "fullversion" >}} 版本的用法, - 不过你应该根据你自己的集群部署调整其中的版本号。 - - ```bash - curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/{{< param "fullversion" >}}/g' | kubectl apply -f - - kubectl apply -f https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml - ``` - - {{< note >}} - 如果你在使用 host-gateway 模式,则应该使用 - https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-host-gw.yml - 这一清单。 - {{< /note >}} - - {{< note >}} - 如果你在 Windows 节点上使用的不是以太网(即,"Ethernet0 2")接口,你需要 - 修改 `flannel-host-gw.yml` 或 `flannel-overlay.yml` 文件中的下面这行: - - ```powershell - wins cli process run --path /k/flannel/setup.exe --args "--mode=overlay --interface=Ethernet" - ``` - - 在其中根据情况设置要使用的网络接口。 - - ```bash - # Example - curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml | sed 's/Ethernet/Ethernet0 2/g' | kubectl apply -f - - ``` - {{< /note >}} - - -### 加入 Windows 工作节点 {#joining-a-windows-worker-node} - -{{< note >}} - -Windows 节的所有代码片段都需要在 PowerShell 环境中执行,并且要求在 -Windows 工作节点上具有提升的权限(Administrator)。 -{{< /note >}} - -{{< tabs name="tab-windows-kubeadm-runtime-installation" >}} - -{{% tab name="CRI-containerD" %}} - - -#### 安装 containerD - -```powershell -curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/Install-Containerd.ps1 -.\Install-Containerd.ps1 -``` - -{{< note >}} - -要安装特定版本的 containerD,使用参数 -ContainerDVersion 指定版本。 - -```powershell -# Example -.\Install-Containerd.ps1 -ContainerDVersion 1.4.1 -``` - -如果你在 Windows 节点上使用了与 Ethernet 不同的接口(例如 "Ethernet0 2"),使用参数 `-netAdapterName` 指定名称。 - -```powershell -# Example -.\Install-Containerd.ps1 -netAdapterName "Ethernet0 2" -``` - -{{< /note >}} - - -#### 安装 wins、kubelet 和 kubeadm - -```PowerShell -curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1 -.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} -ContainerRuntime containerD -``` - -从 [cri-tools](https://github.com/kubernetes-sigs/cri-tools) 项目安装 `crtctl`。 -`crictl` 是必需的,kubeadm 使用它与 CRI 端点通信。 - - -#### 运行 `kubeadm` 添加节点 - - 使用当你在控制面主机上运行 `kubeadm init` 时得到的命令。 - 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 - `kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。 - - -{{% /tab %}} - - -{{% tab name="Docker Engine" %}} - - - -#### 安装 Docker Engine - -安装 `Containers` 功能特性 - -```powershell -Install-WindowsFeature -Name containers -``` - - - -安装 Docker - -操作指南在 -[Install Docker Engine - Enterprise on Windows Servers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker)。 - - - -[安装 cri-dockerd](https://github.com/Mirantis/cri-dockerd)。kubelet 可以通过 cri-dockerd -在 CRI 兼容的节点上与 Docker 通信。 - -{{< note >}} - -Docker Engine 没有实现 [CRI](/zh-cn/docs/concepts/architecture/cri/), -而 CRI 是容器运行时能够与 Kubernetes 一起工作的要求。 -出于这个原因,必须安装一个额外的服务 [cri-dockerd](https://github.com/Mirantis/cri-dockerd)。 -cri-dockerd 是一个基于原来的内置 Docker Engine 支持的项目, -而这一支持在 1.24 版本的 kubelet 中[已被移除](/zh-cn/dockershim)。 -{{< /note >}} - - -从 [cri-tools](https://github.com/kubernetes-sigs/cri-tools) 项目安装 `crictl`。 -kubeadm 需要 `crictl` 才能与 CRI 端点通信。 - - -#### 安装 wins、kubelet 和 kubeadm - -```PowerShell -curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1 -.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} -``` - -#### 运行 `kubeadm` 添加节点 - -当你在控制面主机上运行 `kubeadm init` 时,输出了一个命令。现在运行这个命令。 -如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行 -`kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。 - -{{% /tab %}} -{{< /tabs >}} - - -#### 检查你的安装 {#verifying-your-installation} - -你现在应该能够通过运行下面的命令来查看集群中的 Windows 节点了: - -```bash -kubectl get nodes -o wide -``` - - -如果你的新节点处于 `NotReady` 状态,很可能的原因是系统仍在下载 Flannel 镜像。 -你可以像之前一样,通过检查 `kube-system` 名字空间中的 Flannel Pods 来了解 -安装进度。 - -```shell -kubectl -n kube-system get pods -l app=flannel -``` - - -一旦 Flannel Pod 运行起来,你的节点就应该能进入 `Ready` 状态并可 -用来处理负载。 - -## {{% heading "whatsnext" %}} - - -- [升级 kubeadm 安装的 Windows 节点](/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes) - diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md index 1aa7d0977f6..31b778d79f3 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md @@ -48,14 +48,14 @@ upgrade the control plane nodes before upgrading your Windows nodes. ```powershell # replace {{< param "fullversion" >}} with your desired version - curl.exe -Lo C:\k\kubeadm.exe https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubeadm.exe + curl.exe -Lo https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubeadm.exe ``` --> 1. 在 Windows 节点上升级 kubeadm: ```powershell # 将 {{< param "fullversion" >}} 替换为你希望的版本 - curl.exe -Lo C:\k\kubeadm.exe https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubeadm.exe + curl.exe -Lo https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubeadm.exe ``` -### 升级 kubelet {#upgrade-kubelet} +### 升级 kubelet 和 kube-proxy {#upgrade-kubelet-and-kube-proxy} 1. 在 Windows 节点上升级并重启 kubelet: ```powershell stop-service kubelet - curl.exe -Lo C:\k\kubelet.exe https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubelet.exe + curl.exe -Lo https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubelet.exe restart-service kubelet ``` + +2. 在 Windows 节点上升级并重启 kube-proxy: + + ```powershell + stop-service kube-proxy + curl.exe -Lo https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kube-proxy.exe + restart-service kube-proxy + ``` + +{{< note >}} + +如果你是在 Pod 内的 HostProcess 容器中运行 kube-proxy,而不是作为 Windows 服务, +你可以通过应用更新版本的 kube-proxy 清单文件来升级 kube-proxy。 +{{< /note >}} + -### 升级 kube-proxy {#upgrade-kube-proxy} - -1. 在一台可访问 Kubernetes API 的机器上和,将 {{< param "fullversion" >}} 替换成你 - 期望的版本后再次执行下面的命令: - - ```shell - curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/kube-proxy.yml | sed 's/VERSION/{{< param "fullversion" >}}/g' | kubectl apply -f - - ``` -