你好 Minikube

本教程演示了如何使用 minikube 在 Kubernetes 上运行示例应用程序。教程提供了一个使用 NGINX 来回显所有请求的容器镜像。

目标

  • 将示例应用程序部署到 minikube。
  • 运行应用。
  • 查看应用程序日志。

开始之前

本教程假定您已经设置好了 minikube。请参阅 minikube start 中的第 1 步以获取安装说明。

说明

只需执行第 1 步,安装中的说明。其余内容将在本页中介绍。

您还需要安装 kubectl。请参阅 安装工具 以获取安装说明。

创建 minikube 集群

minikube start

检查 minikube 集群的状态

验证 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 的终端。

创建 Deployment

Kubernetes Pod 是一个或多个容器的组合,它们被捆绑在一起以进行管理和网络通信。本教程中的 Pod 只有一个容器。Kubernetes Deployment 会检查 Pod 的健康状况,并在 Pod 的容器终止时将其重启。Deployment 是管理 Pod 创建和伸缩的推荐方式。

  1. 使用 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
    
  2. 查看 Deployment

    kubectl get deployments
    

    输出类似于

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    hello-node   1/1     1            1           1m
    

    (Pod 可能需要一些时间才能变为可用状态。如果您看到 "0/1",请在几秒钟后再试。)

  3. 查看 Pod

    kubectl get pods
    

    输出类似于

    NAME                          READY     STATUS    RESTARTS   AGE
    hello-node-5f76cf6ccf-br9b5   1/1       Running   0          1m
    
  4. 查看集群事件

    kubectl get events
    
  5. 查看 kubectl 配置

    kubectl config view
    
  6. 查看 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
    

说明

有关 kubectl 命令的更多信息,请参阅 kubectl 概览

创建 Service

默认情况下,Pod 只能通过其在 Kubernetes 集群内的内部 IP 地址进行访问。要使 hello-node 容器能够从 Kubernetes 虚拟网络外部访问,必须将该 Pod 暴露为 Kubernetes Service

警告

agnhost 容器有一个 /shell 端点,这对于调试很有用,但将其暴露在公共互联网上是很危险的。请勿在面向互联网的集群或生产集群上运行此操作。
  1. 使用 kubectl expose 命令将 Pod 暴露给公共互联网

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080
    

    --type=LoadBalancer 标志表示您希望在集群外部暴露您的 Service。

    测试镜像内部的应用程序代码仅监听 TCP 端口 8080。如果您使用 kubectl expose 暴露了不同的端口,客户端将无法连接到该端口。

  2. 查看您创建的 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。

  3. 运行以下命令

    minikube service hello-node
    

    这将打开一个浏览器窗口,显示您的应用并呈现其响应。

启用插件

minikube 工具包含一组内置的 插件,可以在本地 Kubernetes 环境中启用、禁用和打开。

  1. 列出当前支持的插件

    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
    
  2. 启用插件,例如 metrics-server

    minikube addons enable metrics-server
    

    输出类似于

    The 'metrics-server' addon is enabled
    
  3. 通过安装该插件查看您创建的 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
    
  4. 检查 metrics-server 的输出

    kubectl top pods
    

    输出类似于

    NAME                         CPU(cores)   MEMORY(bytes)
    hello-node-ccf4b9788-4jn97   1m           6Mi
    

    如果看到以下消息,请等待片刻再试

    error: Metrics API not available
    
  5. 禁用 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 集群的基本方面。现在您可以开始部署应用程序了。

接下来


最后修改时间:2025 年 11 月 19 日 下午 5:42 (PST):根据审核建议更新文本 (ea2a65c214)