部署到 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
的文件中:
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 APIkind
指示这是什么类型的对象- 一些
metadata
应用像名称这样的东西到您的对象 spec
指定您对象的所有参数和配置。
部署并检查您的应用程序
在终端中,导航到您创建
bb.yaml
的位置,并将您的应用程序部署到 Kubernetes:consolekubectl apply -f bb.yaml
您应该看到以下输出,表明您的 Kubernetes 对象已成功创建:
shelldeployment.apps/bb-demo created service/bb-entrypoint created
通过列出您的部署来确保一切正常:
consolekubectl get deployments
如果一切正常,您的部署应如下列出:
shellNAME READY UP-TO-DATE AVAILABLE AGE bb-demo 1/1 1 1 40s
这表明您在 YAML 中请求的所有 pod 都已启动并运行。对您的服务进行相同的检查:
consolekubectl 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 应用,与您在教程第二部分中作为独立容器运行时一样。一旦满意,拆除您的应用程序:
consolekubectl delete -f bb.yaml
结论
至此,您已经成功使用 Docker Desktop 将您的应用程序部署到开发机器上的一个完全功能的 Kubernetes 环境中。您现在可以向您的应用添加其他组件,并充分利用 Kubernetes 的所有功能和力量,就在您自己的机器上。
除了部署到 Kubernetes 外,您还将您的应用程序描述为一个 Kubernetes YAML 文件。这个简单的文本文件包含了创建您的应用程序运行状态所需的一切。您可以将其检入版本控制并与同事共享。这让您将应用程序分发到其他集群(例如在您的开发环境之后可能会有的测试和生产集群)。
Kubernetes 参考资料
本文中使用的所有新 Kubernetes 对象的更多文档可在此处找到: