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 资源,例如部署和服务。
要了解如何避免直接从终端调用浏览器并获取 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
的终端。
创建部署
Kubernetes Pod 是一组一个或多个容器,为了管理和网络目的而捆绑在一起。本教程中的 Pod 只有一个容器。Kubernetes Deployment 检查 Pod 的运行状况,并在 Pod 的容器终止时重新启动它。部署是管理 Pod 创建和扩展的推荐方法。
使用
kubectl create
命令创建管理 Pod 的部署。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
查看部署
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
创建服务
默认情况下,Pod 仅可通过其在 Kubernetes 集群内的内部 IP 地址访问。要使 hello-node
容器可从 Kubernetes 虚拟网络外部访问,您必须将 Pod 作为 Kubernetes 服务 公开。
警告
agnhost 容器具有/shell
端点,这对于调试很有用,但暴露给公共互联网很危险。不要在面向互联网的集群或生产集群上运行此操作。使用
kubectl expose
命令将 Pod 公开到公共互联网kubectl expose deployment hello-node --type=LoadBalancer --port=8080
--type=LoadBalancer
标志表示您希望将服务公开到集群外部。测试镜像内的应用程序代码仅监听 TCP 端口 8080。如果您使用
kubectl expose
公开了不同的端口,客户端将无法连接到该其他端口。查看您创建的服务
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 地址来访问服务。在 minikube 上,
LoadBalancer
类型使服务可以通过minikube service
命令访问。运行以下命令
minikube service hello-node
这将打开一个 Web 浏览器窗口,该窗口提供您的应用程序并显示应用程序的响应。
启用附加组件
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 和服务
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 对象。