你好 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 的终端。

创建一个 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.39 -- /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
    

    输出类似于

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

  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 VM

# Optional
minikube delete

如果你想再次使用 minikube 来了解有关 Kubernetes 的更多信息,则无需将其删除。

结论

本页涵盖了启动并运行 minikube 集群的基本方面。你现在可以部署应用程序了。

下一步是什么

上次修改时间:太平洋标准时间 2024 年 6 月 27 日上午 10:43:更新 content/en/docs/tutorials/hello-minikube.md (a3e1fef3a0)