发布于 2026-01-06 2 阅读
0

在 Kubernetes 上部署 Web 应用程序:入门指南

在 Kubernetes 上部署 Web 应用程序:入门指南

祝大家新月快乐!Kubernetes 已成为部署和管理容器化 Web 应用的领先平台。在本入门指南中,我们将介绍部署和更新 Web 应用所涉及的关键 Kubernetes 概念和资源。我们还将讨论可用于在 Kubernetes 上部署 Web 应用的不同部署策略。

介绍

在 Kubernetes 上部署 Web 应用程序时,主要使用两种资源:

  • 部署 - 用于管理容器化 Web 应用程序的多个实例。
  • 服务 - 将部署暴露给外部流量。

我们将介绍这些资源如何协同工作以运行和发布 Web 应用程序。我们还将讨论常见的部署策略,例如滚动更新、蓝绿部署和金丝雀部署。

读完本指南,您将了解:

  • 部署和服务的作用
  • 如何创建和更新部署
  • 诸如滚动更新之类的策略来部署新版本
  • 如何使用服务将应用程序对外公开

让我们开始吧!下图概述了我们将要经历的步骤。

K8s 工作流

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


Enter fullscreen mode Exit fullscreen mode

这将创建一个名为 的部署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


Enter fullscreen mode Exit fullscreen mode

这会将我们的my-webapp部署暴露在每个集群节点的 30007 端口上。

通过部署和服务,您可以获得在 Kubernetes 上运行和公开容器化 Web 应用程序的基本资源。

接下来我们将探讨部署策略……

部署策略

部署应用程序新版本通常采用以下几种策略:

滚动更新

如果您对 Kubernetes 部署清单进行更改,则默认策略是滚动更新。

它的工作原理是逐步用新设备替换旧设备,每次只替换几个,而不是一次性停止所有设备。这样就可以在不造成停机的情况下应用更改。

如果大量 pod 不可用,部署过程将暂停,以确保可用性。此外,还可以执行回滚操作。

蓝绿部署

采用蓝绿部署,不是直接更改现有部署,而是将新版本与旧版本一起部署。

新版本上线并测试完毕后,只需将服务指向新的部署位置即可切换。流量会立即转移到新版本。

这样一来,如果出现问题,只需将服务切换回旧部署即可轻松回滚。

金丝雀部署

采用金丝雀部署策略,先将新版本逐步推广给一小部分用户进行测试,然后再推广给所有人。

这样一来,您可以及早发现新版本存在的任何问题,并将影响降至最低。流量会随着时间的推移逐步转移,直到所有用户都使用新版本为止。

在 Kubernetes 上部署 Web 应用程序

现在我们已经了解了关键概念,让我们通过一个简单的示例来了解如何部署 Web 应用程序。

K8S 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


Enter fullscreen mode Exit fullscreen mode

这将部署 3 个在端口 80 上暴露的 cowsay 镜像副本。

步骤 2 - 创建服务

现在我们创建一个服务清单cowsay-service.yaml来公开部署:



  apiVersion: v1
  kind: Service
  metadata:
    name: cowsay-service
  spec:
    selector:
      app: cowsay
    ports:
      - port: 80
        targetPort: 80


Enter fullscreen mode Exit fullscreen mode

这是一个简单的 ClusterIP 服务,用于在内部暴露 cowsay。

步骤 3 - 部署应用程序

现在我们可以使用以下命令部署应用程序kubectl



  kubectl apply -f cowsay.yaml
  kubectl apply -f cowsay-service.yaml


Enter fullscreen mode Exit fullscreen mode

搞定!cowsay 应用已部署并发布到您的 Kubernetes 集群中。运行以下命令即可查看已创建的部署、服务和 Pod。



  kubectl get deployments
  kubectl get services
  kubectl get pods


Enter fullscreen mode Exit fullscreen mode

您可以在这里更新部署,或者通过 NodePort 将其暴露出来,使其可以从外部访问。

概括

本指南涵盖以下内容:

  • 部署 - 用于运行多个相同的 pod 副本
  • 服务 - 用于向内部和外部公开部署
  • 常见的 部署策略 包括滚动更新和蓝绿部署。
  • 逐步演示如何  在 Kubernetes 上部署示例应用程序

我们讨论了如何使用部署来管理 Pod 的多个实例,如何使用服务将 Web 应用程序暴露给外部世界,以及在 Kubernetes 上部署 Web 应用程序的不同部署策略。通过理解这些概念,您就可以开始在 Kubernetes 上部署自己的 Web 应用程序了。

这将使您对在 Kubernetes 上运行 Web 应用程序有一个扎实的基础知识。

为了获得更多实践经验,我建议查阅Kubernetes 文档,并在本地使用minikube尝试示例

下一篇文章,我们将探讨如何在 Kubernetes 上扩展和监控 Web 应用程序。我们将介绍扩展应用程序的不同方法,以及监控应用程序所需的工具和技术。我们还将讨论可用于监控应用程序的不同指标,以及可用于可视化这些指标的不同工具。

希望您喜欢这篇文章。如有任何疑问,欢迎随时通过TwitterLinkedIn联系我。您也可以在Dev.to上查看我的其他文章。感谢阅读!

请我喝杯咖啡

图像

参考

文章来源:https://dev.to/ken_mwaura1/deploying-web-applications-on-kubernetes-a-beginners-guide-4ano