Minikube 入门
本教程向你展示如何使用 minikube 在 Kubernetes 上运行一个示例应用。本教程提供一个容器镜像,该镜像使用 NGINX 回显所有请求。
目标
- 将示例应用部署到 minikube。
- 运行应用。
- 查看应用日志。
开始之前
本教程假定你已经安装并设置好 minikube
。有关安装说明,请参见 minikube start 文档中的步骤 1。
说明
仅执行步骤 1:安装中的说明。其余部分在本页介绍。你还需要安装 kubectl
。有关安装说明,请参见安装工具。
创建 minikube 集群
minikube start
打开控制面板 (Dashboard)
打开 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,你可以在首选的浏览器中打开该 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
类型使 Service 可以通过minikube service
命令访问。运行以下命令
minikube service hello-node
这将打开一个浏览器窗口,展示你的应用并显示应用的响应。
启用插件 (addons)
minikube 工具包含一组内置的插件 (addons),可以在本地 Kubernetes 环境中启用、禁用和打开这些插件。
列出当前支持的插件 (addons)
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 对象的信息。