Hello Minikube

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

目标

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

开始之前

本教程假设您已经设置了 minikube。有关安装说明,请参阅 minikube start 中的**步骤 1**。

您还需要安装 kubectl。有关安装说明,请参阅 安装工具

创建 minikube 集群

minikube start

打开仪表盘

打开 Kubernetes 仪表盘。您可以通过两种不同的方式执行此操作

打开一个**新**终端,然后运行

# Start a new terminal, and leave this running.
minikube dashboard

现在,切换回您运行 minikube start 的终端。

如果您不希望 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 创建和扩展的推荐方法。

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

    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
    

    输出类似于

    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 服务 公开。

  1. 使用 kubectl expose 命令将 Pod 公开到公共互联网

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

    --type=LoadBalancer 标志表示您希望将服务公开到集群外部。

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

  2. 查看您创建的服务

    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 命令访问。

  3. 运行以下命令

    minikube service hello-node
    

    这将打开一个 Web 浏览器窗口,该窗口提供您的应用程序并显示应用程序的响应。

启用附加组件

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 和服务

    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 VM

# Optional
minikube delete

如果您想再次使用 minikube 来了解更多关于 Kubernetes 的信息,您无需删除它。

结论

本页介绍了将 minikube 集群启动并运行的基本方面。您现在可以部署应用程序了。

下一步

上次修改于 2024 年 6 月 27 日下午 10:43 PST:更新 content/en/docs/tutorials/hello-minikube.md (a3e1fef3a0)