部署到 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。相反,您的大部分工作负载都作为部署进行调度,部署是可扩展的 pod 组,由 Kubernetes 自动维护。最后,所有 Kubernetes 对象都可以并且应该在称为 Kubernetes YAML 文件的清单中描述。这些 YAML 文件描述了 Kubernetes 应用的所有组件和配置,并可用于在任何 Kubernetes 环境中创建和销毁您的应用。
您已在本教程的编排概述部分编写了一个基本的 Kubernetes YAML 文件。现在,您可以编写一个稍微复杂一些的 YAML 文件来运行和管理您的 Todo 应用,即在快速入门教程的第 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 端口,从而允许您从网络访问您的 Todo 应用。
此外,请注意,虽然 Kubernetes YAML 最初可能看起来冗长而复杂,但它几乎总是遵循相同的模式
apiVersion,指示解析此对象的 Kubernetes APIkind,指明这是哪种类型的对象- 一些
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上的 Todo 应用。您应该会看到您的 Todo 应用程序,与您在教程第 2 部分中将其作为独立容器运行时看到的一样。一旦满意,请拆除您的应用程序
$ kubectl delete -f bb.yaml
结论
至此,您已成功使用 Docker Desktop 将您的应用程序部署到开发机上功能齐全的 Kubernetes 环境中。现在,您可以在自己的机器上为您的应用添加其他组件,并利用 Kubernetes 的所有功能和强大能力。
除了部署到 Kubernetes,您还已将您的应用程序描述为一个 Kubernetes YAML 文件。这个简单的文本文件包含了创建应用程序并使其处于运行状态所需的一切。您可以将其检入版本控制并与同事共享。这使您可以将应用程序分发到其他集群(例如,通常在开发环境之后的测试和生产集群)。
Kubernetes 参考资料
本文中使用的所有新 Kubernetes 对象的进一步文档可在此处找到