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

在8G内存的Mac上,我是如何用Vagrant+VirtualBox搭建三节点K8s学习环境的

在8G内存的Mac上搭建三节点Kubernetes学习环境的完整指南

1. 环境准备与资源规划

对于只有8GB内存的MacBook用户来说,搭建多节点Kubernetes集群看似不可能完成的任务。但通过合理的资源分配和优化配置,完全可以实现这一目标。以下是关键准备工作:

硬件资源配置方案:

节点类型内存分配CPU核心磁盘空间网络模式
Master节点2.5GB2核20GBHost-Only
Worker节点1.5GB1核15GBHost-Only
Worker节点1.5GB1核15GBHost-Only
保留资源2.5GB--宿主机使用

必要软件清单:

  • Vagrant 2.2.19+
  • VirtualBox 6.1.28+
  • kubectl 1.22+
  • Helm 3.7+

提示:建议关闭所有非必要应用程序,特别是内存占用大的IDE和浏览器标签页。在系统偏好设置中调整Docker内存限制为4GB左右。

2. 轻量化集群搭建步骤

2.1 虚拟机配置

使用Vagrant定义三台轻量级虚拟机:

# Vagrantfile配置 Vagrant.configure("2") do |config| config.vm.box = "generic/ubuntu2004" # Master节点 config.vm.define "k8s-master" do |master| master.vm.hostname = "k8s-master" master.vm.network "private_network", ip: "192.168.56.10" master.vm.provider "virtualbox" do |vb| vb.memory = 2560 vb.cpus = 2 vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] end end # Worker节点 (1..2).each do |i| config.vm.define "k8s-worker#{i}" do |worker| worker.vm.hostname = "k8s-worker#{i}" worker.vm.network "private_network", ip: "192.168.56.1#{i}" worker.vm.provider "virtualbox" do |vb| vb.memory = 1536 vb.cpus = 1 end end end end

启动虚拟机集群:

vagrant up --parallel

2.2 Kubernetes集群初始化

在Master节点执行:

# 安装必要工具 sudo apt-get update && sudo apt-get install -y apt-transport-https curl # 添加Kubernetes源 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装指定版本(更轻量) sudo apt-get update && sudo apt-get install -y kubelet=1.22.4-00 kubeadm=1.22.4-00 kubectl=1.22.4-00 # 初始化集群(关键参数优化) sudo kubeadm init \ --apiserver-advertise-address=192.168.56.10 \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 \ --control-plane-endpoint=192.168.56.10 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.22.4

2.3 网络插件安装

使用轻量级的Flannel网络插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

验证网络组件:

kubectl get pods -n kube-system -l app=flannel

3. 关键优化策略

3.1 资源限制配置

节点资源预留(防止系统崩溃):

# /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration systemReserved: cpu: "0.5" memory: "512Mi" kubeReserved: cpu: "0.25" memory: "256Mi" evictionHard: memory.available: "200Mi"

部署资源限制示例:

apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 template: spec: containers: - name: nginx image: nginx:1.21-alpine resources: limits: cpu: "0.5" memory: "256Mi" requests: cpu: "0.25" memory: "128Mi"

3.2 存储方案选择

对于开发环境,使用hostPath提供持久化存储:

apiVersion: v1 kind: PersistentVolume metadata: name: hostpath-pv spec: storageClassName: manual capacity: storage: 5Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"

4. 典型问题解决方案

4.1 内存不足处理

现象:Pod频繁被Evicted或节点NotReady

解决方法:

  1. 调整kubelet配置:
sudo vi /var/lib/kubelet/config.yaml # 修改evictionHard参数 evictionHard: memory.available: "100Mi" nodefs.available: "10%"
  1. 设置Pod优先级:
apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000 globalDefault: false description: "用于关键系统组件"

4.2 网络连接问题

跨节点通信故障排查步骤:

  1. 检查Flannel Pod状态
  2. 验证节点路由表:
ip route show
  1. 测试跨节点连通性:
kubectl run -it --rm --image=alpine testpod -- ping <其他节点IP>

5. 开发工具集成

5.1 本地访问配置

设置kubectl本地访问:

mkdir -p $HOME/.kube vagrant ssh k8s-master -c "sudo cat /etc/kubernetes/admin.conf" > $HOME/.kube/config

5.2 可视化工具部署

安装轻量版Dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml # 创建访问Token kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')

端口转发访问:

kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8443:443

6. 进阶学习建议

完成基础环境搭建后,可以进一步探索:

  1. 微服务部署实践

    • 使用Helm部署Spring Cloud应用
    • 配置Ingress实现服务暴露
  2. 监控方案

    # 轻量级监控 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
  3. CI/CD集成

    # 安装Tekton Pipelines kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

这套环境虽然资源有限,但完整包含了Kubernetes的核心功能组件,非常适合学习各种原生API和控制器的工作原理。当需要更复杂功能时,可以考虑使用Minikube或Kind等工具在本地创建更完整的集群环境。

http://www.rkmt.cn/news/1466813.html

相关文章:

  • 从记密码到记扑克:手把手教你构建自己的‘数字-图像’记忆宫殿(实战扑克编码篇)
  • MonkeyCode开源生态与未来:AI编程的下一个十年怎么走?
  • 2026 海安防水补漏哪家好?住建实地测评权威榜单 TOP5|东部滨海盐渍渗水、南部高沙土窜水、北部里下河洼地淤土返潮修缮白皮书(6 月专项调研) - 苏易修缮
  • 微信聊天记录解密终极指南:3步快速获取完整数据备份
  • 终极Windows文件压缩解决方案:NanaZip完全指南与深度解析
  • 2026 高邮防水补漏哪家好?住建实地测评权威榜单 TOP5|西南岗地裂隙渗水、环湖圩区湖涨返潮、东部里下河洼地淤土渗水、主城老楼夹层积水修缮白皮书(6 月专项调研) - 苏易修缮
  • 3D高斯泼溅:从原理到实战,实现实时三维重建的效率革命
  • 多款免费微信投票工具,评选活动必备 - 投票评选活动
  • 最小点覆盖、最大独立集、支配
  • 颠覆性AI图像背景移除解决方案:Swift原生U2-Net模型驱动的高效能移动端实现
  • 振动信号时域指标解析:从峭度、裕度到故障诊断实战
  • 电子工程师如何构建技能护城河:从技术执行到价值创造的职业跃迁
  • 遗传算法从原理到工业落地:编码、选择与收敛的工程实践
  • 天津静海区专业靠谱春考培训学校综合排行一览 - 奔跑123
  • 从千台订单拆解电动公交核心技术:三电系统、经济模型与工程实践
  • 终极免费Flash反编译工具:5大功能让旧SWF文件重获新生
  • 2026 外国人来华旅游签代办公司推荐:商务签、私人事务签、学习签、工作签、访问签代办机构优选指南,新政策下如何选择合规代理? - 品牌榜中榜
  • 3分钟掌握网易游戏NPK文件解压技巧:轻松提取阴阳师等游戏资源
  • 别再傻傻分不清YUV和YCbCr了!从H.264到JPEG,数字图像压缩的‘色彩密码’全解析
  • MATLAB柯西色散拟合工具:内置12种光学材料数据(硫系/氧化物/半导体玻璃),支持可见-红外波段
  • 做跨境直播,团队怎么搭?三大主流模式组织架构拆解
  • RePKG:如何高效提取Wallpaper Engine资源并转换TEX格式?
  • 高频变压器设计实战指南:从磁芯选型到参数计算与工艺优化
  • 2026 榆林防水补漏三家品牌横向测评:厨卫屋面地下室修缮哪家靠谱?吉修匠 99.8 分五星稳居榜首 - 吉修匠
  • OneNote生产力终极指南:用160+功能插件告别笔记整理烦恼
  • 怎样轻松备份微信聊天记录:3步完成数据永久保存的实用指南
  • 2026西安黄金回收全区域排行,无隐形扣费机构精选 - 奢侈品交易观察员
  • LabVIEW 8.5 安装部署与兼容性配置实战指南
  • 汽车改装合规科普|看懂现行交规,车灯升级、车辆改装再也不怕年检被罚 - 英特菲斯
  • Mac音乐格式解密终极指南:3步解锁QQ音乐加密文件