VirtualBox虚拟机实战CentOS 7.9构建Kubernetes 1.16.0多节点集群全指南在个人开发环境中搭建Kubernetes集群是掌握云原生技术的重要一步。本文将带您完成从零开始在VirtualBox虚拟机上使用CentOS 7.9操作系统构建一个完整的Kubernetes 1.16.0多节点集群的全过程。不同于简单的单节点安装我们将重点解决多节点环境下的网络配置、资源分配优化等实际问题并深入对比Flannel与Calico两种主流网络插件的性能差异。1. 环境准备与虚拟机配置1.1 VirtualBox网络架构设计在VirtualBox中创建多节点集群网络配置是关键。推荐采用Host-Only NAT混合网络模式NAT网络用于虚拟机访问互联网下载软件包等Host-Only网络用于节点间通信确保稳定的内网IP配置步骤打开VirtualBox全局设置 → 网络 → 创建Host-Only网络为每台虚拟机添加两个网卡网卡1NAT网卡2Host-Only# 查看网络接口配置 ip addr show1.2 CentOS 7.9基础配置在所有节点上执行以下基础配置# 设置主机名分别在各自节点执行 hostnamectl set-hostname master # 主节点 hostnamectl set-hostname node1 # 工作节点1 hostnamectl set-hostname node2 # 工作节点2 # 配置hosts文件所有节点相同 cat /etc/hosts EOF 192.168.56.10 master 192.168.56.11 node1 192.168.56.12 node2 EOF # 关闭防火墙和SELinux systemctl disable --now firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config1.3 资源分配建议对于学习环境建议的最低配置节点类型CPU核心内存磁盘空间Master22GB20GBWorker11GB15GB提示VirtualBox中可以为虚拟机启用嵌套虚拟化以提升性能VBoxManage modifyvm VM名称 --nested-hw-virt on2. 依赖组件安装与配置2.1 Docker CE 18.09.9安装Kubernetes 1.16.0对Docker版本有特定要求建议使用18.09.x系列# 安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加阿里云Docker源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装指定版本Docker yum install -y docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io # 配置Docker mkdir -p /etc/docker cat /etc/docker/daemon.json EOF { exec-opts: [native.cgroupdriversystemd], registry-mirrors: [https://uy35zvn6.mirror.aliyuncs.com] } EOF # 启动服务 systemctl enable --now docker验证安装docker version | grep -A5 Server:2.2 Kubernetes组件安装使用阿里云镜像源加速安装# 创建kubeadm源配置文件 cat /etc/yum.repos.d/kubernetes.repo EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck0 repo_gpgcheck0 EOF # 安装指定版本组件 yum install -y kubelet-1.16.0-0 kubeadm-1.16.0-0 kubectl-1.16.0-0 # 设置kubelet开机启动暂不启动 systemctl enable kubelet3. Master节点初始化3.1 集群初始化命令kubeadm init \ --image-repository registry.aliyun.com/google_containers \ --kubernetes-version v1.16.0 \ --apiserver-advertise-address 192.168.56.10 \ --pod-network-cidr10.244.0.0/16 \ --service-cidr10.96.0.0/12关键参数说明--apiserver-advertise-address指定Master节点用于集群通信的IP--pod-network-cidr必须与后续安装的网络插件匹配3.2 配置kubectl初始化成功后执行mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config验证Master节点状态kubectl get nodes此时节点状态应为NotReady因为尚未安装网络插件。4. 网络插件选型与安装4.1 Flannel安装与配置Flannel是最简单的选择适合学习环境kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlFlannel特点简单的Overlay网络使用UDP/VXLAN封装默认使用10.244.0.0/16网段4.2 Calico安装与配置Calico提供更丰富的网络策略功能curl -O https://docs.projectcalico.org/v3.9/manifests/calico.yaml sed -i s/192.168.0.0/10.244.0.0/g calico.yaml kubectl apply -f calico.yamlCalico特点基于BGP的三层网络支持网络策略(NetworkPolicy)性能优于Flannel4.3 网络性能对比特性FlannelCalico网络模型Overlay三层路由性能开销中低网络策略支持有限完整支持适用场景测试环境生产环境资源占用较低中等注意在VirtualBox环境中Calico可能需要额外配置BGP peer5. Worker节点加入集群5.1 获取加入命令在Master节点执行kubeadm token create --print-join-command输出示例kubeadm join 192.168.56.10:6443 --token abcdef.0123456789 \ --discovery-token-ca-cert-hash sha256:xxxxxxxx...5.2 节点加入流程在所有Worker节点执行上述命令后在Master节点验证watch kubectl get nodes正常情况几分钟内节点状态会变为Ready5.3 常见问题排查问题1节点卡在NotReady状态# 检查kubelet日志 journalctl -u kubelet -f # 检查网络插件Pod状态 kubectl get pods -n kube-system问题2证书过期错误# 同步时间 yum install -y ntpdate ntpdate time1.aliyun.com6. 集群验证与测试6.1 基本功能测试部署测试应用kubectl create deployment nginx --imagenginx:1.14-alpine kubectl expose deployment nginx --port80 --typeNodePort访问测试curl http://$(kubectl get svc nginx -o jsonpath{.spec.clusterIP})6.2 DNS测试kubectl run -it --rm --imagebusybox:1.28 test-dns -- nslookup kubernetes.default预期输出应显示正确的Service IP6.3 资源监控部署Metrics Serverkubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml查看资源使用kubectl top nodes kubectl top pods7. 日常维护与优化7.1 资源清理删除测试资源kubectl delete deployment nginx kubectl delete service nginx7.2 集群重置如需重新安装kubeadm reset -f rm -rf /etc/cni/net.d ~/.kube iptables -F7.3 VirtualBox特定优化启用CPU和内存过量分配# 每台虚拟机设置 VBoxManage modifyvm VM名称 --cpuexecutioncap 100 --memory 2048使用SSD存储模式提升IO性能VBoxManage storageattach VM名称 --storagectl SATA --port 0 --device 0 --type hdd --medium none VBoxManage createmedium disk --filename disk.vdi --size 20000 --variant Standard VBoxManage storageattach VM名称 --storagectl SATA --port 0 --device 0 --type hdd --medium disk.vdi在VirtualBox环境中运行Kubernetes集群时网络性能往往是瓶颈。通过调整Host-Only网络的MTU值比如设置为1450可以显著改善Flannel等Overlay网络的性能。同时定期使用kubectl drain和kubectl cordon命令维护节点可以确保学习环境的稳定性。