minikube 启动一个 nginx 服务
源地址:https://minikube.sigs.k8s.io/docs/start/
一。启动minikube
minikube start //默认启动,可以加后面几种参数,自己看环境选择
2.驱动参数---指定驱动名称
说明: 若要为
minikube start
设置--vm-driver
,在下面提到<驱动名称>
的地方, 用小写字母输入你安装的 hypervisor 的名称。 指定 VM 驱动程序 列举了--vm-driver
值的完整列表。
minikube start --vm-driver=<驱动名称>
minikube start --vm-driver=<驱动名称> --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
# 举个例子
minikube start --vm-driver=none --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
//使用docker驱动要加这个参数
minikube start --driver=docker
注意
:这里要注意的是,使用none参数需要你的root权限,如果你的vm-driver使用的docker,那就不能在root下运行,他会报要给错误,这里不同的参数使用权限还不同,这里使用none作为例子。
运行成功后会出现类似下面这个

如果不使用镜像,就可能会出现下面这个无法拉取镜像的问题

一旦 minikube start
完成,你可以运行下面的命令来检查集群的状态:
minikube status
如果你的集群正在运行,minikube status
的输出结果应该类似于这样:
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
这里他会在docker中运行一些基本的容器,你可以在docker ps中看到一些正在运行的容器,大致是这样

成功
做到这一步,说明你的kubernetes已经运行成功了。接下来可以做一些其他操作。
1.下载对应的 kubectl 工具(已经是最新的 kubectl 可省略)
minikube kubectl -- get po -A
1.1 使用 kubectl create 命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行 Container(下面用nginx镜像做例子,不使用官方例子,因为亲和一些),需要提前 docker pull nginx
kubectl create deployment hello-nginx --image=nginx:latest
这句话代表运行一个名称为 hello-nginx 的 pod 内为 nginx 镜像的 Deployment
1.2 查看 Deployment:
kubectl get deployments
输出结果类似于这样:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
1.3 查看 Pod:
kubectl get pods
输出结果类似于这样:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
1.5查看集群事件:
kubectl get events
1.6 查看 kubectl 配置:
kubectl config view
注意:默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。 要使得
hello-node容器可以从 Kubernetes 虚拟网络的外部访问,你必须将 Pod 暴露为 Kubernetes Service
。
2. 使用 kubectl expose
命令将 Pod 暴露给公网
官方教程:https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/expose/expose-interactive/
为 hello-nginx 的nginx创建service,并通过Service的 port 80端口转发至容器的target-port 80端口上。
注意:port 对应的端口必须是这个镜像项目实际监听的端口,比如我这里用的是 nginx 镜像,默认监听的是 80 ,如果你用官方例子的 8080 就会无法访问,或者出现请求被拒绝的错误。
命令详情地址:http://docs.kubernetes.org.cn/475.html
这个不同的 type 都可以 ,详细区别去官方解释看
kubectl expose deployment hello-nginx --type=NodePort --port=80 --target-port=80
kubectl expose deployment hello-nginx --type=LoadBalancer --port=80 --target-port=80
到这一步,直接访问 80 端口就可访问 nginx 了。后面那几步是为了服务的转发,集群的暴露等操作。
查看你创建的 Service:
kubectl get services
输出结果类似于这样:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.144.78 <pending> 80:30369/TCP 21s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
对于支持负载均衡器的云服务平台而言,平台将提供一个外部 IP 来访问该服务。 在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问。
运行下面的命令:
minikube service hello-nginx
或者,使用kubectl转发端口
kubectl port-forward service/hello-nginx 80:80```
#停止运行
在确认 Minikube 与 hypervisor 均正常工作后,你可以继续使用 Minikube 或停止集群。要停止集群,请运行:
minikube stop
## 清理本地状态[](https://kubernetes.io/zh/docs/tasks/tools/install-minikube/#cleanup-local-state)
如果你之前安装过 Minikube,即使已经停止了,再次运行 `minikube start` 会返回一个错误:
machine does not exist
那么,你需要清理 minikube 的本地状态(因为已经运行过会有上一次的信息,下一次启动需要先清理上一次的信息):
minikube delete
or
minikube delete --all
这时候再去运行`start`命令就可以正常启动,也就是说,执行stop后需要执行delete删除,下次才能start。