你好,Minikube

你好,Minikube本教程向你展示如何使用 Minikube 在 Kubernetes 上运行一个应用示例。

教程提供了容器镜像,使用 NGINX 来对所有请求做出回应。

教程目标将一个示例应用部署到 Minikube。运行应用程序。查看应用日志。准备开始本教程假设你已经安装了 minikube。

有关安装说明,请参阅 minikube start 的步骤 1。

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

你还需要安装 kubectl。

有关安装说明,请参阅安装工具。

创建 Minikube 集群minikube start

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

启动浏览器URL 复制粘贴

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

# 启动一个新的终端,并保持此命令运行。

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。

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

# 启动一个新的终端,并保持此命令运行。

minikube dashboard --url

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

创建 DeploymentKubernetes Pod

是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。

Kubernetes Deployment

检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。

Deployment 是管理 Pod 创建和扩展的推荐方法。

使用 kubectl create 命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker

镜像运行容器。

# 运行包含 Web 服务器的测试容器镜像

kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.53 -- /agnhost netexec --http-port=8080

查看 Deployment:

kubectl get deployments

输出结果类似于这样:

NAME READY UP-TO-DATE AVAILABLE AGE

hello-node 1/1 1 1 1m

(该 Pod 可能需要一些时间才能变得可用。如果你在输出结果中看到 “0/1”,请在几秒钟后重试。)

查看 Pod:

kubectl get pods

输出结果类似于这样:

NAME READY STATUS RESTARTS AGE

hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m

查看集群事件:

kubectl get events

查看 kubectl 配置:

kubectl config view

查看 Pod 中容器的应用程序日志(将 Pod 名称替换为你用 kubectl get pods 命令获得的名称)。

说明:将 kubectl logs 命令中的 hello-node-5f76cf6ccf-br9b5 替换为 kubectl get pods 命令输出中的 Pod 名称。

kubectl logs hello-node-5f76cf6ccf-br9b5

输出类似于:

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

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 公开出来。

警告:agnhost 容器有一个 /shell 端点,对于调试很有帮助,但暴露给公共互联网很危险。

请勿在面向互联网的集群或生产集群上运行它。

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

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

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

测试镜像中的应用程序代码仅监听 TCP 8080 端口。

如果你用 kubectl expose 暴露了其它的端口,客户端将不能访问其它端口。

查看你创建的 Service:

kubectl get services

输出结果类似于这样:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

hello-node LoadBalancer 10.108.144.78 8080:30369/TCP 21s

kubernetes ClusterIP 10.96.0.1 443/TCP 23m

对于支持负载均衡器的云服务平台而言,平台将提供一个外部 IP 来访问该服务。

在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问。

运行下面的命令:

minikube service hello-node

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

启用插件Minikube 有一组内置的插件,

可以在本地 Kubernetes 环境中启用、禁用和打开。

列出当前支持的插件:

minikube addons list

输出结果类似于这样:

addon-manager: enabled

dashboard: enabled

default-storageclass: enabled

efk: disabled

freshpod: disabled

gvisor: disabled

helm-tiller: disabled

ingress: disabled

ingress-dns: disabled

logviewer: disabled

metrics-server: disabled

nvidia-driver-installer: disabled

nvidia-gpu-device-plugin: disabled

registry: disabled

registry-creds: disabled

storage-provisioner: enabled

storage-provisioner-gluster: disabled

启用插件,例如 metrics-server:

minikube addons enable metrics-server

输出结果类似于这样:

The 'metrics-server' addon is enabled

查看通过安装该插件所创建的 Pod 和 Service:

kubectl get pod,svc -n kube-system

输出结果类似于这样:

NAME READY STATUS RESTARTS AGE

pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m

pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m

pod/metrics-server-67fb648c5 1/1 Running 0 26s

pod/etcd-minikube 1/1 Running 0 34m

pod/influxdb-grafana-b29w8 2/2 Running 0 26s

pod/kube-addon-manager-minikube 1/1 Running 0 34m

pod/kube-apiserver-minikube 1/1 Running 0 34m

pod/kube-controller-manager-minikube 1/1 Running 0 34m

pod/kube-proxy-rnlps 1/1 Running 0 34m

pod/kube-scheduler-minikube 1/1 Running 0 34m

pod/storage-provisioner 1/1 Running 0 34m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

service/metrics-server ClusterIP 10.96.241.45 80/TCP 26s

service/kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP 34m

service/monitoring-grafana NodePort 10.99.24.54 80:30002/TCP 26s

service/monitoring-influxdb ClusterIP 10.111.169.94 8083/TCP,8086/TCP 26s

检查 metrics-server 的输出:

kubectl top pods

输出类似于:

NAME CPU(cores) MEMORY(bytes)

hello-node-ccf4b9788-4jn97 1m 6Mi

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

error: Metrics API not available

禁用 metrics-server:

minikube addons disable metrics-server

输出结果类似于这样:

metrics-server was successfully disabled

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

kubectl delete service hello-node

kubectl delete deployment hello-node

停止 Minikube 集群:

minikube stop

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

# 可选的

minikube delete

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

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

接下来使用 kubectl 在 Kubernetes 上部署你的第一个应用程序教程。进一步了解 Deployment 对象。进一步了解部署应用。进一步了解 Service 对象。