本教程演示了如何使用 minikube 在 Kubernetes 上运行示例应用程序。教程提供了一个使用 NGINX 来回显所有请求的容器镜像。
本教程假定您已经设置好了 minikube。请参阅 minikube start 中的第 1 步以获取安装说明。
您还需要安装 kubectl。请参阅 安装工具 以获取安装说明。
minikube start
验证 minikube 集群的状态,以确保所有组件都处于运行状态。
minikube status
上述命令的输出应显示所有组件均为 Running 或 Configured,如下面的示例输出所示
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
打开 Kubernetes 仪表盘。您可以通过两种不同的方式执行此操作
打开一个新终端,并运行
# Start a new terminal, and leave this running.
minikube dashboard
现在,切回到您运行 minikube start 的终端。
dashboard 命令会启用仪表盘插件并在默认 Web 浏览器中打开代理。您可以在仪表盘上创建 Deployment 和 Service 等 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 的容器终止时将其重启。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
默认情况下,Pod 只能通过其在 Kubernetes 集群内的内部 IP 地址进行访问。要使 hello-node 容器能够从 Kubernetes 虚拟网络外部访问,必须将该 Pod 暴露为 Kubernetes Service。
/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 虚拟机
# Optional
minikube delete
如果您想再次使用 minikube 来学习更多 Kubernetes 知识,则无需将其删除。
本页涵盖了启动和运行 minikube 集群的基本方面。现在您可以开始部署应用程序了。