Kubernetes 部署一个高可用的 Nginx Web 服务

阅读时长 6 分钟读完

前言

Kubernetes 是一个流行的容器编排平台,可以通过它轻松部署和管理容器化的应用程序。Nginx 是一个流行的 Web 服务器,广泛用于部署 Web 应用程序。

本文将介绍如何使用 Kubernetes 部署一个高可用的 Nginx Web 服务。首先,我们将介绍基本的 Kubernetes 概念,包括 Pod 和 Service;然后,我们将创建一个 Nginx Pod 和一个 Nginx Service,并使用 Deployment 实现高可用性。最后,我们将使用 Ingress 实现负载均衡和路由。

Kubernetes 基础知识

在开始创建 Nginx 应用之前,我们需要了解 Kubernetes 的一些基本概念。

Pod

Pod 是 Kubernetes 中最小的可部署单元。它是一个容器的集合,可以运行在同一主机上。Pod 中的容器共享一个网络命名空间和一个通信端口范围。它们可以通过 localhost 来相互通信。

Service

Service 是 Pod 的抽象,可以为应用程序提供一组稳定的 IP 地址和 DNS 名称。Service 可以被用来暴露应用程序的内部服务到集群内或集群外的其他组件。例如,如果您在一个服务中运行了多个容器,您可以使用 Service 为它们提供一个统一的访问地址。

Deployment

Deployment 是一种控制 Pod 副本数量的方式。它可以实现自动扩展和回滚操作。您可以通过 Deployment 来管理 Pod 的创建和销毁。当您更新应用程序时,Deployment 会自动部署一个新的 Pod 副本,并根据需要进行扩缩容操作。

Ingress

Ingress 可以将外部的 HTTP 和 HTTPS 流量路由到集群内的 Service 上。它提供了负载均衡和路由的功能。您可以使用 Ingress 来实现域名的绑定、HTTPS 的证书配置和路径的重定向。

高可用 Nginx Web 服务的部署

步骤一:创建 Nginx Pod

下面是一个 Nginx Pod 的示例 YAML 文件:

-- -------------------- ---- -------
----------- --
----- ---
---------
  ----- ---------
-----
  -----------
  - ----- -----
    ------ ------------
    ------
    - -------------- --
展开代码

在这个示例文件中,我们创建了一个名为 nginx-pod 的 Pod,它包含一个名为 nginx 的容器。我们使用官方的 nginx 镜像,并开放了80端口。使用 kubectl apply -f nginx-pod.yaml 命令来创建该 Pod。

步骤二:创建 Nginx Service

下面是一个 Nginx Service 的示例 YAML 文件:

-- -------------------- ---- -------
----------- --
----- -------
---------
  ----- -------------
-----
  ---------
    ---- -----
  ------
  - ----- ----
    ----- --
    ----------- --
  ----- ---------
展开代码

在这个示例文件中,我们创建了一个名为 nginx-service 的 Service。我们使用标签选择器 app: nginx 来选择在 Pod 中运行的 nginx 容器,并将 Service 端口映射到容器的 80 端口上。Service 类型为 ClusterIP,表示它只能在集群内部进行访问。

使用 kubectl apply -f nginx-service.yaml 命令来创建该 Service。

步骤三:使用 Deployment 实现扩缩容和回滚

为了实现高可用性,我们将使用 Deployment 来管理 Nginx Pod 的副本数量。下面是一个 Nginx Deployment 的示例 YAML 文件:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- ----------------
-----
  --------- -
  ---------
    ------------
      ---- -----
  ---------
    ---------
      -------
        ---- -----
    -----
      -----------
      - ----- -----
        ------ ------------
        ------
        - -------------- --
展开代码

在这个示例文件中,我们创建了一个名为 nginx-deployment 的 Deployment。我们使用标签选择器 app: nginx 来选择在 Pod 中运行的 nginx 容器,并设置副本数量为 3。使用模板文件创建 Pod ,每个 Pod 中运行一个 nginx 容器。使用 kubectl apply -f nginx-deployment.yaml 命令来创建该 Deployment。

现在,您可以使用 kubectl scale deployment nginx-deployment --replicas 5 命令来扩大部署的副本数量。当您更新应用程序时,您也可以使用 kubectl rollout undo deployment nginx-deployment 命令回滚应用程序。

步骤四:使用 Ingress 实现负载均衡和路由

下面是一个 Nginx Ingress 的示例 YAML 文件:

-- -------------------- ---- -------
----------- --------------------
----- -------
---------
  ----- -------------
  ------------
    ------------------------------------------- -
-----
  ------
  - ----- -----------
    -----
      ------
      - ----- ------
        --------- ------
        --------
          --------
            ----- -------------
            -----
              ----- ----
展开代码

在这个示例文件中,我们创建了一个名为 nginx-ingress 的 Ingress。我们使用标签选择器 app: nginx 来选择在 Pod 中运行的 nginx 容器。使用 nginx.ingress.kubernetes.io/rewrite-target: / 注解来重写 URL。为了将流量路由到 Service 中,我们指定了 Service 的名称和端口。我们也可以使用路径来路由。

使用 kubectl apply -f nginx-ingress.yaml 命令来创建该 Ingress。您可以使用 kubectl get ingress 命令来查看 Ingress 的状态。

现在,您可以访问 http://example.com/nginx 来访问 Nginx Web 服务。应用程序的流量将通过 Ingress 路由到 Service 中,然后由 Service 将流量转发到 Pod 中运行的 Nginx 容器。如果需要,您也可以将 HTTPS 流量转发到 HTTP Service,并使用证书注释来配置 HTTPS 的证书。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c15e1b314edc2684962fc3

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试