部署到 Kubernetes
前提条件
- 按照获取 Docker中的说明下载并安装 Docker Desktop。
- 完成第 2 部分中的应用程序容器化。
- 确保在 Docker Desktop 中开启 Kubernetes:如果 Kubernetes 未运行,请按照编排中的说明完成设置。
简介
既然您已经证明了应用程序的各个组件可以作为独立容器运行,那么现在是时候安排由 Kubernetes 等编排器来管理它们了。Kubernetes 提供了许多用于扩展、网络、安全和维护容器化应用程序的工具,这些工具远超容器本身的功能。
为了验证您的容器化应用程序在 Kubernetes 上运行良好,您将在开发机器上使用 Docker Desktop 内置的 Kubernetes 环境部署您的应用程序,然后再将其交给生产环境中的完整 Kubernetes 集群运行。Docker Desktop 创建的 Kubernetes 环境是*功能齐全的*,这意味着它拥有您的应用程序在真实集群中将享有的所有 Kubernetes 功能,并且可以方便地从您的开发机器访问。
使用 Kubernetes YAML 描述应用
Kubernetes 中的所有容器都计划作为 Pod 调度,Pod 是共享某些资源的相互位置的容器组。此外,在实际应用程序中,您几乎从不创建单个 Pod。相反,大多数工作负载都计划作为部署调度,部署是由 Kubernetes 自动维护的可扩展 Pod 组。最后,所有 Kubernetes 对象都可以也应该在称为 Kubernetes YAML 文件的清单中进行描述。这些 YAML 文件描述了 Kubernetes 应用程序的所有组件和配置,可用于在任何 Kubernetes 环境中创建和销毁您的应用程序。
您已在本教程的编排概述部分编写了一个基本的 Kubernetes YAML 文件。现在,您可以编写一个稍微复杂的 YAML 文件来运行和管理您的待办事项应用程序,即在快速入门教程的第 2 部分中创建的容器`getting-started`镜像。将以下内容放在名为`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: 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`,描述了一个可扩展的相同 Pod 组。在这种情况下,您将只获得一个`replica`,或您的 Pod 的副本,并且该 Pod(在`template:`键下描述)中只有一个容器,基于您在本教程前面步骤中使用的`getting-started`镜像。
- 一个`NodePort`服务,它将主机上的 30001 端口的流量路由到它路由到的 Pod 内部的 3000 端口,允许您从网络访问您的待办事项应用程序。
另外,请注意,虽然 Kubernetes YAML 乍一看可能很长很复杂,但它几乎总是遵循相同的模式:
- `apiVersion`,指示解析此对象的 Kubernetes API
- `kind`,指示这是什么类型的对象
- 一些`metadata`,将名称等应用于您的对象
- `spec`,指定对象的全部参数和配置。
部署和检查您的应用程序
在终端中,导航到创建`bb.yaml`的位置,并将您的应用程序部署到 Kubernetes:
$ kubectl apply -f bb.yaml
您应该看到如下所示的输出,指示您的 Kubernetes 对象已成功创建:
deployment.apps/bb-demo created service/bb-entrypoint created
列出您的部署以确保一切正常:
$ kubectl get deployments
如果一切顺利,您的部署应列出如下:
NAME READY UP-TO-DATE AVAILABLE AGE bb-demo 1/1 1 1 40s
这表示您在 YAML 中请求的所有一个 Pod 都已启动并运行。对您的服务进行相同的检查:
$ 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 端口上接收流量。
打开浏览器,访问您在`localhost:30001`上的待办事项应用程序。您应该会看到您的待办事项应用程序,与您在教程的第 2 部分中将其作为独立容器运行时相同。
满意后,拆除您的应用程序:
$ kubectl delete -f bb.yaml
结论
至此,您已成功使用 Docker Desktop 将您的应用程序部署到开发机器上的功能齐全的 Kubernetes 环境。您现在可以向您的应用程序添加其他组件,并在您自己的机器上充分利用 Kubernetes 的所有功能和强大功能。
除了部署到 Kubernetes 之外,您还将应用程序描述为 Kubernetes YAML 文件。这个简单的文本文件包含您在运行状态下创建应用程序所需的一切。您可以将其检入版本控制并与同事共享。这使您可以将应用程序分发到其他集群(例如开发环境之后可能出现的测试和生产集群)。
Kubernetes 参考
本文中使用的所有新 Kubernetes 对象的进一步文档可在此处获得: