在 Kubernetes 上部署 Web 应用程序:入门指南
祝大家新月快乐!Kubernetes 已成为部署和管理容器化 Web 应用的领先平台。在本入门指南中,我们将介绍部署和更新 Web 应用所涉及的关键 Kubernetes 概念和资源。我们还将讨论可用于在 Kubernetes 上部署 Web 应用的不同部署策略。
介绍
在 Kubernetes 上部署 Web 应用程序时,主要使用两种资源:
- 部署 - 用于管理容器化 Web 应用程序的多个实例。
- 服务 - 将部署暴露给外部流量。
我们将介绍这些资源如何协同工作以运行和发布 Web 应用程序。我们还将讨论常见的部署策略,例如滚动更新、蓝绿部署和金丝雀部署。
读完本指南,您将了解:
- 部署和服务的作用
- 如何创建和更新部署
- 诸如滚动更新之类的策略来部署新版本
- 如何使用服务将应用程序对外公开
让我们开始吧!下图概述了我们将要经历的步骤。
Kubernetes 中的部署
部署控制器管理构成应用程序的一组相同的 pod(容器)。
创建部署时,您需要指定容器镜像和要运行的副本(Pod)数量。Kubernetes 会启动这些 Pod,并确保指定数量的 Pod 始终保持运行。
例如,一个简单的部署可能会创建 3 个应用程序容器副本。如果其中一个 Pod 发生故障,Kubernetes 会自动重新创建它,使其恢复到预期状态。
部署功能允许您通过更改副本数量轻松地扩展或缩减应用程序。它还支持滚动更新,以便推送应用程序代码的新版本。
以下是一个部署清单示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-webapp
spec:
replicas: 3
selector:
matchLabels:
app: my-webapp
template:
metadata:
labels:
app: my-webapp
spec:
containers:
- name: my-webapp
image: nginx:1.7.9
ports:
- containerPort: 80
这将创建一个名为 的部署my-webapp,该部署运行 3 个镜像副本,这些nginx:1.7.9镜像暴露在 80 端口上。
Kubernetes 中的服务
部署是在 pod 内运行容器,而服务则会暴露你的部署,以便可以从集群外部访问它们。
Kubernetes 服务有多种类型。主要类型包括:
- ClusterIP - 仅在集群内部公开 Pod。
- NodePort - 使部署可以通过节点端口访问。
- 负载均衡器 - 配置云负载均衡器以路由流量。
例如,您可以运行 ClusterIP 服务来将您的应用程序限制在内部,并运行 NodePort 服务来允许外部访问。
以下是一个服务清单示例:
apiVersion: v1
kind: Service
metadata:
name: my-webapp-service
spec:
selector:
app: my-webapp
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30007
这会将我们的my-webapp部署暴露在每个集群节点的 30007 端口上。
通过部署和服务,您可以获得在 Kubernetes 上运行和公开容器化 Web 应用程序的基本资源。
接下来我们将探讨部署策略……
部署策略
部署应用程序新版本通常采用以下几种策略:
滚动更新
如果您对 Kubernetes 部署清单进行更改,则默认策略是滚动更新。
它的工作原理是逐步用新设备替换旧设备,每次只替换几个,而不是一次性停止所有设备。这样就可以在不造成停机的情况下应用更改。
如果大量 pod 不可用,部署过程将暂停,以确保可用性。此外,还可以执行回滚操作。
蓝绿部署
采用蓝绿部署,不是直接更改现有部署,而是将新版本与旧版本一起部署。
新版本上线并测试完毕后,只需将服务指向新的部署位置即可切换。流量会立即转移到新版本。
这样一来,如果出现问题,只需将服务切换回旧部署即可轻松回滚。
金丝雀部署
采用金丝雀部署策略,先将新版本逐步推广给一小部分用户进行测试,然后再推广给所有人。
这样一来,您可以及早发现新版本存在的任何问题,并将影响降至最低。流量会随着时间的推移逐步转移,直到所有用户都使用新版本为止。
在 Kubernetes 上部署 Web 应用程序
现在我们已经了解了关键概念,让我们通过一个简单的示例来了解如何部署 Web 应用程序。
我们将部署免费开源的Cowsay应用,该应用会显示一头会说话的奶牛。
步骤 1 - 创建部署
首先,我们创建一个部署清单cowsay.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cowsay
spec:
replicas: 3
selector:
matchLabels:
app: cowsay
template:
metadata:
labels:
app: cowsay
spec:
containers:
- name: cowsay
image: docker/getting-started
ports:
- containerPort: 80
这将部署 3 个在端口 80 上暴露的 cowsay 镜像副本。
步骤 2 - 创建服务
现在我们创建一个服务清单cowsay-service.yaml来公开部署:
apiVersion: v1
kind: Service
metadata:
name: cowsay-service
spec:
selector:
app: cowsay
ports:
- port: 80
targetPort: 80
这是一个简单的 ClusterIP 服务,用于在内部暴露 cowsay。
步骤 3 - 部署应用程序
现在我们可以使用以下命令部署应用程序kubectl:
kubectl apply -f cowsay.yaml
kubectl apply -f cowsay-service.yaml
搞定!cowsay 应用已部署并发布到您的 Kubernetes 集群中。运行以下命令即可查看已创建的部署、服务和 Pod。
kubectl get deployments
kubectl get services
kubectl get pods
您可以在这里更新部署,或者通过 NodePort 将其暴露出来,使其可以从外部访问。
概括
本指南涵盖以下内容:
- 部署 - 用于运行多个相同的 pod 副本
- 服务 - 用于向内部和外部公开部署
- 常见的 部署策略 包括滚动更新和蓝绿部署。
- 逐步演示如何 在 Kubernetes 上部署示例应用程序
我们讨论了如何使用部署来管理 Pod 的多个实例,如何使用服务将 Web 应用程序暴露给外部世界,以及在 Kubernetes 上部署 Web 应用程序的不同部署策略。通过理解这些概念,您就可以开始在 Kubernetes 上部署自己的 Web 应用程序了。
这将使您对在 Kubernetes 上运行 Web 应用程序有一个扎实的基础知识。
为了获得更多实践经验,我建议查阅Kubernetes 文档,并在本地使用minikube尝试示例。
下一篇文章,我们将探讨如何在 Kubernetes 上扩展和监控 Web 应用程序。我们将介绍扩展应用程序的不同方法,以及监控应用程序所需的工具和技术。我们还将讨论可用于监控应用程序的不同指标,以及可用于可视化这些指标的不同工具。
希望您喜欢这篇文章。如有任何疑问,欢迎随时通过Twitter或LinkedIn联系我。您也可以在Dev.to上查看我的其他文章。感谢阅读!
请我喝杯咖啡。
参考
- Kubernetes 部署文档
- Kubernetes 服务文档
- Kubernetes 滚动更新文档
- Kubernetes 蓝绿部署教程
- 在 Kubernetes 上进行金丝雀部署
- Kubernetes 入门
- 在 Kubernetes 上部署示例应用程序
- Minikube 文档


