Docker入门教程第三部分,部署到Kuberneters。

先决条件

  • 完成第二部分的容器化应用程序。

  • 确保在Docker桌面上启用了Kubernetes:

    • OSX: 单击菜单栏中的Docker图标,并确保有绿灯旁边提示'Kubernetes is Running'
    • Windows: 单击系统任务栏中的Docker图标并导航至Kubernetes,并确保有绿灯旁边提示'Kubernetes is Running'.

    如果Kubernetes没有运行,请按照本教程第1部分中的说明完成设置。

介绍

既然我们已经演示了应用程序的各个组件作为独立容器运行,那么现在该安排它们由Kubernetes这样的编排器来管理了。 Kubernetes提供了许多工具来扩展,联网,保护和维护您的容器化应用程序,这超出了容器本身的能力。

为了验证我们的容器化应用程序是否可以在Kubernetes上正常工作,我们将在开发机器上使用Docker Desktop内置的Kubernetes环境部署我们的应用程序,然后再在生产环境中的完整Kubernetes集群上运行它。 Docker Desktop创建的Kubernetes环境具有完整特性,这意味着它具有您的应用程序将在真实群集上享有的所有Kubernetes功能,可从开发机器上便利地进行访问。

使用Kubernetes YAML描述应用

Kubernetes中的所有容器都按pods进行调度,它是在相同位置的一组容器,可以共享某些资源。此外,在实际的应用程序中,我们几乎从不创建单个pod。 我们的大多数工作负载都按deployments调度,它们是Kubernetes自动维护的可扩展Pod组。 最后,所有Kubernetes对象都可以并且应该在称为Kubernetes YAML文件的清单中进行描述。 这些YAML文件描述了Kubernetes应用程序的所有组件和配置,可用于在任何Kubernetes环境中轻松创建和销毁您的应用程序。

  1. 您已经在本教程的第一部分中编写了一个非常基本的Kubernetes YAML文件。 现在让我们来编写一个稍微复杂一些的脚本,以运行和管理公告栏。 将以下内容放在一个名为bb.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: bb-demo
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          bb: web
      template:
        metadata:
          labels:
            bb: web
        spec:
          containers:
          - name: bb-site
            image: bulletinboard:1.0
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: bb-entrypoint
      namespace: default
    spec:
      type: NodePort
      selector:
        bb: web
      ports:
      - port: 8080
        targetPort: 8080
        nodePort: 30001
    

    在这个Kubernetes YAML文件中,我们有两个对象,由---分隔:

    • 一个Deployment, 描述一组可扩展的相同pod。 在本例中,您只需要一个Pod的副本,并且该Pod(template键描述)仅包含一个容器,基于您在本教程上一步创建的镜像bulletinboard:1.0
    • 一个NodePort 服务,它将流量从主机上的端口30001路由到Pod内部的端口8080,从而使您可以从网络访问到公告板。

    还要注意,虽然Kubernetes YAML乍看起来可能很长很复杂,但几乎总是遵循相同的模式:

    • apiVersion, 指示解析此对象的Kubernetes API
    • kind, 指示是哪种对象
    • metadata, 将名称等内容应用于您的对象
    • spec, 指定对象的所有参数和配置。

部署和检查您的应用程序

  1. 在终端中,导航到创建bb.yaml的位置,然后将应用程序部署到Kubernetes:

    kubectl apply -f bb.yaml
    

    您应该看到如下所示的输出,指示您的Kubernetes对象已成功创建:

    deployment.apps/bb-demo created
    service/bb-entrypoint created
    
  2. 通过列出您的部署,确保一切正常:

    kubectl get deployments
    

    如果一切正常,则您的部署应如下:

    NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    bb-demo   1         1         1            1           48s
    

    这表明您在YAML中要求的所有Pod都已启动并正在运行。 对服务进行相同的检查:

    kubectl get services
    
    NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    bb-entrypoint   NodePort    10.106.145.116   <none>        8080:30001/TCP   53s
    kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          138d
    

    除了默认的kubernetes服务之外,我们还看到bb-entrypoint服务,它接受端口30001/TCP上的流量。

  3. 打开浏览器,访问位于localhost:30001的公告板; 您应该看到您的公告板,就像在本教程的上一步中将其作为独立容器运行时一样。

  4. 完成验证后,请删除您的应用程序:

    kubectl delete -f bb.yaml
    

结论

至此,我们已经成功地使用Docker Desktop将我们的应用程序部署到我们开发机器上功能齐全的Kubernetes环境中。 我们只使用了Kubernetes的很少一部分功能,但是现在已经打开了大门:您可以在自己的机器上开始向应用程序添加其他组件,并利用Kubernetes的所有功能和能力。

我们不公把应用程序部署到了Kubernetes,我们还将应用程序描述为Kubernetes YAML文件。 这个简单的文本文件包含了创建应用程序并运行它所需的一切; 我们可以将它签入版本控制与同事共享,允许我们轻松地将应用程序分发到其他集群(例如可能在我们开发环境之后的测试和生产集群)。

Kubernetes参考

有关本文中使用的所有新Kubernetes对象的更多文档,请参见: