先决条件
完成第二部分的容器化应用程序。
确保在Docker桌面上启用了Kubernetes:
- OSX: 单击菜单栏中的Docker图标,并确保有绿灯旁边提示'Kubernetes is Running'
- Windows: 单击系统任务栏中的Docker图标并导航至Kubernetes,并确保有绿灯旁边提示'Kubernetes is Running'.
如果Kubernetes没有运行,请按照本教程第1部分中的说明完成设置。
介绍
既然我们已经演示了应用程序的各个组件作为独立容器运行,那么现在该安排它们由Kubernetes这样的编排器来管理了。 Kubernetes提供了许多工具来扩展,联网,保护和维护您的容器化应用程序,这超出了容器本身的能力。
为了验证我们的容器化应用程序是否可以在Kubernetes上正常工作,我们将在开发机器上使用Docker Desktop内置的Kubernetes环境部署我们的应用程序,然后再在生产环境中的完整Kubernetes集群上运行它。 Docker Desktop创建的Kubernetes环境具有完整特性,这意味着它具有您的应用程序将在真实群集上享有的所有Kubernetes功能,可从开发机器上便利地进行访问。
使用Kubernetes YAML描述应用
Kubernetes中的所有容器都按pods进行调度,它是在相同位置的一组容器,可以共享某些资源。此外,在实际的应用程序中,我们几乎从不创建单个pod。 我们的大多数工作负载都按deployments调度,它们是Kubernetes自动维护的可扩展Pod组。 最后,所有Kubernetes对象都可以并且应该在称为Kubernetes YAML文件的清单中进行描述。 这些YAML文件描述了Kubernetes应用程序的所有组件和配置,可用于在任何Kubernetes环境中轻松创建和销毁您的应用程序。
您已经在本教程的第一部分中编写了一个非常基本的Kubernetes 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文件中,我们有两个对象,由
---
分隔:- 一个
Deployment
, 描述一组可扩展的相同pod。 在本例中,您只需要一个Pod的副本,并且该Pod(template键描述)仅包含一个容器,基于您在本教程上一步创建的镜像bulletinboard:1.0
。 - 一个
NodePort
服务,它将流量从主机上的端口30001路由到Pod内部的端口8080,从而使您可以从网络访问到公告板。
还要注意,虽然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 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上的流量。打开浏览器,访问位于
localhost:30001
的公告板; 您应该看到您的公告板,就像在本教程的上一步中将其作为独立容器运行时一样。完成验证后,请删除您的应用程序:
kubectl delete -f bb.yaml
结论
至此,我们已经成功地使用Docker Desktop将我们的应用程序部署到我们开发机器上功能齐全的Kubernetes环境中。 我们只使用了Kubernetes的很少一部分功能,但是现在已经打开了大门:您可以在自己的机器上开始向应用程序添加其他组件,并利用Kubernetes的所有功能和能力。
我们不公把应用程序部署到了Kubernetes,我们还将应用程序描述为Kubernetes YAML文件。 这个简单的文本文件包含了创建应用程序并运行它所需的一切; 我们可以将它签入版本控制与同事共享,允许我们轻松地将应用程序分发到其他集群(例如可能在我们开发环境之后的测试和生产集群)。
Kubernetes参考
有关本文中使用的所有新Kubernetes对象的更多文档,请参见: