当前位置: 首页 > news >正文

Kubernetes v1.20.9 集群搭建

Kubernetes v1.20.9 集群搭建(基于 kubeadm + Calico + CentOS 7)

本文将以三台 CentOS 7 虚拟机(2C4G)为例,使用kubeadm工具搭建一个Kubernetes v1.20.9集群,网络插件选用Calico。全文涵盖 Docker 安装、系统环境配置、Master 初始化、Node 加入以及集群验证等关键步骤,并配有流程图辅助理解。


📌 准备工作

主机 IP角色配置要求
192.168.190.11Master2核4G(≥2G内存)
192.168.190.12Node12核4G(≥2G内存)
192.168.190.13Node22核4G(≥2G内存)
  • 操作系统:CentOS 7.x(最小化安装即可)
  • 所有节点之间网络互通(内网 IP)
  • 使用root用户执行以下命令(或使用sudo

🧭 整体搭建流程图

准备3台CentOS 7宿主机

所有节点安装Docker

所有节点基础环境配置

所有节点安装kubeadm/kubelet/kubectl

Master节点预拉取镜像

Master节点执行kubeadm init

初始化成功?

kubeadm reset + 清理iptables

配置kubectl

安装Calico网络插件

Node节点执行kubeadm join

验证集群状态

✅ 集群就绪


1️⃣ 所有节点安装 Docker(v20.10.7)

Kubernetes 1.20 要求 Docker 版本在 20.10 左右,我们统一安装20.10.7

# 卸载旧版dockersudoyum remove-ydocker*2>/dev/null# 安装依赖工具sudoyuminstall-yyum-utils# 添加阿里云Docker仓库sudoyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装指定版本sudoyuminstall-ydocker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6# 启动docker并设置开机自启sudosystemctlenabledocker--now# 配置镜像加速器 + cgroup驱动(重要)sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF' { "registry-mirrors": ["https://jbw52uwf.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": {"max-size": "100m"}, "storage-driver": "overlay2" } EOFsudosystemctl daemon-reloadsudosystemctl restartdocker# 验证 docker 版本dockerversion

💡为什么设置native.cgroupdriver=systemd
Kubernetes 推荐使用systemd作为 cgroup 驱动,否则 kubelet 启动可能报错。


2️⃣ 所有节点基础环境配置

以下步骤需要在三台机器上分别执行。

2.1 关闭防火墙与 SELinux

systemctl stop firewalld systemctl disable firewalld setenforce0sed-i's/^SELINUX=enforcing$/SELINUX=permissive/'/etc/selinux/config

2.2 关闭 Swap(K8s 必须)

swapoff-ased-ri's/.*swap.*/#&/'/etc/fstab# 重启后执行 free -m 确认 swap 为 0reboot

2.3 设置主机名 & hosts 解析

# 分别在三台机器上执行hostnamectl set-hostname k8s-master# Master机器hostnamectl set-hostname k8s-node1# Node1机器hostnamectl set-hostname k8s-node2# Node2机器# 所有机器统一配置hosts(使用实际内网IP)cat>>/etc/hosts<<EOF 192.168.190.11 k8s-master 192.168.190.12 k8s-node1 192.168.190.13 k8s-node2 EOF

2.4 允许桥接流量(K8s 网络要求)

cat<<EOF|sudotee/etc/modules-load.d/k8s.confbr_netfilter EOFcat<<EOF|sudotee/etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOFsudosysctl--system

2.5 时间同步(避免证书错误)

yuminstall-yntpdate ntpdate time.windows.com# 可加入 crontab 定时同步

3️⃣ 所有节点安装 kubelet/kubeadm/kubectl

使用阿里云镜像仓库安装v1.20.9版本。

# 添加K8s阿里云yum源cat<<EOF|sudotee/etc/yum.repos.d/kubernetes.repo[kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF# 查看可用版本(可选)yum list kubelet--showduplicates|sort-r# 安装指定版本sudoyuminstall-ykubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9# 启动kubelet(此时会失败,因为还没初始化,但需要启用)sudosystemctlenable--nowkubelet

⚠️ 此时kubelet可能反复重启,是正常的,等 Master 初始化后会恢复正常。


4️⃣ Master 节点预拉取镜像

为了避免初始化时因国外镜像卡住,我们先从阿里云镜像仓库拉取所需镜像。

创建并执行以下脚本:

cat>./images.sh<<'EOF' #!/bin/bash images=( kube-apiserver:v1.20.9 kube-proxy:v1.20.9 kube-controller-manager:v1.20.9 kube-scheduler:v1.20.9 coredns:1.7.0 etcd:3.4.13-0 pause:3.2 ) for img in "${images[@]}"; do docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$img done EOFchmod+x ./images.sh&&./images.sh

5️⃣ 初始化 Master 节点

仅在k8s-master上执行,注意修改--apiserver-advertise-address为你的 Master 实际内网 IP。

kubeadm init\--apiserver-advertise-address=192.168.190.11\--control-plane-endpoint=k8s-master\--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images\--kubernetes-version v1.20.9\--service-cidr=10.96.0.0/16\--pod-network-cidr=10.244.0.0/16
  • --pod-network-cidr=10.244.0.0/16与 Calico 默认地址一致,请勿随意修改。
  • 初始化过程大约需要 1~2 分钟。

✅ 初始化成功标志

看到如下输出则表示成功:

Your Kubernetes control-plane has been initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Then you can join any number of worker nodes by running: kubeadm join k8s-master:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx

❌ 如果初始化失败

执行以下清理命令后再尝试:

kubeadm resetrm-rf/etc/cni/net.d$HOME/.kube/config iptables-F&&iptables-X&&iptables-tnat-F&&iptables-tnat-X

6️⃣ 配置 kubectl(Master 节点)

mkdir-p$HOME/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config# 测试命令kubectl get nodes# 此时应该只看到一个 master 节点,状态为 NotReady(缺少网络插件)

7️⃣ 安装 Calico 网络插件

# 下载 Calico v3.20 资源文件curlhttps://docs.projectcalico.org/archive/v3.20/manifests/calico.yaml-O# 如果你的机器有多个网卡(比如 NAT + 桥接),需要指定网卡接口名(如 ens33)# 编辑 calico.yaml,找到以下环境变量,取消注释并修改:# - name: IP_AUTODETECTION_METHOD# value: "interface=ens33"# 应用 Calicokubectl apply-fcalico.yaml

等待约 2~3 分钟,再次查看节点状态:

kubectl get nodes# 应该变为 Ready 状态

📌如何查看节点使用的网卡名?执行ip aifconfig,一般虚拟机网卡名为ens33eth0等。


8️⃣ Node 节点加入集群

在每个 Node 节点上执行 Master 初始化完成后输出的kubeadm join命令,例如:

kubeadmjoink8s-master:6443--token50rexj.yb0ys92ynnxxbo2s\--discovery-token-ca-cert-hash sha256:10fd9d2a9f4e2d7dff502aa3fb31a80f0372666efc92defde3707b499ba000e9
  • 如果忘记 token,可在 Master 上重新生成:
    kubeadm token create --print-join-command

⚠️ Node 节点上使用 kubectl

默认 Node 节点没有kubectl配置,若想在 Node 上执行kubectl get nodes,需要配置环境变量:

echo"export KUBECONFIG=/etc/kubernetes/kubelet.conf">>/etc/profilesource/etc/profile

(非必需,日常管理均在 Master 进行即可)


9️⃣ 验证集群

✅ 查看节点状态

kubectl get nodes-owide

预期输出:

NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane,master 10m v1.20.9 k8s-node1 Ready <none> 5m v1.20.9 k8s-node2 Ready <none> 5m v1.20.9

✅ 查看系统 Pod 状态

kubectl get pods-nkube-system

所有 Pod 都应处于Running状态(coredns 可能稍慢)。

✅ 部署一个测试 Nginx

kubectl create deployment nginx--image=nginx kubectl expose deployment nginx--port=80--type=NodePort kubectl get svc nginx

通过任意节点 IP + NodePort 访问,看到 Nginx 欢迎页即成功。


🧹 常见问题与解决

现象可能原因及解决
kubectl报错localhost:8080 refused未配置~/.kube/config,按第6步配置即可
coredns一直Pending网络插件未部署或 podCIDR 冲突,重新安装 Calico
Node 一直NotReady检查 kubelet 日志:journalctl -xeu kubelet,多为网络问题
kubeadm init拉取镜像失败手动拉取(参见第4步),或检查 Docker 镜像加速器是否生效
Calico Pod 报BGP not established多网卡环境需在 calico.yaml 中设置IP_AUTODETECTION_METHOD

📚 总结

本文详细记录了使用kubeadm在 CentOS 7 上部署 Kubernetes v1.20.9 集群的全过程,关键点包括:

  • 关闭 swap、SELinux、firewalld
  • 配置 Docker 使用 systemd cgroup 驱动
  • 使用阿里云镜像仓库加速组件拉取
  • 安装 Calico 网络插件解决多网卡问题
  • 使用kubeadm init/join快速建立集群

按照以上步骤操作后,你将得到一个生产可用的 K8s 集群,可用于后续的学习或工作负载部署。

🚀 下一步建议:

  • 部署Ingress Controller(如 Nginx Ingress)
  • 安装Dashboard图形化管理界面
  • 配置StorageClass实现持久化存储

参考文档

  • Kubernetes 官方文档
  • Calico 文档
  • 阿里云 Kubernetes 镜像仓库
http://www.cnnetsun.cn/news/2081482.html

相关文章:

  • CopprLink:PCIe线缆的“统一接口”时代,如何重塑数据中心互连格局?
  • Resophy静态站点生成器:极简设计、高性能架构与实战指南
  • Hyper-V虚拟网络性能翻倍?手把手教你为Windows Server 2022启用SR-IOV(附兼容性检查清单)
  • Qwen3.5-2B企业实操:构建本地知识库问答系统,响应延迟<800ms
  • 手把手解决 Stable Diffusion 反推功能安装的那些坑:从 BLIP 模型下载超时到 CLIP 文件缺失
  • 别再只盯着虚拟机了!深度解读华为云Stack的云原生灾备与智能运维(Operations Insight)
  • Bitbake构建卡在‘Reconnecting to server’?别急着重启,先检查这个隐藏的lock文件
  • SpringBoot 接口签名验证(AppKey/Secret)
  • R语言实战:基于gemtc程序包进行频率学网状Meta分析(连续型数据)
  • 泛微OA明细表动态赋值难题:从bindPropertyChange失效到定时器方案的实战解析
  • 别再死记硬背了!用Router-ID轻松搞定华为设备IS-IS的NET地址配置
  • AI代码助手在企业级开发中的实战应用与工作流集成
  • 飞腾D2000平台PBF固件编译打包实战:从源码到BIOS的完整避坑指南
  • 告别手动改图!用ArcGIS Pro的‘要素转面’和‘捕捉’工具,批量搞定面线不重合难题
  • 从零上手BMP180:一个嵌入式工程师的气压测量实践
  • RuoYi-Go 一个基于 Gin + Vue 的后台系统快速开发框架
  • 飞书文档导出Markdown踩坑实录:从申请API权限到Docker Compose部署的完整避坑指南
  • DouYinBot:3分钟搞定抖音无水印视频下载的完整指南
  • 终极解决方案:biliTickerBuy - B站会员购抢票神器完整使用指南
  • NCM解密终极指南:5分钟掌握网易云音乐格式转换技巧
  • 终极显卡驱动清理指南:Display Driver Uninstaller完整使用攻略
  • STM32F103实战:用TCA9548A扩展I2C接口,轻松连接8个相同地址的传感器
  • 突破百度网盘限速:Python逆向工程实战与高速下载解决方案
  • 闲鱼自动化采集系统实战指南:智能监控与精准推送解决方案
  • WebPlotDigitizer:3分钟学会科研图表数据提取,效率提升500%的终极解决方案
  • 从源码到实战:QtPropertyBrowser属性编辑器的现代化集成指南
  • 高效解密网易云音乐NCM文件:ncmdumpGUI专业转换工具完整指南
  • PyQt5:利用QGraphicsView实现图像像素坐标的精准拾取与动态追踪
  • 如何突破直播数据采集瓶颈?BarrageGrab的WSS直连方案深度解析
  • VSCode多智能体协同调试实操手册:从零搭建可复现的Agent通信断点系统(含完整launch.json配置模板)