你好 Minikube
本教程演示如何使用 minikube 在 Kubernetes 上运行示例应用程序。该教程提供了一个使用 NGINX 将所有请求回显的容器镜像。
目标
- 将示例应用程序部署到 minikube。
- 运行该应用程序。
- 查看应用程序日志。
开始之前
本教程假定您已经设置了 minikube。有关安装说明,请参阅 minikube start 中的 步骤 1。
说明
仅执行 步骤 1,安装 中的说明。其余内容在本页涵盖。您还需要安装 kubectl。有关安装说明,请参阅 安装工具。
创建 minikube 集群
minikube start
检查 minikube 集群的状态
验证 minikube 集群的状态,以确保所有组件都处于运行状态。
minikube status
上述命令的输出应显示所有组件正在运行或已配置,如以下示例输出所示
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 命令启用仪表板插件并在默认网络浏览器中打开代理。您可以在仪表板上创建 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获取的名称)。说明
将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-serverminikube 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-serverminikube 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 对象 的更多信息。