当前位置: 首页 > 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.jsqmd.com/news/697286/

相关文章:

  • 别再死记硬背了!用这8个状态位,彻底搞懂UDS诊断中的DTC故障码
  • 告别命令手册:用Python脚本自动化你的Android 13 CTS/GTS测试流程
  • Linux音频(三)Codec驱动:从设备树到DAPM的完整注册流程剖析
  • 彩虹云商城系统源码2026新版|免无后门|自助发卡网程序
  • 3步掌握Equalizer APO:Windows系统级音频均衡器的终极指南
  • 别再乱搜了!FFmpeg推流RTSP/RTMP前,先搞定编译这3个坑(含libx264正确安装姿势)
  • Python3基础之list列表实例解析
  • Rust高性能番茄小说下载器:从网络爬虫到电子书生成的完整解决方案
  • 解锁Beyond Compare专业版:深入解析Python密钥生成技术
  • 讲讲河南恒发钢结构,在河南、北京等地做项目靠谱吗? - mypinpai
  • Resophy静态站点生成器:极简设计、高性能架构与实战指南
  • LizzieYzy:围棋AI智能分析教练,让复盘与学习事半功倍
  • 2026隐形车衣性价比排名,揭秘隐形车衣品牌优缺点及施工注意啥 - 工业品网
  • LangAlpha:基于程序化工具调用与持久化工作空间的金融AI研究平台深度解析
  • AAGPT本地AI助手部署指南:从架构解析到实战调优
  • 前端脚手架开发指南
  • 基于大语言模型与向量数据库构建角色扮演AI聊天机器人实践
  • AI写论文新选择!4款AI论文写作工具,为你的毕业论文保驾护航!
  • 软件认证管理中的多因素认证
  • Synopsys AXI VIP进阶玩法:利用Callback机制自定义你的Monitor分析端口
  • Tessent Scan实战:用UPF/CPF文件搞定低功耗设计测试的完整流程(含DRC避坑)
  • 【技术解析】TabNet:融合注意力与可解释性的表格数据学习新范式
  • 2026年隐形车衣费用多少,帮我推荐,分析质保及翘边原因 - 工业品牌热点
  • 当AI能‘听懂人话’:Grounding DINO如何用一句话帮你从图片里找东西?
  • 【超全教程】2026年Hermes Agent/OpenClaw阿里云3分钟轻松集成流程
  • AntV X6实战避坑:在Vue3中自定义节点样式与实现复杂交互(附完整事件处理代码)
  • 细聊隐形车衣选购要点,广州靠谱门店的隐形车衣好用吗? - 工业推荐榜
  • 从‘深分页’到‘游标分页’:一次订单导出性能提升500%的优化实录(附EasyExcel配置)
  • 渗透测试方法
  • 从零到一:基于STM32F407VET6与CubeMX的CAN通信实战配置与调试