部署到Kubernetes

预计阅读时间:5分钟

先决条件

  • 按照方向和设置中的说明下载并安装Docker Desktop 。
  • 第2部分中通过容器化应用程序进行工作。
  • 确保在Docker桌面上启用了Kubernetes:
    • Mac:单击菜单栏中的Docker图标,导航至“首选项”,并确保“ Kubernetes”旁边有绿灯。
    • Windows:单击系统任务栏中的Docker图标,然后导航到“设置”,并确保“ Kubernetes”旁边有绿灯。

    如果Kubernetes没有运行,请按照本教程的编排中的说明完成设置。

介绍

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

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

使用Kubernetes YAML描述应用

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

  1. 您已经在本教程的业务流程概述部分中编写了一个非常基本的Kubernetes YAML文件。现在,让我们编写一个稍微复杂一些的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文件中,我们有两个对象,以分隔---

    • A Deployment,描述一组可扩展的相同Pod。在这种情况下,您将仅获得replicapod的一个或副本,并且该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;网址为:您应该看到您的公告板,就像我们在《快速入门》教程的第2部分中将其作为独立容器运行时一样。

  4. 一旦满意,请拆除您的应用程序:

    kubectl delete -f bb.yaml
    

结论

至此,我们已经成功地使用Docker Desktop将我们的应用程序部署到开发机器上的功能齐全的Kubernetes环境中。我们对Kubernetes的工作还不多,但现在已经敞开了大门。您可以在自己的机器上开始向应用程序添加其他组件,并利用Kubernetes的所有功能和强大功能。

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

Kubernetes参考

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

kubernetespods部署kubernetes服务