Skip to content

部署到 Kubernetes

原文:https://docs.docker.com/get-started/kube-deploy/

先决条件

  • 按照获取 Docker 中的描述下载并安装 Docker Desktop。
  • 完成第二部分中的应用程序容器化。
  • 确保在 Docker Desktop 中启用了 Kubernetes: 如果 Kubernetes 未运行,请按照编排中的指示完成设置。

介绍

既然您已经展示了应用程序的各个组件可以作为独立容器运行,现在是时候让它们被像 Kubernetes 这样的编排器管理了。Kubernetes 提供了许多工具来扩展、网络、保护和维护您的容器化应用程序,远超容器本身的能力。

为了验证您的容器化应用程序在 Kubernetes 上运行良好,您将使用 Docker Desktop 内置的 Kubernetes 环境在开发机器上部署您的应用程序,然后再将其交付到生产中的完整 Kubernetes 集群上运行。Docker Desktop 创建的 Kubernetes 环境是完全功能的,意味着它具有您的应用程序在真实集群上将享受的所有 Kubernetes 功能,可从您的开发机器上方便地访问。

使用 Kubernetes YAML 描述应用程序

Kubernetes 中的所有容器都作为 pods 来调度,这些 pods 是共享一些资源的共位容器组。此外,在现实应用中,您几乎永远不会创建个别 pods。相反,您的大多数工作负载都作为部署来调度,这些部署是由 Kubernetes 自动维护的可扩展的 pods 组。最后,所有 Kubernetes 对象都应该在称为 Kubernetes YAML 文件的清单中进行描述。这些 YAML 文件描述了您的 Kubernetes 应用的所有组件和配置,可以用来在任何 Kubernetes 环境中创建和销毁您的应用。

您已经在本教程的编排概述部分编写了一个基本的 Kubernetes YAML 文件。现在,您可以编写一个稍微复杂一点的 YAML 文件来运行和管理您的 Todo 应用,即在快速入门教程第二部分中创建的 getting-started 容器镜像。将以下内容放在名为 bb.yaml 的文件中:

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: getting-started
          imagePullPolicy: Never
---
apiVersion: v1
kind: Service
metadata:
  name: bb-entrypoint
  namespace: default
spec:
  type: NodePort
  selector:
    bb: web
  ports:
    - port: 3000
      targetPort: 3000
      nodePort: 30001

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

  • 一个 Deployment,描述了一个可扩展的相同 pods 组。在这种情况下,您将获得一个 replica,或您的 pod 的一个副本,该 pod(在 template: 键下描述)中只有一个容器,基于您在本教程前一步骤中的 getting-started 镜像。
  • 一个 NodePort 服务,将从主机上的 30001 端口路由流量到其路由到的 pods 内部的 3000 端口,使您能够通过网络访问您的 Todo 应用。

另外,请注意,虽然 Kubernetes YAML 一开始看起来可能既长又复杂,但它几乎总是遵循相同的模式:

  • apiVersion,指示解析此对象的 Kubernetes API
  • kind 指示这是什么类型的对象
  • 一些 metadata 应用像名称这样的东西到您的对象
  • spec 指定您对象的所有参数和配置。

部署并检查您的应用程序

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

    console
    kubectl apply -f bb.yaml

    您应该看到以下输出,表明您的 Kubernetes 对象已成功创建:

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

    console
    kubectl get deployments

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

    shell
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    bb-demo   1/1     1            1           40s

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

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

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

  3. 打开浏览器并访问 localhost:30001 上的 Todo 应用。您应该看到您的 Todo 应用,与您在教程第二部分中作为独立容器运行时一样。

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

    console
    kubectl delete -f bb.yaml

结论

至此,您已经成功使用 Docker Desktop 将您的应用程序部署到开发机器上的一个完全功能的 Kubernetes 环境中。您现在可以向您的应用添加其他组件,并充分利用 Kubernetes 的所有功能和力量,就在您自己的机器上。

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

Kubernetes 参考资料

本文中使用的所有新 Kubernetes 对象的更多文档可在此处找到: