本篇博客将展示如何在云服务器上单机部署一个Minikube服务,并且在Minikube上部署一个简单微服务。本次使用的是阿里云的云服务器ECS,操作系统为CentOS 8 64位,配置为2核4G。
部署Kubernetes系统
安装Docker
1 | sudo yum install -y yum-utils |
启动Docker服务
1 | systemctl start docker.service |
安装Minikube
下载二进制文件并安装
1 | curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 |
启动Minikube服务
不建议直接使用root用户启动,防止其权限过高。为此需要创建一个专用用户mini
1 | useradd mini |
切换mini用户后,启动Minikube。
1 | minikube start --driver=docker --image-mirror-country='cn' |
在国内建议加上
--image-mirror-country='cn'参数,使用国内镜像源。否则在启动时可能会导致失败。
启动成功后输出结果如下所示。

Minikube内包含了kubectl程序,可以直接使用kubectl指令而无需额外安装kubectl,使用命令为minikube kubectl --。
为了方便使用,可以执行以下命令来添加别名。
1 | ls -s $(which minikube) /usr/local/bin/kubectl |
访问Minikube dashboard
启动Minikube dashboard
1 | minikube dashboard |
为了能够从外部访问服务,采用nginx进行代理
nginx代理Minikube dashboard配置如下:
1 | server { |
此时可以从外部通过ip地址直接访问Minikube dashboard服务。
开发并部署微服务应用
微服务描述
可以选择基于Spring Cloud开发微服务应用等等,具体功能、开发过程省略。
微服务部署
对Spring Cloud项目打包后可以得到jar包,在对应Java环境下使用java -jar命令可以运行。
为了在Minikube上部署微服务,需要为每一个微服务构建相应的镜像。
构建镜像所使用的项目的Dockerfile文件如下,不同情形需要对其进行不同配置修改。
1 | RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone |
使用docker build命令来制作镜像。
1 | docker build -t app-service |
上传镜像仓库
Minikube似乎不能直接读取本地Docker的镜像,因此此处选择将其上传至私人镜像仓库。私人镜像仓库服务此处顺便选择了阿里云提供的服务,具体登录方法可以在阿里云镜像仓库控制台查看。
首先对本地镜像打上标签
1 | docker tag app-service registry.cn-beijing.aliyuncs.com/your-rep/app-service:1.0 |
接着登录阿里云镜像仓库库实例
1 | sudo docker login --username=your-username registry.cn-beijing.aliyuncs.com |
然后就可以将镜像推送至私人镜像仓库
1 | docker push registry.cn-beijing.aliyuncs.com/your-rep/app-service:1.0 |
部署至Minikube
为了能够让Minikube访问到私人镜像仓库,需要为其提供secret凭证。
通过该命令获取docker登录信息
1 | cat ~/.docker/config.json | base64 -w 0 |
新建配置文件secret.yaml
1 | apiVersion: v1 |
通过该配置文件可以在Minikube集群中创建secret凭证。
接着即可进行微服务实例的部署,其配置文件可参考如下。
1 | apiVersion: apps/v1 |
由此可以完成一个微服务的部署,并提供了一个NodePort类型的Service
使用nginx进行代理,其配置如下。正常来说可以通过kubectl的port-forward命令进行转发,但是在实践中始终未能成功,无奈使用nginx进行转发。
1 | server { |
此时即可在外部通过URL地址获取其提供的微服务接口
部署MySQL实例
Minikube可以管理MySQL实例运行,但为了数据持久化,需要使用nfs。
理论上在Minikube上部署一个统一的nfs-sercer实例更合适,不过此处直接在服务器上部署nfs-server。
1 | yum install nfs-utils |
配置/etc/exports文件
1 | /nfsdata/mysql 192.168.xxx.0/24(rw,sync,no_root_squash) |
然后接着执行以下命令
1 | systemctl restart rpcbind && systemctl enable rpcbind |
此时服务器已启动nfs-server,提供路径为/nfsdata/mysql
之后可以部署MySQL实例
其配置文件如下所示。
1 | apiVersion: apps/v1 |
此时实例已部署并提供了一个NodePort类型的Service
为了外部能够访问该实例,在执行kubectl port-forward命令时始终不能成功,无奈只能再次使用nginx服务代理,其配置如下
1 | stream { |
此时可以在外部访问该数据库实例。
部署Prometheus和Grafana
安装Helm
helm工具安装可以简化部署过程,这里使用Helm v3版本,安装命令如下。
1 | curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 |
安装Prometheus
1 | helm repo add prometheus-community https://prometheus-community.github.io/helm-charts |
以上命令在minikube集群上部署了Prometheus服务,并提供一个类型为NodePort的Service进行访问
同理使用nginx进行代理,其配置如下
1 | server { |
此时从外部可以访问Prometheus的面板

镜像拉取失败的解决办法
在Prometheus部署过程中,registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.10.1 这个镜像始终拉取失败
参考博客中这位提供的代理源,通过minikube dashboard将该pod配置文件的镜像名称改为 anjia0532/google-containers.kube-state-metrics.kube-state-metrics:v2.10.1 后顺利部署
安装Grafana
1 | helm repo add grafana https://grafana.github.io/helm-charts |
以上命令在minikube集群上部署了Grafana服务,并提供了一个NodePort类型的Service进行访问
nginx代理配置如下
1 | server { |
此时从外部可以访问Grafana面板
添加Prometheus数据源后,可以查看监控面板


Prometheus和Grafana的使用方法可以参考各自的相关文档,此处不作介绍。