Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云Windows服务器作为Worker节点加入Kubernetes集群实战

腾讯云Windows服务器作为Worker节点加入Kubernetes集群实战

原创
作者头像
Faith
修改于 2025-05-10 13:51:31
修改于 2025-05-10 13:51:31
2040
举报

之前已经介绍了怎么在windows上安装docker,本文将介绍如何将windows云服务器加入K8S,建议先阅读前文再操作:https://cloud.tencent.com/developer/article/2464400

一、环境准备与注意事项

1. 系统要求

  • Master:CentOS 7.9 (内核版本≥3.10)
  • Node:Windows Server 2019
  • Kubernetes版本:1.28.2
  • 禁用防火墙或放行6443、10250等端口,且节点能访问公网

2. 【限制】Windows节点存在以下限制:

  • 仅支持HostProcess容器隔离模式(无需Hyper-V虚拟化),由于使用HostProcess容器隔离模式,容器镜像系统版本需保持与节点系统版本一致,否则无法运行
  • windows CVM作为work节点加入K8S之后,windows节点不能通过service ip访问服务,只有节点上的pod可以访问service ip,如果要访问的话,可以用nodeip+port访问
  • 不支持NFS持久化存储
  • 网络插件支持Calico/Flannel(本教程以Calico为例)

二、Master节点配置(CentOS 7.9)

1. 系统初始化

代码语言:bash
AI代码解释
复制
# 修改主机名及hosts
hostnamectl set-hostname master

# 配置内核
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

cat << EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

2. 容器运行时安装

代码语言:bash
AI代码解释
复制
# 安装containerd和docker(docker不是必须的)
sudo yum-config-manager --add-repo=https://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i "s/download.docker.com/mirrors.tencentyun.com\/docker-ce/g"  /etc/yum.repos.d/docker-ce.repo
yum install -y containerd.io docker-ce docker-ce-cli
mkdir /etc/containerd -p 
containerd config default > /etc/containerd/config.toml
sed -i 's/registry.k8s.io\/pause:3.6/registry.aliyuncs.com\/google_containers\/pause:3.9/g' /etc/containerd/config.toml 

systemctl enable containerd
systemctl enable docker

crictl config runtime-endpoint unix:///run/containerd/containerd.sock
crictl config image-endpoint unix:///run/containerd/containerd.sock

# 配置镜像加速
mkdir /etc/containerd -p
# 生成默认配置文件,并修改pause镜像源
containerd config default | sed 's/registry.k8s.io\/pause:3.6/registry.aliyuncs.com\/google_containers\/pause:3.9/g' > /etc/containerd/config.toml
# 配置docker加速源
cat > /etc/docker/daemon.json <<EOF
{
 "registry-mirrors": [
   "https://mirror.ccs.tencentyun.com"
  ],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# 修改/etc/containerd/config.toml 配置加速源:
[plugins."io.containerd.grpc.v1.cri".registry]
   config_path = "/etc/containerd/certs.d"
   
# docker hub镜像加速
mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://mirror.ccs.tencentyun.com"]
  capabilities = ["pull", "resolve"]

[host."https://docker.m.daocloud.io"]
  capabilities = ["pull", "resolve"]
EOF

# registry.k8s.io镜像加速
mkdir -p /etc/containerd/certs.d/registry.k8s.io
tee /etc/containerd/certs.d/registry.k8s.io/hosts.toml << 'EOF'
server = "https://registry.k8s.io"

[host."https://k8s.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# docker.elastic.co镜像加速
mkdir -p /etc/containerd/certs.d/docker.elastic.co
tee /etc/containerd/certs.d/docker.elastic.co/hosts.toml << 'EOF'
server = "https://docker.elastic.co"

[host."https://elastic.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# gcr.io镜像加速
mkdir -p /etc/containerd/certs.d/gcr.io
tee /etc/containerd/certs.d/gcr.io/hosts.toml << 'EOF'
server = "https://gcr.io"

[host."https://gcr.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# ghcr.io镜像加速
mkdir -p /etc/containerd/certs.d/ghcr.io
tee /etc/containerd/certs.d/ghcr.io/hosts.toml << 'EOF'
server = "https://ghcr.io"

[host."https://ghcr.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# k8s.gcr.io镜像加速
mkdir -p /etc/containerd/certs.d/k8s.gcr.io
tee /etc/containerd/certs.d/k8s.gcr.io/hosts.toml << 'EOF'
server = "https://k8s.gcr.io"

[host."https://k8s-gcr.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# mcr.m.daocloud.io镜像加速
mkdir -p /etc/containerd/certs.d/mcr.microsoft.com
tee /etc/containerd/certs.d/mcr.microsoft.com/hosts.toml << 'EOF'
server = "https://mcr.microsoft.com"

[host."https://mcr.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# nvcr.io镜像加速
mkdir -p /etc/containerd/certs.d/nvcr.io
tee /etc/containerd/certs.d/nvcr.io/hosts.toml << 'EOF'
server = "https://nvcr.io"

[host."https://nvcr.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# quay.io镜像加速
mkdir -p /etc/containerd/certs.d/quay.io
tee /etc/containerd/certs.d/quay.io/hosts.toml << 'EOF'
server = "https://quay.io"

[host."https://quay.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# registry.jujucharms.com镜像加速
mkdir -p /etc/containerd/certs.d/registry.jujucharms.com
tee /etc/containerd/certs.d/registry.jujucharms.com/hosts.toml << 'EOF'
server = "https://registry.jujucharms.com"

[host."https://jujucharms.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# rocks.canonical.com镜像加速
mkdir -p /etc/containerd/certs.d/rocks.canonical.com
tee /etc/containerd/certs.d/rocks.canonical.com/hosts.toml << 'EOF'
server = "https://rocks.canonical.com"

[host."https://rocks-canonical.m.daocloud.io"]
  capabilities = ["pull", "resolve", "push"]
EOF

# 重启机器
reboot

3. Kubernetes组件安装

代码语言:bash
AI代码解释
复制
# 配置yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF

yum clean all 
yum makecache fast

# 安装指定版本
yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2
systemctl enable kubelet && systemctl start kubelet

4. 集群初始化

代码语言:bash
AI代码解释
复制
# 根据实际IP和需求自行修改
kubeadm init \
  --kubernetes-version=v1.28.2 \
  --pod-network-cidr=10.244.0.0/16 \
  --image-repository registry.aliyuncs.com/google_containers \
  --apiserver-advertise-address 172.27.16.23

# 配置kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

三、Windows Worker节点配置

1. 系统准备

  1. 通过腾讯云控制台创建Windows Server 2019 CVM
  2. 配置安全组开放TCP/6443、10250端口
  3. 关闭Windows Defender防火墙(公共镜像默认关闭)

2. 容器运行时安装

代码语言:powershell
AI代码解释
复制
# 下载安装脚本
Invoke-WebRequest https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/Install-Containerd.ps1 -OutFile C:\Install-Containerd.ps1

# 这一步注意,下载完不要直接执行,否则可能因为跨境网络问题下载不下来包,可以先将脚本中downloadfile的内容提前下载到本地,并放在脚本中定义的目录下,然后注释掉downloadfile的行

# 执行安装
C:\Install-Containerd.ps1 -ContainerDVersion xxxxx -skipHypervisorSupportCheck -CNIConfigPath "c:/etc/cni/net.d" -CNIBinPath "c:/opt/cni/bin"

3. Kubernetes组件部署

代码语言:powershell
AI代码解释
复制
# 准备节点组件
Invoke-WebRequest https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/PrepareNode.ps1 -OutFile C:\PrepareNode.ps1

# 跟之前一样的操作,下载下来先不要执行,先手动下载包,然后注释,再执行安装

C:\PrepareNode.ps1 -KubernetesVersion v1.28.2

四、混合网络配置(Calico)

1. 安装kube-proxy

代码语言:bash
AI代码解释
复制
# Master节点执行
wget https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/hostprocess/calico/kube-proxy/kube-proxy.yml
# 在镜像前添加docker.1ms.run并修改镜像版本为集群版本,如image: docker.1ms.run/sigwindowstools/kube-proxy:v1.28.2-calico-hostprocess
kubectl apply -f kube-proxy.yml

2. 部署Calico Operator

代码语言:bash
AI代码解释
复制
# Master节点执行
export CALICO_VERSION="v3.29.3"
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/$CALICO_VERSION/manifests/tigera-operator.yaml

# 修改custom-resources.yaml的CIDR (根据业务配置自行修改替换)
curl -O https://raw.githubusercontent.com/projectcalico/calico/$CALICO_VERSION/manifests/custom-resources.yaml
sed -i 's/192.168.0.0\/16/10.244.0.0\/16/g' custom-resources.yaml
kubectl apply -f custom-resources.yaml

#删除控制平面污点使容器调度
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

3. 网络插件配置(master节点执行)

代码语言:bash
AI代码解释
复制
# 防止IP地址借用
kubectl patch ipamconfigurations default --type merge --patch='{"spec": {"strictAffinity": true}}'

# 禁用BGP协议
kubectl patch installation default --type=merge -p '{"spec": {"calicoNetwork": {"bgp": "Disabled"}}}'

#为Calico服务创建 kubeconfig 文件,变量可通过kubectl get endpoints kubernetes -o wide 获取,自行替换
kubectl apply -f - << EOF
kind: ConfigMap
apiVersion: v1
metadata:
  name: kubernetes-services-endpoint
  namespace: tigera-operator
data:
  KUBERNETES_SERVICE_HOST: "${APISERVER_ADDR}"
  KUBERNETES_SERVICE_PORT: "${APISERVER_PORT}"
EOF

# 强制所有跨节点Pod流量通过VXLAN隧道封装
kubectl patch ippool.crd.projectcalico.org default-ipv4-ippool --type='json' -p='[{"op": "replace", "path": "/spec/vxlanMode", "value": "Always"}]'

# 将默认封装协议从IPIP切换为VXLAN
kubectl patch installation default --type='json' -p='[{"op": "replace", "path": "/spec/calicoNetwork/ipPools/0/encapsulation", "value": "VXLAN"}]'

#添加 Kubernetes 服务 CIDR(在上一步中发现)并在 Tigera-operator安装资源上启用Calico for Windows 。
kubectl patch installation default --type merge --patch='{"spec": {"serviceCIDRs": ["10.96.0.0/12"], "calicoNetwork": {"windowsDataplane": "HNS"}}}'

五、节点加入集群

1. 生成加入命令(Master节点)

代码语言:bash
AI代码解释
复制
kubeadm token create --print-join-command
# 输出示例:kubeadm join 172.27.16.23:6443 --token xxxxx --discovery-token-ca-cert-hash sha256:xxxx

2. Windows节点执行加入

代码语言:powershell
AI代码解释
复制
# 以管理员身份运行PowerShell
kubeadm join 172.27.16.23:6443 --token xxxxx --discovery-token-ca-cert-hash sha256:xxxx --v=5

3. 验证节点状态

代码语言:bash
AI代码解释
复制
kubectl get nodes -o wide
# 应显示Windows节点状态为Ready

4.预期效果展示

相关参考文档:

1、隔离模式参考:https://learn.microsoft.com/zh-cn/virtualization/windowscontainers/manage-containers/hyperv-container

2、Kubernetes 中的 Windows:https://kubernetes.io/zh-cn/docs/concepts/windows/

3、calico安装配置:https://docs.tigera.io/calico/latest/getting-started/kubernetes/windows-calico/operator

4、sig-windows-tools项目:https://github.com/kubernetes-sigs/sig-windows-tools/blob/master/guides/calico_operator.md

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【K8s】kubeadm 安装 k8s 集群
本篇文章主要是通过 VMware 来创建虚拟机,在虚拟机上通过 kubeadm 安装 k8s 集群;
Librant
2025/01/13
3250
containerd快速安装指南🚀
本指南旨在提供一个简洁有效的方法来安装containerd。我们将通过一份易于理解的脚本步骤,指导您完成安装🔧。请根据您的实际需求,适当调整containerd版本及其相关依赖。
GousterCloud
2024/03/29
3110
containerd快速安装指南🚀
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
文档:https://kubernetes.io/zh-cn/docs/home/
民工哥
2022/10/27
1.5K0
谁再说不会 K8S 高可用部署,就把这个给他甩过去!
【玩转腾讯云】腾讯云部署K8s集群
如果想要了解 K8s 的一些特性,并且将其应运的很好,那就需要动手部署一个 K8s 集群。下面讲解下在腾讯云上 K8s 集群部署流程。
程序猿Damon
2021/05/06
9.7K1
【玩转腾讯云】腾讯云部署K8s集群
containerd配置HTTP私仓
**🔍 浏览器中输入:http://192.168.11.20,即可访问刚才部署的harbor**
GousterCloud
2024/04/01
8210
containerd配置HTTP私仓
Ubuntu 23.10.1 上安装 Kubernetes 1.28.2
要ping一下自己的机器名,如果返回127.0.0.1,请到 /etc/hosts修改成实际的IP地址
NeXT80
2022/07/26
6K3
Ubuntu 23.10.1 上安装 Kubernetes 1.28.2
基于Containerd部署Kubernetes
当Kubernetes 1.20开始准备弃用Docker,相信很多人在k8s 1.20版本出现的时候,都听说了即将弃用docker,不过还没有完全弃用,但这也是未来的趋势了。k8s的底层还是容器。
互联网-小阿宇
2022/11/21
8460
kubeadm 安装kubernetes
-–image-repository:由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
以谁为师
2023/09/12
3560
kubeadm 安装kubernetes
使用kubeadm部署高可用IPV4/IPV6集群-V1.32
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2025/03/24
1480
使用kubeadm部署高可用IPV4/IPV6集群-V1.32
使用kubeadm部署高可用IPV4/IPV6集群
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2024/05/05
3650
使用kubeadm初始化IPV4/IPV6集群
使用kubeadm初始化IPV4/IPV6集群 图片 CentOS 配置YUM源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=kubernetes baseurl=https://mirrors.ustc.edu.cn/kubernetes/yum/repos/kubernetes-el7-$basearch enabled=1 EOF setenforce 0 yum install -y kubelet kubeadm
小陈运维
2022/08/19
2540
使用kubeadm初始化IPV4/IPV6集群
4.最新实践基于Containerd安装部署高可用Kubernetes集群
[TOC] 0x00 前言简述 描述: 在我博客以及前面的文章之中讲解Kubernetes相关集群环境的搭建, 随着K8S及其相关组件的迭代, 与读者当前接触的版本有所不同,所以在当前【2022年4月26日 10:08:29】时间节点,博主使用ubuntu 20.04 、haproxy、keepalive、containerd、etcd、kubeadm、kubectl 等相关工具插件【最新或者稳定的版本】进行实践高可用的kubernetes集群的搭建,这里不再对k8s等相关基础知识做介绍,如有新入门的童鞋
全栈工程师修炼指南
2022/09/29
4K0
4.最新实践基于Containerd安装部署高可用Kubernetes集群
使用kubeadm部署高可用IPV4/IPV6集群-v1.32
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2025/03/23
1310
部署kubernetes-v1.25.3(k8s)- 基于containerd容器运行时
<p align="center" ><font color="EA5607" ><b>大家好,我是秋意临。<b></font></p>
秋意零
2022/11/15
2.5K0
2.基于Containerd运行时搭建Kubernetes集群实践
本章主要讲述,使用kubeadm进行安装配置K8S集群,并指定使用containerd作为容器运行时的具体安装步骤,以及尽可能在案例中加入k8s集群常用组件及其操作配置。
全栈工程师修炼指南
2021/07/25
4.4K0
2.基于Containerd运行时搭建Kubernetes集群实践
kubeadm部署kubernetes集群
(3) 生成Kube Config文件,kubelet需要用这个文件与Master通信。
星哥玩云
2022/07/28
3470
搭建Kubernetes集群基于calico网络插件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101822.html原文链接:
全栈程序员站长
2021/06/10
1.1K0
搭建Kubernetes集群基于calico网络插件
Install kubernetes v1.24.4 on centos 7.9
确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter。
不会Coding的一休哥
2022/09/06
6260
使用 Kubespray 部署 Kubernetes 集群
本文介绍了如何使用 Kubespray 在本地开发测试部署 Kubernetes 集群及其注意事项。
CNCF
2021/05/27
2.3K0
搭建Kubernetes集群基于calico网络插件
实验环境 IP 备注 系统 192.168.1.10 master centos7 192.168.1.20 node1 centos7 192.168.1.30 node2 centos7 版本信息 docker 18.09.0 k8s v1.20.2 更改主机名 master [root@localhost ~]# hostname master [root@localhost ~]# bash [root@master ~]# node1 [root@localhost ~]# hostname n
互联网-小阿宇
2022/11/21
4120
搭建Kubernetes集群基于calico网络插件
推荐阅读
相关推荐
【K8s】kubeadm 安装 k8s 集群
更多 >
LV.0
安畅网络云计算运维工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档