Hello Minikube
本教程将向你展示如何使用 minikube 在 Kubernetes 上运行示例应用。本教程提供一个容器镜像,该镜像使用 NGINX 回显所有请求。
目标
- 将示例应用部署到 minikube。
- 运行应用程序。
- 查看应用程序日志。
准备工作
本教程假定你已经设置好 minikube
。有关安装说明,请参阅 minikube 启动中的步骤 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.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
创建 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
类型使 Service 可以通过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 <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 虚拟机
# Optional
minikube delete
如果你想再次使用 minikube 学习更多关于 Kubernetes 的知识,你不需要删除它。
总结
本页涵盖了启动和运行 minikube 集群的基本方面。你现在已准备好部署应用程序。
下一步
- 使用 kubectl 在 Kubernetes 上部署你的第一个应用程序教程。
- 了解更多关于 Deployment 对象 的信息。
- 了解更多关于部署应用程序的信息。
- 了解更多关于Service 对象的信息。