设置

设置
校验节点设置
使用 kubeadm 定制控制平面配置
高可用拓扑选项
使用 kubeadm 创建一个高可用 etcd 集群
使用 Salt 配置 Kubernetes 集群
安装 CRI
PKI 证书和需求
使用 Minikube 在本地运行 Kubernetes
验证节点设置

Edit This Page

使用 Minikube 安装 Kubernetes

Minikube 是一种可以让您在本地轻松运行 Kubernetes 的工具。Minikube 在笔记本电脑上的虚拟机(VM)中运行单节点 Kubernetes 集群,供那些希望尝试 Kubernetes 或进行日常开发的用户使用。

Minikube 功能

Minikube 支持以下 Kubernetes 功能:

安装

请参阅安装 Minikube

快速开始

这个简短的演示将指导您如何在本地启动、使用和删除 Minikube。请按照以下步骤开始探索 Minikube。

  1. 启动 Minikube 并创建一个集群:

    minikube start

    输出类似于:

    Starting local Kubernetes cluster...
    Running pre-create checks...
    Creating machine...
    Starting local Kubernetes cluster...
    

    有关使用特定 Kubernetes 版本、VM 或容器运行时启动集群的详细信息,请参阅启动集群

  2. 现在,您可以使用 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
    
  3. 要访问 hello-minikube Deployment,需要将其作为 Service 公开:

    kubectl expose deployment hello-minikube --type=NodePort

    选项 --type = NodePort 指定 Service 的类型。

    输出类似于:

    service/hello-minikube exposed
    
  4. 现在 hello-minikube Pod 已经启动,但是您必须等到 Pod 启动完全才能通过暴露的 Service 访问它。

    检查 Pod 是否启动并运行:

    kubectl get pod

    如果输出显示 STATUSContainerCreating,则表明 Pod 仍在创建中:

    NAME                              READY     STATUS              RESTARTS   AGE
    hello-minikube-3383150820-vctvh   0/1       ContainerCreating   0          3s
    

    如果输出显示 STATUSRunning,则 Pod 现在正在运行:

    NAME                              READY     STATUS    RESTARTS   AGE
    hello-minikube-3383150820-vctvh   1/1       Running   0          13s
    
  5. 获取暴露 Service 的 URL 以查看 Service 的详细信息:

    minikube service hello-minikube --url
  6. 要查看本地集群的详细信息,请在浏览器中复制粘贴并访问上一步骤输出的 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 和集群,则可以删除它们。

  7. 删除 hello-minikube Service:

    kubectl delete services hello-minikube

    输出类似于:

    service "hello-minikube" deleted
    
  8. 删除 hello-minikube Deployment:

    kubectl delete deployment hello-minikube

    输出类似于:

    deployment.extensions "hello-minikube" deleted
    
  9. 停止本地 Minikube 集群:

    minikube stop

    输出类似于:

    Stopping "minikube"...
    "minikube" stopped.
    

    有关更多信息,请参阅停止集群

  10. 删除本地 Minikube 集群:

    minikube delete

    输出类似于:

    Deleting "minikube" ...
    The "minikube" cluster has been deleted.
    

    有关更多信息,请参阅删除集群

管理您的集群

启动集群

minikube start 命令可用于启动集群。 此命令将创建并配置一台虚拟机,使其运行单节点 Kubernetes 集群。 此命令还会配置您的 kubectl 安装,以便使其能与您的 Kubernetes 集群正确通信。

Note:

如果您启用了 web 代理,则需要将此信息传递给 minikube start 命令:

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 版本

您可以通过将 --kubernetes-version 字符串添加到 minikube start 命令来指定要用于 Minikube 的 Kubernetes 版本。例如,要运行版本 v1.14.10,您可以运行以下命令:

minikube start --kubernetes-version v1.14.10

指定 VM 驱动程序

您可以通过将 --vm-driver=<enter_driver_name> 参数添加到 minikube start 来更改 VM 驱动程序。 例如命令:

minikube start --vm-driver=<driver_name>

Minikube 支持以下驱动程序:

Note: 有关支持的驱动程序以及如何安装插件的详细信息,请参阅驱动程序

通过别的容器运行时启动集群

您可以通过以下容器运行时启动 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

通过重用 Docker 守护进程使用本地镜像

当为 Kubernetes 使用单个 VM 时,重用 Minikube 的内置 Docker 守护程序非常有用。重用内置守护程序意味着您不必在主机上构建 Docker 镜像仓库并将镜像推入其中。相反,您可以在与 Minikube 相同的 Docker 守护进程内部构建,这可以加速本地实验。

Note:

一定要用非 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
Note:

在 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

配置 Kubernetes

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

要将 apiserverAuthorizationMode 设置为 RBAC,您可以使用:--extra-config=apiserver.authorization-mode=RBAC

停止集群

minikube stop 命令可用于停止集群。 此命令关闭 Minikube 虚拟机,但保留所有集群状态和数据。 再次启动集群会将其恢复到以前的状态。

删除集群

minikube delete 命令可用于删除集群。 此命令将关闭并删除 Minikube 虚拟机,不保留任何数据或状态。

与集群交互

Kubectl

minikube start 命令创建一个名为 minikubekubectl 上下文 此上下文包含与 Minikube 集群通信的配置。

Minikube 会自动将此上下文设置为默认值,但如果您以后需要切换回它,请运行:

kubectl config use-context minikube

或者像这样,每个命令都附带其执行的上下文:kubectl get pods --context=minikube

仪表盘

要访问 Kubernetes Dashboard,请在启动 Minikube 后在 shell 中运行此命令以获取地址:

minikube dashboard

Service

要访问通过节点(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}"'

持久卷(PersistentVolume)

Minikube 支持 hostPath 类型的 持久卷 这些持久卷会映射为 Minikube VM 内的目录。

Minikube VM 引导到 tmpfs,因此大多数目录不会在重新启动(minikube stop)之后保持不变。 但是,Minikube 被配置为保存存储在以下主机目录下的文件:

下面是一个持久卷配置示例,用于在 /data 目录中保存数据:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 5Gi
  hostPath:
    path: /data/pv0001/

挂载宿主机文件夹

一些驱动程序将在 VM 中挂载一个主机文件夹,以便您可以轻松地在 VM 和主机之间共享文件。目前这些都是不可配置的,并且根据您正在使用的驱动程序和操作系统的不同而不同。

Note: 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 启动或重新启动时被启动。

基于 HTTP 代理使用 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 使用 libmachine 配置虚拟机,kubeadm 配置 Kubernetes 集群。

有关 Minikube 的更多信息,请参阅提案

其他链接

社区

我们欢迎您向社区提交贡献、提出问题以及参与评论!Minikube 开发人员可以在 Slack 的 #minikube 频道上互动交流(点击这里获得邀请)。我们还有 kubernetes-dev Google Groups 邮件列表。如果您要发信到列表中,请在主题前加上 “minikube: “。

反馈