Hello 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 虚拟网络外部访问,您必须将其作为 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 VM
# Optional
minikube delete
如果您想再次使用 minikube 来了解更多关于 Kubernetes 的知识,则无需删除它。
结论
本页介绍了启动和运行 minikube 集群的基本方面。您现在可以部署应用程序了。
下一步
- 教程 使用 kubectl 在 Kubernetes 上部署您的第一个应用程序。
- 详细了解 Deployment 对象。
- 详细了解 部署应用程序。
- 详细了解 Service 对象。