15 KiB
| title | content_template | weight | menu | card | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 你好 Minikube | templates/tutorial | 5 |
|
|
{{% 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 集群
-
点击 启动终端 {{< kat-button >}}
{{< note >}}如果您本地安装了 Minikube, 运行
minikube start.{{< /note >}} -
在浏览器中打开 Kubernetes dashboard:
minikube dashboard -
仅限 Katacoda 环境:在终端窗口的顶部,单击加号,然后单击 选择要在主机 1 上查看的端口。
-
仅限 Katacoda 环境:输入“30000”,然后单击 显示端口。
创建 Deployment
Kubernetes Pod 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。Deployment 是管理 Pod 创建和扩展的推荐方法。
-
使用
kubectl create命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行 Container。kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node -
查看 Deployment:
kubectl get deployments输出:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-node 1 1 1 1 1m -
查看 Pod:
kubectl get pods输出:
NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m -
查看集群事件:
kubectl get events -
查看
kubectl配置:kubectl config view{{< note >}}有关 kubectl 命令的更多信息,请参阅 kubectl 概述。{{< /note >}}
创建 Service
默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。要使得 hello-node 容器可以从 Kubernetes 虚拟网络的外部访问,您必须将 Pod 暴露为 Kubernetes Service。
-
使用
kubectl expose命令将 Pod 暴露给公网:kubectl expose deployment hello-node --type=LoadBalancer --port=8080The
--type=LoadBalancerflag indicates that you want to expose your Service outside of the cluster. -
查看您刚刚创建的服务:
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访问。 -
运行下面的命令:
minikube service hello-node -
仅限 Katacoda 环境:单击加号,然后单击 选择要在主机 1 上查看的端口。
-
仅限 Katacoda 环境:输入
30369(请参阅服务输出中与8080相对的端口),然后单击这将打开一个浏览器窗口,为您的应用程序提供服务并显示 “Hello World” 消息。
启用插件
Minikube 有一组内置的插件,可以在本地 Kubernetes 环境中启用、禁用和打开。
-
列出当前支持的插件:
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 -
启用插件,例如
heapster:minikube addons enable heapster输出:
heapster was successfully enabled -
查看刚才创建的 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 -
禁用
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 %}}
- 进一步了解 Deployment 对象。
- 学习更多关于 部署应用。
- 学习更多关于 Service 对象。
{{% /capture %}}