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

13 KiB
Raw Blame History

title content_type weight menu card
你好Minikube tutorial 5
main
title weight post
Get Started 10 <p>准备好动手操作了么?构建一个简单的 Kubernetes 集群来运行示例应用。</p>
name weight
tutorials 10

本教程向你展示如何使用 Minikube 和 Katacoda 在 Kubernetes 上运行一个应用示例。Katacoda 提供免费的浏览器内 Kubernetes 环境。

{{< note >}} 如果你已在本地安装 Minikube也可以按照本教程操作。 安装指南参阅 minikube start 。 {{< /note >}}

{{% heading "objectives" %}}

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

{{% heading "prerequisites" %}}

本教程提供了容器镜像,使用 NGINX 来对所有请求做出回应:

创建 Minikube 集群

  1. 点击 启动终端

    {{< kat-button >}}

    {{< note >}} 如果你在本地安装了 Minikube运行 minikube start。 {{< /note >}}

  1. 在浏览器中打开 Kubernetes 仪表板Dashboard

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

  2. 仅限 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=k8s.gcr.io/echoserver:1.4
    
  1. 查看 Deployment

    kubectl get deployments
    

    输出结果类似于这样:

    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    hello-node   1/1     1            1           1m
    
  1. 查看 Pod

    kubectl get pods
    

    输出结果类似于这样:

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

    kubectl get events
    
  1. 查看 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
    

    这里的 --type=LoadBalancer 参数表明你希望将你的 Service 暴露到集群外部。

    镜像 k8s.gcr.io/echoserver 中的应用程序代码仅监听 TCP 8080 端口。 如果你用 kubectl expose 暴露了其它的端口,客户端将不能访问其它端口。

  1. 查看你刚刚创建的 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 来访问该服务。 在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问。

  1. 运行下面的命令:

    minikube service hello-node
    
  1. 仅限 Katacoda 环境:单击加号,然后单击 选择要在主机 1 上查看的端口
  1. 仅限 Katacoda 环境:请注意在 service 输出中与 8080 对应的长度为 5 位的端口号。 此端口号是随机生成的,可能与你的不同。 在端口号文本框中输入你自己的端口号,然后单击显示端口。 对应于上面的例子,需要输入 30369

    这将打开一个浏览器窗口,为你的应用程序提供服务并显示应用的响应。

启用插件

Minikube 有一组内置的 {{< glossary_tooltip text="插件" term_id="addons" >}} 可以在本地 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
    
  1. 启用插件,例如 metrics-server

    minikube addons enable metrics-server
    

    输出结果类似于这样:

    metrics-server was successfully enabled
    
  1. 查看刚才创建的 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
    
  1. 禁用 metrics-server

    minikube addons disable metrics-server
    

    输出结果类似于这样:

    metrics-server was successfully disabled
    

清理

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

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

可选地,停止 Minikube 虚拟机VM

minikube stop

可选地,删除 Minikube 虚拟机VM

minikube delete

{{% heading "whatsnext" %}}