你好 Minikube

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

注意:

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

教程目标

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

准备开始

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

minikube/server.js你好 Minikube - 图1
  1. var http = require('http');var handleRequest = function(request, response) { console.log('Received request for URL: ' + request.url); response.writeHead(200); response.end('Hello World!');};var www = http.createServer(handleRequest);www.listen(8080);
minikube/Dockerfile你好 Minikube - 图2
  1. FROM node:6.14.2EXPOSE 8080COPY server.js .CMD node server.js

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

创建 Minikube 集群

  • 点击 启动终端
注意: 如果您本地安装了 Minikube, 运行 minikube start.
  • 在浏览器中打开 Kubernetes dashboard:
  1. minikube dashboard
  • 仅限 Katacoda 环境:在终端窗口的顶部,单击加号,然后单击 选择要在主机 1 上查看的端口

  • 仅限 Katacoda 环境:输入“30000”,然后单击 显示端口

创建 Deployment

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

  • 使用 kubectl create 命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行 Container。
  1. kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
  • 查看 Deployment:
  1. kubectl get deployments

输出:

  1. NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  2. hello-node 1 1 1 1 1m
  • 查看 Pod:
  1. kubectl get pods

输出:

  1. NAME READY STATUS RESTARTS AGE
  2. hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
  • 查看集群事件:
  1. kubectl get events
  • 查看 kubectl 配置:
  1. kubectl config view
注意: 有关 kubectl 命令的更多信息,请参阅 kubectl 概述

创建 Service

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

  • 使用 kubectl expose 命令将 Pod 暴露给公网:
  1. kubectl expose deployment hello-node --type=LoadBalancer --port=8080

The —type=LoadBalancer flag indicates that you want to expose your Serviceoutside of the cluster.

  • 查看您刚刚创建的服务:
  1. kubectl get services

输出:

  1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  2. hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
  3. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m

在支持负载均衡器的云服务提供商上,将提供一个外部 IP 来访问该服务。在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问。

  • 运行下面的命令:
  1. minikube service hello-node
  • 仅限 Katacoda 环境:单击加号,然后单击 选择要在主机 1 上查看的端口

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

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

启用插件

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

  • 列出当前支持的插件:
  1. minikube addons list

输出:

  1. addon-manager: enabled
  2. coredns: disabled
  3. dashboard: enabled
  4. default-storageclass: enabled
  5. efk: disabled
  6. freshpod: disabled
  7. heapster: disabled
  8. ingress: disabled
  9. kube-dns: enabled
  10. metrics-server: disabled
  11. nvidia-driver-installer: disabled
  12. nvidia-gpu-device-plugin: disabled
  13. registry: disabled
  14. registry-creds: disabled
  15. storage-provisioner: enabled
  • 启用插件,例如 heapster
  1. minikube addons enable heapster

输出:

  1. heapster was successfully enabled
  • 查看刚才创建的 Pod 和 Service:
  1. kubectl get pod,svc -n kube-system

输出:

  1. NAME READY STATUS RESTARTS AGE
  2. pod/heapster-9jttx 1/1 Running 0 26s
  3. pod/influxdb-grafana-b29w8 2/2 Running 0 26s
  4. pod/kube-addon-manager-minikube 1/1 Running 0 34m
  5. pod/kube-dns-6dcb57bcc8-gv7mw 3/3 Running 0 34m
  6. pod/kubernetes-dashboard-5498ccf677-cgspw 1/1 Running 0 34m
  7. pod/storage-provisioner 1/1 Running 0 34m
  8. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  9. service/heapster ClusterIP 10.96.241.45 <none> 80/TCP 26s
  10. service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m
  11. service/kubernetes-dashboard NodePort 10.109.29.1 <none> 80:30000/TCP 34m
  12. service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s
  13. service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
  • 禁用 heapster
  1. minikube addons disable heapster

输出:

  1. heapster was successfully disabled

清理

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

  1. kubectl delete service hello-node
  2. kubectl delete deployment hello-node

可以停止 Minikube VM:

  1. minikube stop

或者,删除 Minikube VM:

  1. minikube delete

接下来