website/content/zh/docs/tutorials/hello-minikube.md

15 KiB
Raw Blame History

title content_template weight menu card
你好 Minikube templates/tutorial 5
main
title weight post
Get Started 10 <p>Ready to get your hands dirty? Build a simple Kubernetes cluster that runs "Hello World" for Node.js.</p>
name weight
tutorials 10

{{% capture overview %}}

本教程向您展示如何使用 Minikube 和 Katacoda 在 Kubernetes 上运行一个简单的 “Hello World” Node.js 应用程序。Katacoda 提供免费的浏览器内 Kubernetes 环境。

{{< note >}}

如果您已在本地安装 Minikube,也可以按照本教程操作。

{{< /note >}}

{{% /capture %}}

{{% capture objectives %}}

  • 将 "Hello World" 应用程序部署到 Minikube。
  • 运行应用程序。
  • 查看应用日志

{{% /capture %}}

{{% capture prerequisites %}}

本教程提供了从以下文件构建的容器镜像:

{{< codenew language="js" file="minikube/server.js" >}}

{{< codenew language="conf" file="minikube/Dockerfile" >}}

有关 docker build 命令的更多信息,请参阅 Docker 文档

{{% /capture %}}

{{% capture lessoncontent %}}

创建 Minikube 集群

  1. 点击 启动终端 {{< kat-button >}}

    {{< note >}}如果您本地安装了 Minikube, 运行 minikube start.{{< /note >}}

  2. 在浏览器中打开 Kubernetes dashboard

    minikube dashboard
    
  3. 仅限 Katacoda 环境:在终端窗口的顶部,单击加号,然后单击 选择要在主机 1 上查看的端口

  4. 仅限 Katacoda 环境输入“30000”然后单击 显示端口

创建 Deployment

Kubernetes Pod 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。Deployment 是管理 Pod 创建和扩展的推荐方法。

  1. 使用 kubectl create 命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行 Container。

    kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
    
  2. 查看 Deployment

    kubectl get deployments
    

    输出:

    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    hello-node   1         1         1            1           1m
    
  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
    

    {{< note >}}有关 kubectl 命令的更多信息,请参阅 kubectl 概述。{{< /note >}}

创建 Service

默认情况下Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。要使得 hello-node 容器可以从 Kubernetes 虚拟网络的外部访问,您必须将 Pod 暴露为 Kubernetes Service

  1. 使用 kubectl expose 命令将 Pod 暴露给公网:

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

    The --type=LoadBalancer flag indicates that you want to expose your Service outside of the cluster.

  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
    
  4. 仅限 Katacoda 环境:单击加号,然后单击 选择要在主机 1 上查看的端口

  5. 仅限 Katacoda 环境:输入 30369(请参阅服务输出中与 8080 相对的端口),然后单击

    这将打开一个浏览器窗口,为您的应用程序提供服务并显示 “Hello World” 消息。

启用插件

Minikube 有一组内置的插件,可以在本地 Kubernetes 环境中启用、禁用和打开。

  1. 列出当前支持的插件:

    minikube addons list
    

    输出:

    addon-manager: enabled
    coredns: disabled
    dashboard: enabled
    default-storageclass: enabled
    efk: disabled
    freshpod: disabled
    heapster: disabled
    ingress: disabled
    kube-dns: enabled
    metrics-server: disabled
    nvidia-driver-installer: disabled
    nvidia-gpu-device-plugin: disabled
    registry: disabled
    registry-creds: disabled
    storage-provisioner: enabled
    
  2. 启用插件,例如 heapster

    minikube addons enable heapster
    

    输出:

    heapster was successfully enabled
    
  3. 查看刚才创建的 Pod 和 Service

    kubectl get pod,svc -n kube-system
    

    输出:

    NAME                                        READY     STATUS    RESTARTS   AGE
    pod/heapster-9jttx                          1/1       Running   0          26s
    pod/influxdb-grafana-b29w8                  2/2       Running   0          26s
    pod/kube-addon-manager-minikube             1/1       Running   0          34m
    pod/kube-dns-6dcb57bcc8-gv7mw               3/3       Running   0          34m
    pod/kubernetes-dashboard-5498ccf677-cgspw   1/1       Running   0          34m
    pod/storage-provisioner                     1/1       Running   0          34m
    
    NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
    service/heapster               ClusterIP   10.96.241.45    <none>        80/TCP              26s
    service/kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP       34m
    service/kubernetes-dashboard   NodePort    10.109.29.1     <none>        80:30000/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. 禁用 heapster

    minikube addons disable heapster
    

    输出:

    heapster was successfully disabled
    

清理

现在可以清理您在集群中创建的资源:

kubectl delete service hello-node
kubectl delete deployment hello-node

可以停止 Minikube VM

minikube stop

或者,删除 Minikube VM

minikube delete

{{% /capture %}}

{{% capture whatsnext %}}

{{% /capture %}}