你好,Minikube

本教程向你展示如何使用 Minikube 在 Kubernetes 上运行一个应用示例。 教程提供了容器镜像,使用 NGINX 来对所有请求做出回应。

教程目标

  • 将一个示例应用部署到 Minikube。
  • 运行应用程序。
  • 查看应用日志。

准备开始

本教程假设你已经安装了 minikube。 有关安装说明,请参阅 minikube start步骤 1

说明:

仅执行步骤 1:安装中的说明,其余内容均包含在本页中。

你还需要安装 kubectl。 有关安装说明,请参阅安装工具

创建 Minikube 集群

  1. minikube start

打开仪表板

打开 Kubernetes 仪表板。你可以通过两种不同的方式执行此操作:

打开一个新的终端,然后运行:

  1. # 启动一个新的终端,并保持此命令运行。
  2. minikube dashboard

现在,切换回运行 minikube start 的终端。

说明:

dashboard 命令启用仪表板插件,并在默认的 Web 浏览器中打开代理。 你可以在仪表板上创建 Kubernetes 资源,例如 Deployment 和 Service。

要了解如何避免从终端直接调用浏览器并获取 Web 仪表板的 URL,请参阅 “URL 复制和粘贴”选项卡。

默认情况下,仪表板只能从内部 Kubernetes 虚拟网络中访问。 dashboard 命令创建一个临时代理,使仪表板可以从 Kubernetes 虚拟网络外部访问。

要停止代理,请运行 Ctrl+C 退出该进程。仪表板仍在运行中。 命令退出后,仪表板仍然在 Kubernetes 集群中运行。 你可以再次运行 dashboard 命令创建另一个代理来访问仪表板。

如果你不想 Minikube 为你打开 Web 浏览器,可以使用 --url 标志运行 dashboard 子命令。 minikube 会输出一个 URL,你可以在你喜欢的浏览器中打开该 URL。

打开一个新的终端,然后运行:

  1. # 启动一个新的终端,并保持此命令运行。
  2. minikube dashboard --url

现在,你可以使用此 URL 并切换回运行 minikube start 的终端。

创建 Deployment

Kubernetes Pod 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。 Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。 Deployment 是管理 Pod 创建和扩展的推荐方法。

  1. 使用 kubectl create 命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行容器。

    1. # 运行包含 Web 服务器的测试容器镜像
    2. kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
  2. 查看 Deployment:

    1. kubectl get deployments

    输出结果类似于这样:

    1. NAME READY UP-TO-DATE AVAILABLE AGE
    2. hello-node 1/1 1 1 1m
  3. 查看 Pod:

    1. kubectl get pods

    输出结果类似于这样:

    1. NAME READY STATUS RESTARTS AGE
    2. hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
  4. 查看集群事件:

    1. kubectl get events
  5. 查看 kubectl 配置:

    1. kubectl config view
  6. 查看 Pod 中容器的应用程序日志。

    1. kubectl logs hello-node-5f76cf6ccf-br9b5

    输出类似于:

    1. I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080
    2. I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081

说明:

有关 kubectl 命令的更多信息,请参阅 kubectl 概述

创建 Service

默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。 要使得 hello-node 容器可以从 Kubernetes 虚拟网络的外部访问,你必须将 Pod 暴露为 Kubernetes Service

  1. 使用 kubectl expose 命令将 Pod 暴露给公网:

    1. kubectl expose deployment hello-node --type=LoadBalancer --port=8080

    这里的 --type=LoadBalancer 参数表明你希望将你的 Service 暴露到集群外部。

    测试镜像中的应用程序代码仅监听 TCP 8080 端口。 如果你用 kubectl expose 暴露了其它的端口,客户端将不能访问其它端口。

  2. 查看你创建的 Service:

    1. kubectl get services

    输出结果类似于这样:

    1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    2. hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
    3. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m

    对于支持负载均衡器的云服务平台而言,平台将提供一个外部 IP 来访问该服务。 在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问。

  3. 运行下面的命令:

    1. minikube service hello-node

    这将打开一个浏览器窗口,为你的应用程序提供服务并显示应用的响应。

启用插件

Minikube 有一组内置的插件, 可以在本地 Kubernetes 环境中启用、禁用和打开。

  1. 列出当前支持的插件:

    1. minikube addons list

    输出结果类似于这样:

    1. addon-manager: enabled
    2. dashboard: enabled
    3. default-storageclass: enabled
    4. efk: disabled
    5. freshpod: disabled
    6. gvisor: disabled
    7. helm-tiller: disabled
    8. ingress: disabled
    9. ingress-dns: disabled
    10. logviewer: disabled
    11. metrics-server: disabled
    12. nvidia-driver-installer: disabled
    13. nvidia-gpu-device-plugin: disabled
    14. registry: disabled
    15. registry-creds: disabled
    16. storage-provisioner: enabled
    17. storage-provisioner-gluster: disabled
  2. 启用插件,例如 metrics-server

    1. minikube addons enable metrics-server

    输出结果类似于这样:

    1. The 'metrics-server' addon is enabled
  3. 查看通过安装该插件所创建的 Pod 和 Service:

    1. kubectl get pod,svc -n kube-system

    输出结果类似于这样:

    1. NAME READY STATUS RESTARTS AGE
    2. pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m
    3. pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m
    4. pod/metrics-server-67fb648c5 1/1 Running 0 26s
    5. pod/etcd-minikube 1/1 Running 0 34m
    6. pod/influxdb-grafana-b29w8 2/2 Running 0 26s
    7. pod/kube-addon-manager-minikube 1/1 Running 0 34m
    8. pod/kube-apiserver-minikube 1/1 Running 0 34m
    9. pod/kube-controller-manager-minikube 1/1 Running 0 34m
    10. pod/kube-proxy-rnlps 1/1 Running 0 34m
    11. pod/kube-scheduler-minikube 1/1 Running 0 34m
    12. pod/storage-provisioner 1/1 Running 0 34m
    13. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    14. service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s
    15. service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m
    16. service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s
    17. service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
  4. 检查 metrics-server 的输出:

    1. kubectl top pods

    输出类似于:

    1. NAME CPU(cores) MEMORY(bytes)
    2. hello-node-ccf4b9788-4jn97 1m 6Mi

    如果你看到以下消息,请等待并重试:

    1. error: Metrics API not available
  5. 禁用 metrics-server

    1. minikube addons disable metrics-server

    输出结果类似于这样:

    1. metrics-server was successfully disabled

清理

现在可以清理你在集群中创建的资源:

  1. kubectl delete service hello-node
  2. kubectl delete deployment hello-node

停止 Minikube 集群:

  1. minikube stop

可选地,删除 Minikube 虚拟机(VM):

  1. # 可选的
  2. minikube delete

如果你还想使用 Minikube 进一步学习 Kubernetes,那就不需要删除 Minikube。

结论

本页介绍了启动和运行 minikube 集群的基本知识,现在部署应用的准备工作已经完成。

接下来