使用Minikube安装Kubernetes

半兽人 发表于: 2019-12-09   最后更新时间: 2020-11-20  

Minikube是一种可以轻松在本地运行Kubernetes的工具。Minikube在笔记本电脑的虚拟机(VM)内运行一个单节点Kubernetes集群,以供希望试用Kubernetes或每天使用它开发的用户使用。

Minikube功能

Minikube支持以下Kubernetes功能:

  • DNS
  • NodePorts
  • ConfigMaps 和 Secrets
  • Dashboards
  • 容器运行时: Docker, CRI-O,和 containerd
  • 启用 CNI (容器网络接口)
  • Ingress

安装

请参阅安装Minikube.

快速启动

以下是一个简短的demo,指导您如何在本地启动,使用和删除Minikube。 请按照下面给出的步骤开始和探索Minikube。

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

     minikube start
    

    输出以下内容:

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

    有关在特定的Kubernetes版本,VM或容器运行时,请参见启动集群

  2. 现在,你可以使用kubectl与您的集群进行交互。有关更多信息,请参见[与群集进行交互](#interacting-with-your-cluster)。

    让我们使用名为“echoserver”的现有镜像创建一个Kubernetes部署,该镜像是一个简单的HTTP服务器,并使用--port将其暴露在端口8080上。

     kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
    

    输出以下内容:

     deployment.apps/hello-minikube created
    
  3. 要访问hello-minikube的话, 需要将它作为服务进行暴露:

     kubectl expose deployment hello-minikube --type=NodePort --port=8080
    

    --type=NodePort 指定Service(服务)的类型.

    输入以下内容:

     service/hello-minikube exposed
    
  4. "hello-minikube" Pod现在已启动了,但是必须等到Pod启动后才能通过暴露的服务访问它。

    检查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
    
  5. 获取暴露服务的URL以查看服务详细信息:
     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-
    

    如果测试完成后,可以将服务和集群删除。

  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安装程序与此集群进行通信。

注意:

如果您使用的是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版本

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

minikube start --kubernetes-version {{< param "fullversion" >}}

指定VM驱动程序

您可以通过在minikube start中添加--vm-driver = <enter_driver_name>标志来更改VM驱动程序。

例如:

minikube start --vm-driver=<driver_name>

Minikube支持以下驱动程序:

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

  • virtualbox
    • vmwarefusion
    • kvm2 (driver installation)
    • hyperkit (driver installation)
    • hyperv (driver installation)
      Note that the IP below is dynamic and can change. It can be retrieved with minikube ip.
    • vmware (driver installation) (VMware unified driver)
    • none (Runs the Kubernetes components on the host and not in a VM. It is not recommended to run the none driver on personal workstations. Using this driver requires Docker (docker install) and a Linux environment)

在备用容器运行时上启动集群

您可以在已运行的容器中启动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

要将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

通过重用Docker守护程序来使用本地映像

在Kubernetes上使用单个VM时,复用Minikube的内置Docker守护程序很有用。重用内置守护程序意味着您不必在主机上构建Docker注册表并将镜像推送到其中。这样,就可以在与Minikube相同的Docker守护进程中进行构建,从而更方便的在本地测试了。

确保使用tag标记新的Docker镜像,然后使用该标记pull镜像。因为:latest'是默认值,并且对应的默认镜像pull策略始终为'Always',所以如果默认Docker registry中没有Docker镜像(通常是DockerHub),则会导致镜像拉取错误(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的环境:

< 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组件配置的文档,可以找到有效的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

请参照 upgrade minikube

与你的集群交互

Kubectl

minikube start命令可创建了一个名为"minikube"的kubectl context

该上下文包含与Minikube集群进行通信的配置。

Minikube会自动将此上下文设置为默认,但是如果将来需要切换回默认上下文,请运行:

kubectl config use-context minikube,

或者在每个命令上传递上下文:kubectl get pods --context=minikube

Dashboard

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

minikube dashboard

Services

To access a Service exposed via a node port, run this command in a shell after starting Minikube to get the address:
要访问node port暴露的服务,请在启动Minikube获取地址之后在Shell中运行以下命令:

minikube service [-n NAMESPACE] [--url] NAME

网络

Minikube VM通过主机的IP地址向主机系统公开服务,可以使用minikube ip命令获得该IP地址。可以通过NodePort上的该IP地址访问NodePort类型的任何服务。

如果需要确认你的NodePort服务,可以使用:

kubectl get service $SERVICE --output='jsonpath="{.spec.ports[0].nodePort}"'

持久卷(Persistent Volumes)

Minikube支持hostPath类型的PersistentVolumes 。这些PersistentVolumes映射到Minikube VM内的目录。

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

  • /data
  • /var/lib/minikube
  • /var/lib/docker

这是一个PersistentVolume配置示例,用于将数据持久保存在/data目录中:

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

挂载的主机文件夹(Mounted Host Folders)

某些驱动程序会在VM内安装主机文件夹,以便您可以很简单地在VM与主机之间共享文件。这些目前无法配置,并且对于您使用的驱动程序和OS有所不同。

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

私有容器仓库(Private Container Registries)

要访问私有容器仓库,请按照[本页](https://kubernetes.io/docs/concepts/containers/images/)上的步骤进行操作。

我们建议您使用ImagePullSecrets,但是如果您想在Minikube VM上配置访问权限,则可以将.dockercfg放在/home/docker目录中,或者将config.json放在/home/docker/.docker目录。

附加组件(add-ons)

为了使Minikube正确启动或重新启动自定义插件,请将希望与Minikube一起启动的插件放在~/.minikube/addons目录中。每次启动或重新启动Minikube时,此文件夹中的附件都将移至Minikube VM并启动。

将Minikube与HTTP代理一起使用

Minikube创建一个包含Kubernetes和Docker守护程序的虚拟机。当Kubernetes尝试使用Docker调度容器时,Docker守护程序可能需要外部网络访问才能拉取容器。

如果您使用HTTP代理,则可能需要向Docker提供代理设置。因此,在minikube启动期间将所需的环境变量作为标志传递。

例如:

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)

已知的问题(Known Issues)

需要多个节点的功能无法在Minikube中使用。

设计

Minikube使用libmachine 供应的虚拟机,并使用kubeadm提供的Kubernetes集群。

有关Minikube的更多信息,请参阅建议

附加链接

  • Goals and Non-Goals: For the goals and non-goals of the Minikube project, please see our roadmap.
  • Development Guide: See CONTRIBUTING.md for an overview of how to send pull requests.
  • Building Minikube: For instructions on how to build/test Minikube from source, see the build guide.
  • Adding a New Dependency: For instructions on how to add a new dependency to Minikube, see the adding dependencies guide.
  • Adding a New Addon: For instructions on how to add a new addon for Minikube, see the adding an addon guide.
  • MicroK8s: Linux users wishing to avoid running a virtual machine may consider MicroK8s as an alternative.

社区

Contributions, questions, and comments are all welcomed and encouraged! Minikube developers hang out on Slack in the #minikube channel (get an invitation here). We also have the kubernetes-dev Google Groups mailing list. If you are posting to the list please prefix your subject with "minikube: ".



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: Kubernetes小结
下一条: 安装Minikube