部署到Kubernetes
预计阅读时间: 6分钟先决条件
- 在第2部分中完成对应用程序的容器化。
- 确保在Docker桌面上启用了Kubernetes:
- OSX :单击菜单栏中的Docker图标,并确保“ Kubernetes正在运行”旁边有绿灯
- Windows :单击系统任务栏中的Docker图标,然后导航到Kubernetes,并确保“ Kubernetes正在运行”旁边有绿灯。
如果Kubernetes没有运行,请按照本教程第1部分中的说明完成设置。
介绍
现在,我们已经证明了应用程序的各个组件可以作为独立容器运行,现在该安排它们由Kubernetes这样的协调器来管理了。Kubernetes提供了许多工具来扩展,联网,保护和维护您的容器化应用程序,这超出了容器本身的能力。
为了验证我们的容器化应用程序是否可以在Kubernetes上正常工作,我们将在开发机器上使用Docker Desktop内置的Kubernetes环境来部署我们的应用程序,然后再将其移交给生产环境中的完整Kubernetes集群。Docker Desktop创建的Kubernetes环境具有完整的功能 ,这意味着它具有您的应用程序将在真正的集群上享受的所有Kubernetes功能,可通过开发机器的便利性进行访问。
使用Kubernetes YAML描述应用
Kubernetes中的所有容器都计划为pod ,它们是共享一些资源的同一位置的容器的组。此外,在实际的应用程序中,我们几乎从不创建单个吊舱。取而代之的是,我们的大多数工作负载都按部署计划,这些部署是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的一个replica
或副本,并且该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对象的更多文档,请参见:
kubernetes , pod , 部署 , kubernetes服务