你好 Minikube
本教程演示如何使用 minikube 在 Kubernetes 上运行示例应用程序。本教程提供了一个使用 NGINX 回显所有请求的容器镜像。
目标
- 将示例应用程序部署到 minikube。
- 运行该应用程序。
- 查看应用程序日志。
开始之前
本教程假设你已经设置了 minikube
。有关安装说明,请参见 minikube start 中的 步骤 1。
注意
仅执行 步骤 1,安装 中的说明。其余内容将在本页介绍。你还需要安装 kubectl
。有关安装说明,请参见安装工具。
创建一个 minikube 集群
minikube start
打开仪表板
打开 Kubernetes 仪表板。你可以通过两种不同的方式执行此操作
打开一个新的终端,然后运行
# Start a new terminal, and leave this running.
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。
打开一个新的终端,然后运行
# Start a new terminal, and leave this running.
minikube dashboard --url
现在,你可以使用此 URL 并切换回运行 minikube start
的终端。
创建一个 Deployment
Kubernetes Pod 是一组或多组容器,它们为了管理和网络连接的目的绑定在一起。本教程中的 Pod 只有一个容器。 Kubernetes Deployment 检查你的 Pod 的运行状况,并在 Pod 的容器终止时重新启动它。建议使用 Deployment 来管理 Pod 的创建和扩缩。
使用
kubectl create
命令创建一个管理 Pod 的 Deployment。 Pod 基于提供的 Docker 镜像运行容器。# Run a test container image that includes a webserver kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /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
创建一个 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 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
在支持负载均衡器的云提供商上,将提供一个外部 IP 地址来访问该 Service。 在 minikube 上,
LoadBalancer
类型通过minikube service
命令使 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 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 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
# Optional
minikube delete
如果你想再次使用 minikube 来了解有关 Kubernetes 的更多信息,则无需将其删除。
结论
本页涵盖了启动并运行 minikube 集群的基本方面。你现在可以部署应用程序了。
下一步是什么
- 关于使用 kubectl 在 Kubernetes 上部署你的第一个应用程序的教程。
- 了解有关 Deployment 对象的更多信息。
- 了解有关 部署应用程序的更多信息。
- 了解有关 Service 对象的更多信息。