Minikube 是一个可以在本地轻松运行 Kubernetes 的工具。Minikube 在笔记本电脑的虚拟机中运行单节点 Kubernetes 集群,供那些希望尝试 Kubernetes 或对 Kubernetes 进行日常开发的用户使用。
查看 安装 Minikube。
下面是 Minikube 用法的简单示例。
如果您想要更改 VM 驱动,可以添加合适的 --vm-driver=xxx 到 minikube start 命令。Minikube 支持下面的驱动:
注意下面的 IP 是动态的、可能不同的。它可以通过 minikube ip 获取。
$ minikube start
Starting local Kubernetes cluster...
Running pre-create checks...
Creating machine...
Starting local Kubernetes cluster...
$ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
deployment.apps/hello-minikube created
$ kubectl expose deployment hello-minikube --type=NodePort
service/hello-minikube exposed
# 现在我们启动了一个 echoserver pod,但是必须等待这个 pod 启动成功后才可以通过暴露的服务对它进行访问。
# 要检查这个 pod 是否启动并运行,我们可以使用下面的命令:
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s
# 我们可以从 ContainerCreating 的状态得知,这个 pod 仍然处于创建中。
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 1/1 Running 0 13s
# 我们可以看到这个 pod 现在处于 Running 状态,我们可以对它执行 curl:
$ curl $(minikube service hello-minikube --url)
Hostname: hello-minikube-7c77b68cff-8wdzq
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://192.168.99.100:8080/
Request Headers:
accept=*/*
host=192.168.99.100:30674
user-agent=curl/7.47.0
Request Body:
-no body in request-
$ kubectl delete services hello-minikube
service "hello-minikube" deleted
$ kubectl delete deployment hello-minikube
deployment.extensions "hello-minikube" deleted
$ minikube stop
Stopping local Kubernetes cluster...
Stopping "minikube"...要使用 containerd 作为容器运行时,运行:
$ minikube start \
--network-plugin=cni \
--container-runtime=containerd \
--bootstrapper=kubeadm或者您可以使用命令的扩展版本:
$ minikube start \
--network-plugin=cni \
--extra-config=kubelet.container-runtime=remote \
--extra-config=kubelet.container-runtime-endpoint=unix:///run/containerd/containerd.sock \
--extra-config=kubelet.image-service-endpoint=unix:///run/containerd/containerd.sock \
--bootstrapper=kubeadm要使用 CRI-O 作为容器运行时,运行:
$ minikube start \
--network-plugin=cni \
--container-runtime=cri-o \
--bootstrapper=kubeadm或者您可以使用命令的扩展版本:
$ minikube start \
--network-plugin=cni \
--extra-config=kubelet.container-runtime=remote \
--extra-config=kubelet.container-runtime-endpoint=/var/run/crio.sock \
--extra-config=kubelet.image-service-endpoint=/var/run/crio.sock \
--bootstrapper=kubeadm要使用 rkt 作为容器的运行时,运行:
$ minikube start \
--network-plugin=cni \
--container-runtime=rkt这将使用包含 rkt 和 Docker 的替代 minikube ISO 映像,并启用 CNI 网络。
如有需要,可以查看 驱动 查阅支持的驱动的细节和如何安装插件。
当使用只有单个 VM 的 Kubernetes 集群时,重用 Minikube 的内置 Docker daemon 非常方便; 因为这意味着您不必在宿主机上构建 docker regitstry 并将镜像 push 进去 - 您可以在与 minikube 相同的 docker daemon 内部构建,从而加速本地实验。只需确保使用 ‘latest’ 之外的其他标签标记 Docker 镜像,并在拉取镜像时使用该标签。否则,如果你没有指定镜像的版本,它将被假定为:latest,相应的拉取镜像策略为 Always,最终可能导致 ErrImagePull,因为您可能在默认的 docker registry(通常是 DockerHub )中还没有任何版本的镜像。
为了能够在 mac/linux 主机上使用 docker daemon,请在 shell 中使用 docker-env command:
eval $(minikube docker-env)现在您应该可以在您的 mac/linux 主机上使用 docker 命令与 minikube VM 中的 docker daemon 进行通信了:
docker ps在 Centos 7 操作系统上,docker 可能报出下面的错误:
Could not read CA certificate "/etc/docker/ca.pem": open /etc/docker/ca.pem: no such file or directory修复办法是更新 /etc/sysconfig/docker,确保 Minikube 的环境变量的变化和预期一致:
< DOCKER_CERT_PATH=/etc/docker
---
> if [ -z "${DOCKER_CERT_PATH}" ]; then
> DOCKER_CERT_PATH=/etc/docker
> fi记得关闭 imagePullPolicy:Always,否则 Kubernetes 不会使用您在本地构建的镜像。
minikube start 命令可以用来启动您的集群。
这个命令会创建和配置一个虚拟机,里面运行了一个单节点的 Kubernetes 集群。
这个命令也会安装 kubectl 用于和集群进行通信。
https_proxy=<my proxy> minikube start --docker-env http_proxy=<my proxy> --docker-env https_proxy=<my proxy> --docker-env no_proxy=192.168.99.0/24不幸的是,仅仅设置环境变量是不够的。
Minikube 也会创建 “minikube” context,并且在 kubectl 把它设置为默认值。
运行这个命令 kubectl config use-context minikube 可以再切换到这个 context。
您可以使用 minikube start 命令时,添加 --kubernetes-version 参数来指定 Minikube 的 Kubernetes 版本。例如,如果要运行 v1.7.3 版本,可以运行下面的命令:
minikube start --kubernetes-version v1.7.3
Minikube 有一个 “配置器” 特性,允许用户为 Kubernetes 组件配置任意值。要使用这个特性,您可以在使用 minikube start 时加上 --extra-config 参数。
这个参数是可以重复的,所以您可以多次使用不同的值设置不同的选项。
这个参数采用 component.key=value 形式的字符串,其中 component 是下面列表中的字符串,key 是配置结构的值,value 是配置项要设置的值。
通过检查每个组件的 Kubernetes componentconfigs 文档,可以找到有效的键值。
以下是每个支持配置的文档:
要在 Kubelet 上将 MaxPods 设置更改为 5,请传递此参数:--extra-config=kubelet.MaxPods=5。
这个特性也支持嵌套结构。要把调度器的 LeaderElection.LeaderElect 设置为 true,传递这个参数 --extra-config=scheduler.LeaderElection.LeaderElect=true。
可以使用 minikube stop 命令来停止您的集群。这个命令会停止 Minikube 虚拟机,但是保留了集群里的所有状态和数据。重新启动这个集群会恢复到之前的状态。
可以使用 minikube delete 命令来删除您的集群。
这个命令会停止和删除 Minikube 虚拟机。不会保留任何数据和状态。
minikube start 命令会创建一个叫做 “minikube”的 kubectl 上下文。这个上下文包含了与您的 Minikube 集群进行通信的配置信息。
Minikube 会自动将这个上下文设为默认值,如果您将来需要将它切回,运行:
kubectl config use-context minikube,
或者像这样在每个命令中传递这个上下文:kubectl get pods --context=minikube。
要访问 Kubernetes Dashboard,在启动 Minikube 后在 shell 中执行此命令来获取访问地址:
minikube dashboard要访问通过 node port 暴露的 service,在启动 Minikube 后在 shell 中执行此命令来获取访问地址:
minikube service [-n NAMESPACE] [--url] NAMEMinikube VM 通过一个 host-only IP 地址暴露给宿主机,这个 IP 可以通过 minikube ip 命令获取。任何的 NodePort 类型的 service 可以通过这个 IP 在 NodePort 上来访问。
要确定服务的 NodePort,您可以使用这样的 kubectl 命令:
kubectl get service $SERVICE --output='jsonpath="{.spec.ports[0].nodePort}"'
Minikube 支持 hostPath 类型的 PersistentVolumes。
这些 PersistentVolumes 被映射到 Minikube VM 里的目录中。
/data/var/lib/minikube/var/lib/docker
下面是一个将数据永久存储在 /data 的 PersistentVolume 配置示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
hostPath:
path: /data/pv0001/一些驱动会在 VM 内挂载宿主机的目录,以便可以在 VM 和宿主机方便的共享文件。目前这些是不可配置的,而且根据您使用的 OS 和驱动而有所不同。
Note:目前 KVM 驱动尚未实现宿主机目录共享。
| Driver | OS | HostFolder | VM |
|---|---|---|---|
| VirtualBox | Linux | /home | /hosthome |
| VirtualBox | macOS | /Users | /Users |
| VirtualBox | Windows | C://Users | /c/Users |
| VMware Fusion | macOS | /Users | /Users |
| Xhyve | macOS | /Users | /Users |
要访问私有镜像仓库,请按照 这个页面 的步骤进行操作。
我们推荐您使用 ImagePullSecrets,但是如果您想要配置在 Minikube VM 上能够访问,您可以把 .dockercfg 放在 /home/docker 目录或者把 config.json 放在 /home/docker/.docker 目录下。
为了能让 Minikube 能够正常地启动或者重启自定义插件,请把您要在 Minikube 里启动的插件放在 ~/.minikube/addons 目录。在这个目录中的插件会被移动到 Minikube VM 中,并且在 Minikube 每次启动或者重启时启动。
Minikube 创建了一个包含了 Kubernetes 和 Docker daemon 的虚拟机。当 Kubernetes 尝试使用 Docker 调度容器时,Docker daemon 可能需要访问外部网络来拉取容器。
如果您通过 HTTP 代理访问,您可能要设置 Docker 的代理配置。
通过在运行 minikube start 时传入需要的环境变量来实现这个配置。
例如:
$ minikube start --docker-env http_proxy=http://$YOURPROXY:PORT \
--docker-env https_proxy=https://$YOURPROXY:PORT如果您的虚拟机地址是 192.168.99.100,那么您的代理设置可能会阻止 kubectl 直接访问它。
要绕过此 IP 地址的代理配置,您应该修改 no_proxy 设置。您可以这样做:
$ export no_proxy=$no_proxy,$(minikube ip)需要多个节点的特性 Minikube 也不支持。包括:
高级调度策略 <!–
Minikube uses libmachine for provisioning VMs, and kubeadm to provision a Kubernetes cluster.
For more information about Minikube, see the proposal. –>
Minikube 使用 libmachine 来提供虚拟机,使用 kubeadm 来提供 Kubernetes 集群。
想要了解更多 Minikube 的信息,查看 提议。
我们欢迎和鼓励所有的贡献、问题和评论!Minikube 开发者在 [Slack](https://kubernetes.slack.com)上 #minikube 频道闲逛(获得邀请这里)。我们还有[kubernetes-dev Google Groups邮件列表](https://groups.google.com/forum/#!forum/kubernetes-dev)。如果您要发布到列表中,请在主题前加上"minikube:"
此页是否对您有帮助?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.