Black lives matter.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
We stand in solidarity with the Black community.
Racism is unacceptable.
It conflicts with the core values of the Kubernetes project and our community does not tolerate it.
Minikube 是一种可以让您在本地轻松运行 Kubernetes 的工具。Minikube 在笔记本电脑上的虚拟机(VM)中运行单节点 Kubernetes 集群,供那些希望尝试 Kubernetes 或进行日常开发的用户使用。
Minikube 支持以下 Kubernetes 功能:
请参阅安装 Minikube。
这个简短的演示将指导您如何在本地启动、使用和删除 Minikube。请按照以下步骤开始探索 Minikube。
启动 Minikube 并创建一个集群:
minikube start
输出类似于:
Starting local Kubernetes cluster...
Running pre-create checks...
Creating machine...
Starting local Kubernetes cluster...
有关使用特定 Kubernetes 版本、VM 或容器运行时启动集群的详细信息,请参阅启动集群。
现在,您可以使用 kubectl 与集群进行交互。有关详细信息,请参阅与集群交互。
让我们使用名为 echoserver
的镜像创建一个 Kubernetes Deployment,并使用 --port
在端口 8080 上暴露服务。echoserver
是一个简单的 HTTP 服务器。
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
输出类似于:
deployment.apps/hello-minikube created
要访问 hello-minikube
Deployment,需要将其作为 Service 公开:
kubectl expose deployment hello-minikube --type=NodePort
选项 --type = NodePort
指定 Service 的类型。
输出类似于:
service/hello-minikube exposed
现在 hello-minikube
Pod 已经启动,但是您必须等到 Pod 启动完全才能通过暴露的 Service 访问它。
检查 Pod 是否启动并运行:
kubectl get pod
``
如果输出显示 STATUS
为 ContainerCreating
,则表明 Pod 仍在创建中:
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s
``
如果输出显示 STATUS
为 Running
,则 Pod 现在正在运行:
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 1/1 Running 0 13s
``
获取暴露 Service 的 URL 以查看 Service 的详细信息:
minikube service hello-minikube --url
``
要查看本地集群的详细信息,请在浏览器中复制粘贴并访问上一步骤输出的 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-
如果您不再希望运行 Service 和集群,则可以删除它们。
删除 hello-minikube
Service:
kubectl delete services hello-minikube
输出类似于:
service "hello-minikube" deleted
删除 hello-minikube
Deployment:
kubectl delete deployment hello-minikube
输出类似于:
deployment.extensions "hello-minikube" deleted
停止本地 Minikube 集群:
minikube stop
输出类似于:
Stopping "minikube"...
"minikube" stopped.
有关更多信息,请参阅停止集群。
删除本地 Minikube 集群:
minikube delete
输出类似于:
Deleting "minikube" ...
The "minikube" cluster has been deleted.
有关更多信息,请参阅删除集群。
minikube start
命令可用于启动集群。
此命令将创建并配置一台虚拟机,使其运行单节点 Kubernetes 集群。
此命令还会配置您的 kubectl 安装,以便使其能与您的 Kubernetes 集群正确通信。
注意: 如果您启用了 web 代理,则需要将此信息传递给minikube start
命令:shell 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
上下文,并将其设置为 kubectl 的默认上下文。 要切换回此上下文,请运行以下命令:kubectl config use-context minikube
。
您可以通过将 --kubernetes-version
字符串添加到 minikube start
命令来指定要用于 Minikube 的 Kubernetes 版本。例如,要运行版本 v1.18.0,您可以运行以下命令:
minikube start --kubernetes-version v1.18.0
您可以通过将 --vm-driver=<enter_driver_name>
参数添加到 minikube start
来更改 VM 驱动程序。
例如命令:
minikube start --vm-driver=<driver_name>
Minikube 支持以下驱动程序:
注意: 有关支持的驱动程序以及如何安装插件的详细信息,请参阅驱动程序。
请注意,下面的 IP 是动态的,可以更改。可以使用 minikube ip
检索。
您可以通过以下容器运行时启动 Minikube。
要使用 containerd 作为容器运行时,请运行:
minikube start \
--network-plugin=cni \
--enable-default-cni \
--container-runtime=containerd \
--bootstrapper=kubeadm
或者您可以使用扩展版本:
minikube start \
--network-plugin=cni \
--enable-default-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 \
--enable-default-cni \
--container-runtime=cri-o \
--bootstrapper=kubeadm
或者您可以使用扩展版本:
minikube start \
--network-plugin=cni \
--enable-default-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
当为 Kubernetes 使用单个 VM 时,重用 Minikube 的内置 Docker 守护程序非常有用。重用内置守护程序意味着您不必在主机上构建 Docker 镜像仓库并将镜像推入其中。相反,您可以在与 Minikube 相同的 Docker 守护进程内部构建,这可以加速本地实验。
注意: 一定要用非 `latest` 的标签来标记你的 Docker 镜像,并使用该标签来拉取镜像。因为 `:latest` 标记的镜像,其默认镜像拉取策略是 `Always`,如果在默认的 Docker 镜像仓库(通常是 DockerHub)中没有找到你的 Docker 镜像,最终会导致一个镜像拉取错误(`ErrImagePull`)。
要在 Mac/Linux 主机上使用 Docker 守护程序,请在 shell 中运行 docker-env command
:
eval $(minikube docker-env)
您现在可以在 Mac/Linux 机器的命令行中使用 Docker 与 Minikube VM 内的 Docker 守护程序进行通信:
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 的环境更改得到遵守: ```shell < DOCKER_CERT_PATH=/etc/docker --- > if [ -z "${DOCKER_CERT_PATH}" ]; then > DOCKER_CERT_PATH=/etc/docker > fi ```
Minikube 有一个 "configurator" 功能,允许用户使用任意值配置 Kubernetes 组件。
要使用此功能,可以在 minikube start
命令中使用 --extra-config
参数。
此参数允许重复,因此您可以使用多个不同的值多次传递它以设置多个选项。
此参数采用 component.key=value
形式的字符串,其中 component
是下面列表中的一个字符串,key
是配置项名称,value
是要设置的值。
通过检查每个组件的 Kubernetes componentconfigs
的文档,可以找到有效的 key。
下面是每个组件所支持的配置的介绍文档:
要在 Kubelet 上将 MaxPods
设置更改为 5,请传递此参数:--extra-config=kubelet.MaxPods=5
。
此功能还支持嵌套结构。要在调度程序上将 LeaderElection.LeaderElect
设置更改为 true
,请传递此参数:--extra-config=scheduler.LeaderElection.LeaderElect=true
。
要将 apiserver
的 AuthorizationMode
设置为 RBAC
,您可以使用:--extra-config=apiserver.authorization-mode=RBAC
。
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)端口公开的 Service,请在启动 Minikube 后在 shell 中运行此命令以获取地址:
minikube service [-n NAMESPACE] [--url] NAME
Minikube VM 通过 host-only IP 暴露给主机系统,可以通过 minikube ip
命令获得该 IP。
在 NodePort 上,可以通过该 IP 地址访问任何类型为 NodePort
的服务。
要确定服务的 NodePort,可以像这样使用 kubectl
命令:
kubectl get service $SERVICE --output='jsonpath="{.spec.ports[0].nodePort}"'
Minikube 支持 hostPath
类型的 持久卷。
这些持久卷会映射为 Minikube VM 内的目录。
Minikube VM 引导到 tmpfs,因此大多数目录不会在重新启动(minikube stop
)之后保持不变。
但是,Minikube 被配置为保存存储在以下主机目录下的文件:
/data
/var/lib/minikube
/var/lib/docker
下面是一个持久卷配置示例,用于在 /data
目录中保存数据:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0001
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
hostPath:
path: /data/pv0001/
一些驱动程序将在 VM 中挂载一个主机文件夹,以便您可以轻松地在 VM 和主机之间共享文件。目前这些都是不可配置的,并且根据您正在使用的驱动程序和操作系统的不同而不同。
注意: KVM 驱动程序中尚未实现主机文件夹共享。
驱动 | 操作系统 | 宿主机文件夹 | 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 守护进程的虚拟机。
当 Kubernetes 尝试使用 Docker 调度容器时,Docker 守护程序可能需要访问外部网络来拉取容器镜像。
如果您配置了 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 使用 libmachine 配置虚拟机,kubeadm 配置 Kubernetes 集群。
有关 Minikube 的更多信息,请参阅提案。
我们欢迎您向社区提交贡献、提出问题以及参与评论!Minikube 开发人员可以在 Slack 的 #minikube 频道上互动交流(点击这里获得邀请)。我们还有 kubernetes-dev Google Groups 邮件列表。如果您要发信到列表中,请在主题前加上 "minikube: "。