基于 Kubernetes 的 CI/CD 自动化部署实践

阅读时长 7 分钟读完

前言

随着互联网技术的不断发展,软件开发变得越来越快,同时也变得越来越复杂。为了保证软件的质量和稳定性,CI/CD 自动化部署已经成为了现代软件开发的标配。而 Kubernetes 作为一款容器编排工具,更是为自动化部署提供了强大的支持。

本文将介绍如何在 Kubernetes 上实现 CI/CD 自动化部署,并提供详细的示例代码和指导意义。

准备工作

在开始实践之前,需要先准备好以下工具和环境:

  • Kubernetes 集群
  • GitLab CI/CD
  • Docker 镜像仓库
  • Helm

实现流程

1. 编写 Dockerfile

首先,我们需要编写 Dockerfile 来构建我们的应用镜像。假设我们的应用是一个基于 Node.js 的 Web 应用,Dockerfile 可以如下所示:

-- -------------------- ---- -------
---- --------------

------- ----

---- ------------- --

--- --- ------- ------------

---- - -

--- - ------ ------- -

2. 构建 Docker 镜像

接下来,我们需要将 Dockerfile 构建成 Docker 镜像,并将其推送到 Docker 镜像仓库中。这里我们以 GitLab CI/CD 为例,示例代码如下:

-- -------------------- ---- -------
-------
  - -----
  - ----

------
  ------ -----
  ------ -------------
  ---------
    - -----------
  -------
    - ------ ----- -- --------------------------------- -
  ----------
    ------
      - ----------
  -----
    - ------

-----
  ------ ----
  ------ -------------
  ---------
    - -----------
  -------
    - ------ ----- -- --------------- -- ------------- ------------
    - ------ ---- ---------------------------------
  -----
    - ------

这里我们定义了两个阶段:build 和 push。在 build 阶段中,我们使用 Docker 官方提供的 Docker 镜像来构建我们的应用镜像,并将其打上 commit SHA 的标签。在 push 阶段中,我们首先使用 GitLab CI/CD 提供的 $CI_JOB_TOKEN 来登录 Docker 镜像仓库,然后推送我们的应用镜像到仓库中。

3. 部署到 Kubernetes

最后,我们需要使用 Helm 将我们的应用部署到 Kubernetes 集群中。假设我们的应用需要使用一个数据库,我们可以使用 Helm 来同时部署数据库和应用。示例代码如下:

-- -------------------- ---- -------
----------- --
----- ------
---------
  ----- ------------
----- ------
-----------
  ------------ ----------------

---

----------- --
----- -------
---------
  ----- --------
-----
  ---------
    ---- --------
  ------
    - ----- -----
      ----- ----

---

----------- -------
----- ----------
---------
  ----- --------
-----
  ---------
    ------------
      ---- --------
  ---------
    ----- --------
  ---------
    ---------
      -------
        ---- --------
    -----
      -----------
        - ----- -----
          ------ ---------
          ----
            - ----- -------------------
              ----------
                -------------
                  ----- ------------
                  ---- -----------
          ------
            - -------------- ----
          -------------
            - ----- ------------------------
              ---------- --------------
      --------
        - ----- ------------------------
          ----------------------
            ---------- ---------

---

----------- --
----- -------
---------
  ----- -----
-----
  ----- --------
  ---------
    ---- -----
  ------
    - ----- ----
      ----- --
      ----------- ----

---

----------- -------
----- ----------
---------
  ----- -----
-----
  --------- -
  ---------
    ------------
      ---- -----
  ---------
    ----- -------------
    --------------
      --------- -
      --------------- -
  ---------
    ---------
      -------
        ---- -----
    -----
      -----------
        - ----- -----
          ------ --------------------------------
          ----
            - ----- -------
              ------ --------
            - ----- -----------
              ----------
                -------------
                  ----- ------------
                  ---- -----------
          ------
            - -------------- ----
          --------------
            --------
              ----- -------
              ----- ----
            -------------------- --
            --------------- -
          ---------------
            --------
              ----- -------
              ----- ----
            -------------------- --
            --------------- -
      -----------------
        - ----- ------------------

这里我们定义了两个 Deployment:myapp 和 myapp-db。myapp-db 使用了 MySQL 5.7 镜像,并挂载了一个持久化存储卷来保存数据。myapp 使用了我们构建好的应用镜像,并通过环境变量来连接到 myapp-db。我们还定义了一个 livenessProbe 和一个 readinessProbe 来检测应用的健康状态。

总结

通过以上实践,我们成功地使用 Kubernetes、GitLab CI/CD 和 Helm 实现了一个基于 Node.js 的 Web 应用的自动化部署。这样的实践不仅可以提高软件开发的效率,还可以保证软件的质量和稳定性。

希望本文能对读者有所帮助,也欢迎大家在评论区留言分享自己的实践经验。

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

纠错
反馈