Minikube 本地 Kubernetes 集群实战:从环境安装、镜像构建到应用部署(DevOps-Guide)

发布时间:2026/9/25 4:17:51
Minikube 本地 Kubernetes 集群实战:从环境安装、镜像构建到应用部署(DevOps-Guide) 云原生CI/CD运维【免费下载链接】DevOps-GuideDevOps Guide - Development to Production all configurations with basic notes to debug efficiently.项目地址https://gitcode.com/gh_mirrors/de/DevOps-Guide点击查看免费下载本指南以 DevOps-Guide 仓库中的 minikube-commands.md 为骨架完整讲解如何在单机环境用 Minikube 搭建本地 Kubernetes 集群从虚拟化检查、Homebrew 工具链安装到构建镜像、搭建本地镜像仓库、编写 Deployment/Service 清单并对外访问最后覆盖 Dashboard、清理与彻底重置。读完本文你将掌握一套不依赖云厂商、可离线复现的本地 Kubernetes 开发闭环并能把这些命令直接复用到日常调试与 CI 验证场景。一、Minikube 是什么本文适用哪些场景Minikube 是一种在本地单机环境中运行 Kubernetes 的实现方式它启动一个虚拟机默认基于 VirtualBox并在该虚拟机内部署一套完整的单节点 Kubernetes 集群。与 Container-orchestration/kubernetes 系列文档描述的完整集群不同Minikube 将 Master 组件与 Node 组件收敛到同一台机器上适合在笔记本上完成构建 → 部署 → 访问 → 清理的快速迭代。在 DevOps-Guide 仓库中本主题相关的资料还包括kubernetes-commands.mdkubectl 常用命令全集本文多次引用其中的查看、管理、监控命令kuber-concepts.mdPod、Deployment、Service、NodePort 等核心对象的概念解释kube-advanced.md集群控制面API Server、etcd、Scheduler 等的底层原理docker-commands.md镜像构建、打标签、推送等 Docker 命令参考。二、环境准备虚拟化要求与前置工具2.1 虚拟化要求VT-x / AMD-vMinikube 依赖虚拟机来承载集群因此要求宿主机 CPU 开启硬件虚拟化扩展Intel CPUVT-xAMD CPUAMD-v。该开关位于 BIOS/UEFI 设置中。在 macOSOSX上可用以下命令验证是否已开启sysctl -a | grep machdep.cpu.features | grep VMX若有输出说明虚拟化已开启可以继续。若无输出需要进入 BIOS 打开 VT-x/AMD-v 后重启。在 Linux 上常用的等价检查方式是查看/proc/cpuinfo中的vmxIntel或svmAMD标志位例如grep -E (vmx|svm) /proc/cpuinfo2.2 前置工具清单按原文档安装 Minikube 前需要以下四个组件工具作用kubectlKubernetes 官方命令行客户端用于对集群执行所有操作dockerMac 上通过 Cask 安装容器运行时既用于构建镜像也作为宿主机 Docker 客户端minikube本地单节点 Kubernetes 集群启动器virtualbox虚拟化提供者Minikube 默认依赖它创建虚拟机2.3 Homebrew 一键安装在 macOS 上使用 Homebrew 一次性安装全部工具brew update brew install kubectl brew cask install docker virtualbox brew install minikube说明brew update先更新 Homebrew 自身索引避免安装到过期版本brew install kubectl与brew install minikube安装命令行工具brew cask install docker virtualbox安装带 GUI 的 Docker Desktop 与 VirtualBox。注意minikube 属于快速迭代项目不同大版本在命令行参数如--vm-driver、--driver上存在差异安装后请以minikube version显示的版本为准。本文命令基于原文档写作时的 minikube v0.22.3 及同期的 kubectl 1.8 语法。2.4 验证安装结果安装完成后逐一验证各工具版本docker --version # Docker version 17.09.0-ce, build afdb6d4 docker-compose --version # docker-compose version 1.16.1, build 6d1ac21 docker-machine --version # docker-machine version 0.12.2, build 9371605 minikube version # minikube version: v0.22.3 kubectl version --client # Client Version: version.Info{Major:1, Minor:8, GitVersion:v1.8.1, GitCommit:f38e43b221d08850172a9a4ea785a86a3ffa3b3a, GitTreeState:clean, BuildDate:2017-10-12T00:45:05Z, GoVersion:go1.9.1, Compiler:gc, Platform:darwin/amd64}docker-compose与docker-machine在后续流程中并非必需但属于 Docker 工具链的组成部分一并验证可确认环境完整kubectl version --client只显示客户端版本连接集群后可去掉--client查看服务端API Server版本。三、启动并验证本地 Kubernetes 集群3.1 启动集群minikube start首次启动会下载组件镜像并创建虚拟机耗时较长预期输出如下Starting local Kubernetes cluster... Kubectl is now configured to use the cluster.看到第二条输出说明 kubectl 的 kubeconfig 已被 Minikube 改写并指向本地集群。此时Minikube 已经为你启动了一台虚拟机该虚拟机内部运行着一套完整的 Kubernetes 集群本机的 kubectl 已经可以直连这套集群。从 kube-advanced.md 对控制面的描述可以理解Minikube 单节点集群同样包含 API Server、etcd、Scheduler 与 Controller Manager 等 Master 组件只是它们全部运行在同一台虚拟机内这也正是单节点集群的含义——适合本地开发但不具备生产级高可用。3.2 用 kubectl 验证节点kubectl get nodes预期输出类似NAME STATUS ROLES AGE VERSION minikube Ready none 40s v1.7.5节点名为minikube状态为Ready即表示集群可用。如需查看更多细节可以配合 kubernetes-commands.md 中的扩展参数kubectl get nodes -o wide kubectl describe nodes minikube四、切换并复用 Minikube 内置 Docker 守护进程Minikube 虚拟机内部自带一个 Docker daemon。执行以下命令让本机dockerCLI 的请求指向 Minikube 内的守护进程eval $(minikube docker-env)这条命令的本质是导出DOCKER_HOST等环境变量使 docker 客户端与虚拟机内的 daemon 通信。此后docker build、docker tag、docker run等操作都发生在 Minikube 虚拟机内构建出的镜像可直接被集群使用无需再推送到远程仓库。如果你希望每次打开新终端都默认使用 Minikube 的 daemon可以把这行写入 shell 配置文件# 追加到 ~/.bash_profile 或 ~/.zshrc eval $(minikube docker-env)需要切回宿主机自带的 Docker daemon 时执行eval $(docker-machine env -u)提示eval $(...)只影响当前 shell 会话的环境变量写入配置文件后则对所有新终端生效。切换 daemon 后docker images看到的镜像列表会随之变化这是正常现象。切换完成后运行docker ps看到的将是 Minikube 集群自身的底层容器例如CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e97128790bf9 gcr.io/google-containers/kube-addon-manager /opt/kube-addons.sh 22 seconds ago Up 22 seconds k8s_kube-addon-manager_kube-addon-manager-minikube_kube-system_c654b2f084cf26941c334a2c3d6db53d_0 69707e54d1d0 gcr.io/google_containers/pause-amd64:3.0 /pause 33 seconds ago Up 33 seconds k8s_POD_kube-addon-manager-minikube_kube-system_c654b2f084cf26941c334a2c3d6db53d_0其中pause-amd64是每个 Pod 的基础设施容器负责持有 Pod 网络命名空间kube-addon-manager则负责管理集群附加组件——它们印证了集群跑在 Minikube 虚拟机里这一事实。五、核心实战构建镜像并在本地 Kubernetes 上部署应用本节完整复现原文档的构建 → 部署 → 访问主流程先在本地起一个镜像仓库再构建并推送镜像最后通过清单文件部署到集群并从集群外访问。5.1 搭建本地镜像仓库Kubernetes 需要从镜像仓库拉取镜像。先在宿主机或 Minikube daemon 环境启动一个本地 registry让集群可以就近取镜像docker run -d -p 5000:5000 --restartalways --name registry registry:2参数说明参数含义-d后台detached运行-p 5000:5000将容器 5000 端口映射到宿主 5000 端口--restartalways容器异常退出后自动重启--name registry容器命名便于后续管理registry:2官方 registry 镜像的 v2 版本5.2 构建应用镜像并打标签推送原文档建议在某个全新的空目录中存放三个文件Dockerfile、my-app.yml、index.html原文档以 gist 形式提供仓库中未包含这三个文件下面给出与原文档描述一致的参考实现可直接复制使用。参考Dockerfile原文档docker images输出中已存在httpd:2.4-alpine镜像与其一致FROM httpd:2.4-alpine COPY index.html /usr/local/apache2/htdocs/参考index.htmlh1Hello world!/h1在该目录下构建镜像docker build . --tag my-app构建完成后确认镜像已生成docker images然后将镜像打上本地仓库的完整标签并推送docker tag my-app localhost:5000/my-app:0.1.0再次查看镜像列表应同时出现两个条目同一镜像 ID两个标签REPOSITORY TAG IMAGE ID CREATED SIZE my-app latest cc949ad8c8d3 44 seconds ago 89.3MB localhost:5000/my-app 0.1.0 cc949ad8c8d3 44 seconds ago 89.3MB httpd 2.4-alpine fe26194c0b94 7 days ago 89.3MB补充说明docker build . --tag my-app是 docker-commands.md 中docker build -t image-name .的等价写法--tag即-tdocker tag image repository:tag用于为镜像追加仓库地址与版本标签是推送前的必要步骤这里镜像体积 89.3MB 与httpd:2.4-alpine一致符合基于该基础镜像构建的预期。若你的集群运行在 Minikube 内置 daemon 中见第四节docker build与docker run均在虚拟机内执行因此localhost:5000指向的是虚拟机内的 registry集群拉取时同样走localhost:5000链路天然一致若在宿主机 daemon 构建则需保证 Minikube 能访问到该 registry 地址。5.3 编写 my-app.yml 并创建资源参考my-app.ymlDeployment NodePort Service 的组合与从集群外暴露 my-app的流程一致apiVersion: apps/v1 kind: Deployment metadata: name: my-app labels: app: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: localhost:5000/my-app:0.1.0 imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-app spec: type: NodePort selector: app: my-app ports: - port: 80 targetPort: 80这里对应的正是 kuber-concepts.md 中描述的模型Deployment声明式地管理 Pod 与 ReplicaSet负责把实际状态收敛到期望状态Service为一组 Pod 提供稳定的访问入口type: NodePort会把服务暴露到每个节点的固定端口上port是服务对外暴露的端口targetPort是容器内应用实际监听的端口两者分离参考 kuber-concepts.md 的 Target Port 说明。创建资源kubectl create -f my-app.yml查看集群中的全部资源kubectl get all应能看到名为my-app的 Deployment、ReplicaSet、Pod 与 Service。5.4 从集群外部访问应用由于 Service 类型为 NodePortMinikube 提供了直达入口的命令minikube service my-app --url输出形如http://192.168.99.100:30304端口每次可能不同。用浏览器打开该地址应看到Hello world!——你已经从本地 Kubernetes 集群外部访问到了集群内的应用。补充说明NodePort 会将 Service 暴露在每个节点的 IP 与静态端口上参考 kuber-concepts.md 的 NodePort 说明minikube service --url只是帮你把 Minikube 虚拟机 IP 与该 NodePort 拼成可访问地址若想手动查看端口可用kubectl get svc my-app查看PORT(S)列。5.5 清理 my-app 部署kubectl delete deploy my-app kubectl delete service my-appkubectl delete deploy my-app会级联删除其管理的 ReplicaSet 与 Pod随后删除 Service。清理完成后就可以继续部署其他镜像了。六、命令行快速部署的三种姿势除了清单文件kubectl 也支持纯命令行方式快速拉起工作负载。6.1 一步到位kubectl run单条命令即可创建 Pod/Deployment 并暴露端口kubectl run pod-name-to-be-created --imageimage-name --envPORT8080 --port8080 --expose --namespacenamespace参数说明参数含义pod-name-to-be-created待创建的工作负载名称--imageimage-name容器镜像--envPORT8080注入环境变量PORT8080--port8080容器监听端口--expose同时创建 Service 暴露服务--namespacenamespace指定命名空间6.2 先 run 再 exposeexternal-ip 方式原文档以katacoda/docker-http-server:latest镜像为例先创建名为http的 Deploymentkubectl run http --imagekatacoda/docker-http-server:latest --replicas1然后用kubectl expose把容器 80 端口映射到主机 8000 端口并绑定到宿主机的 external-ipkubectl expose deployment http --external-ip172.17.0.57 --port8000 --target-port80之后即可通过 curl 验证 HTTP 服务curl http://172.17.0.57:8000注意172.17.0.57是原文档环境Katacoda 沙箱中的宿主机 IP实际使用时应替换为你自己环境的节点/宿主机 IP。--port8000是 Service 对外端口--target-port80是容器内应用监听端口。6.3 hostport 方式Docker 端口映射再创建一个名为httpexposed的 Deployment用--hostport直接把 Pod 端口暴露到宿主机 8001 端口kubectl run httpexposed --imagekatacoda/docker-http-server:latest --replicas1 --port80 --hostport8001访问验证curl http://172.17.0.57:8001这种方式的关键差异在于--hostport底层走的是 Docker 端口映射hostPort字段因此不会创建 Kubernetes Service——执行kubectl get svc看不到httpexposed对应的条目。要查看它的运行细节需要回落到 Docker 层面docker ps | grep httpexposed实操建议hostport方式适合快速调试单个 Pod多副本、需要负载均衡与稳定服务名的场景应优先使用 ServiceNodePort/LoadBalancer/ClusterIP。七、集群管理Dashboard、监控与重置7.1 Minikube 自带 DashboardMinikube 内置的 Kubernetes Web 控制台一条命令即可打开会自动在浏览器中启动并建立代理minikube dashboard7.2 手动部署 Kubernetes Dashboard非默认新版 Kubernetes 中 Dashboard UI 不再默认部署需要手动安装。原文档给出的部署命令v2.0.0 官方推荐清单kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml启动访问代理kubectl proxy随后 Dashboard 将通过 kubectl 代理地址可用http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/登录sign-in需要令牌token原文档提供了一行式获取命令——从kube-system命名空间中提取deployment-controller-token-*类型 Secret 的 token 值kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | awk /^deployment-controller-token-/{print $1}) | awk $1token:{print $2}将输出的 token 粘贴到 Dashboard 登录页即可进入。7.3 常用 kubectl 管理与排查命令配合 kubernetes-commands.md 的完整命令集以下是本地集群最常用的排查组合# 查看 Pod/Service/Deployment kubectl get pods -o wide kubectl get svc kubectl get deploy # 查看资源详情与事件Pod 起不来时的首选 kubectl describe pod pod-name # 查看日志-f 持续跟踪-c 指定多容器 Pod 中的某个容器 kubectl logs [-f] pod-name [-c container-name] # 进入 Pod 内的交互 shell kubectl exec -it pod-name -- sh # 端口转发把集群内端口映射到本机便于本地调试 kubectl port-forward pod-name local-port:remote-port # 查看节点与 Pod 的资源占用需要 metrics 组件 kubectl top nodes kubectl top pods7.4 彻底重置与卸载停止并删除 Minikube 集群minikube stop; minikube delete;删除本地缓存的集群与 kubeconfig 数据含已构建的本地镜像rm -rf ~/.minikube ~/.kube;说明minikube delete会销毁虚拟机但~/.minikube中可能残留配置文件、~/.kube中残留 kubeconfig 条目因此原文档进一步做了物理清理。卸载全部相关工具macOS Homebrewbrew uninstall kubectl; brew cask uninstall docker virtualbox minikube;八、注意事项与常见问题虚拟化未开启启动minikube start报 VT-x/AMD-v 相关错误时先按第二节方法检查 BIOS 设置。eval $(minikube docker-env)只对当前终端生效新开终端后docker images看不到之前构建的镜像需要重新执行或写入 shell 配置文件。两个 daemon 的镜像不互通宿主 daemon 与 Minikube daemon 是两套环境构建/部署前先确认当前docker指向哪个 daemon可用docker-machine env或minikube docker-env状态判断。单节点限制Minikube 是单节点集群没有真实的多节点调度、高可用与云负载均衡能力kuber-concepts.md 中描述的 LoadBalancer 型 Service 需要云厂商支持本地验证请使用 NodePort 或minikube service --url。镜像拉取策略本地构建的镜像若使用latest标签建议配合imagePullPolicy: IfNotPresent如 5.3 节示例避免集群反复尝试从远端拉取。版本差异kubectl/minikube 版本跨度较大时kubectl run的参数如--replicas、--expose与 Dashboard 部署方式可能变化遇到废弃提示请以kubectl run --help与官方文档为准。九、仓库延伸阅读minikube-commands.md本文的原始命令来源kubernetes-commands.md更完整的 kubectl 命令速查查看、查找、管理、监控、日志kuber-concepts.mdPod、ReplicaSet、Deployment、Service、NodePort、Ingress 等对象的概念详解kube-advanced.md集群控制面组件kube-apiserver、etcd、controller-manager、scheduler与节点组件kubelet、kube-proxy的工作原理docker-commands.md 与 docker-concepts.md镜像构建、容器生命周期与 Docker 引擎原理Container-orchestration/Docker/Dockerfile仓库内置的 Dockerfile 实例可参考其多步RUN写法定制你自己的应用镜像。赞分享云原生CI/CD运维【免费下载链接】DevOps-GuideDevOps Guide - Development to Production all configurations with basic notes to debug efficiently.项目地址https://gitcode.com/gh_mirrors/de/DevOps-Guide点击查看免费下载相关推荐Rook 开发者环境搭建实战Minikube、本地镜像构建与一键开发集群Rook 开发者环境搭建实战Minikube、本地镜像构建与一键开发集群 本篇指南以 RookKubernetes 的存储编排系统官方开发者环境文档为主体云原生存储容器编排运维5分钟掌握Mermaid在线编辑器零代码绘制专业图表的秘密武器5分钟掌握Mermaid在线编辑器零代码绘制专业图表的秘密武器 还在为技术文档中的图表制作而烦恼吗Mermaid在线编辑器为你带来了革命性的解决方案这款基可观测性指标监控云原生minikube 快速上手指南从安装、启动到部署应用的本地 Kubernetes 完整实战minikube 快速上手指南从安装、启动到部署应用的本地 Kubernetes 完整实战 minikube 是面向本地环境的 Kubernetes 发行版云原生容器编排CLI开发工具上一篇如何在Unity HDRP中快速实现MMD模型的完美适配与动画制作下一篇Manim交互式开发完整指南告别反复渲染的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询