使用 GitHub Actions 在 Kubernetes 上部署应用

面试官:小伙子,你的代码为什么这么丝滑?

在现代化的应用程序开发中,Kubernetes 已成为一种广泛使用的容器编排工具。使用 Kubernetes 部署应用程序的一个好处是能够自动化管理应用程序的生命周期。另一方面,GitHub Actions 可以提供一个自动化工具,可以使开发人员在构建和部署应用程序方面更加高效。本文将介绍如何使用 GitHub Actions 在 Kubernetes 上部署应用程序。

准备 Kubernetes 部署的环境

首先,需要准备好 Kubernetes 部署的环境。这个环境需要有一个可用的 Kubernetes 集群并开启了 Kubernetes API。要将应用程序部署到 Kubernetes 集群中,需要以 Kubernetes 配置文件的形式提供应用程序。

假设已经有一个使用 Minikube 的本地 Kubernetes 集群,并且将要部署一个名为“myapp”的应用程序。在部署之前,需要先在 Kubernetes 中创建相应的部署资源:

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

保存这个配置文件为myapp.yaml,并运行以下命令来创建资源:

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

现在已经准备好 Kubernetes 环境和应用程序的部署资源,接下来可以使用 GitHub Actions 来自动化构建和部署应用程序。

创建 GitHub Actions 工作流

GitHub Actions 提供了一个 CI/CD 系统,可以通过使用 YAML 文件来构建和部署应用程序。下面将介绍如何创建一个 GitHub Actions 工作流来自动化构建和部署应用程序。

创建 GitHub Actions 触发事件

首先,需要在项目的根目录中创建一个.github/workflows目录,并在此目录下创建一个 YAML 文件,该 YAML 文件定义了 GitHub Actions 的触发条件和操作步骤。对于本教程,我们将为 GitHub Actions 创建一个名为kubernetes-deploy.yml的 YAML 文件,并定义构建应用程序并部署应用程序到 Kubernetes 集群的步骤。

以下是一个示例的kubernetes-deploy.yml文件,其中定义了触发条件和添加必要环境变量:

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

在这个文件中,定义了以下步骤:

  • name 定义了工作流的名称
  • on 定义了 GitHub Actions 的触发条件
  • env 定义了环境变量。在本教程中,定义了 Kubernetes 环境配置信息和 Docker 镜像存储库的信息。
  • jobs 定义了工作流的任务
  • runs-on 定义了任务运行的操作系统
  • steps 定义了工作流的步骤

构建和部署应用程序到 Kubernetes 集群

要构建和部署应用程序,需要执行以下步骤:

  1. 检出代码库和分支。
  2. 安装 Kubernetes CLI 工具并设置环境变量。
  3. 构建 Docker 镜像并上传到 Docker 镜像存储库。
  4. 使用 envsubst 工具替换 Kubernetes 资源文件(myapp.yaml)中的环境变量并使用 kubectl 应用。

注册 Kubernetes API 访问凭证

上述 YAML 文件中要使用 Kubernetes API 访问凭证来连接 Kubernetes 集群。但是,在 GitHub Actions 环境中执行构建和部署可能需要使用不同的 Kubernetes 访问凭证。因此,需要注册一个 ServiceAccount 并生成相关的 Kubernetes API 访问凭证。要注册 ServiceAccount 并生成访问凭证,可以使用以下命令:

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

第一行命令创建 ServiceAccount,第二行命令创建一个 ClusterRoleBinding 并将 ServiceAccount 绑定到命名空间default。最后一个命令将输出由第二个命令自动生成的 Kubernetes API 访问凭证。

将访问凭证复制到剪贴板中。

注册 Docker 镜像存储库 API 访问凭证

在 GitHub Actions 构建 Docker 镜像并上传到 Docker 镜像存储库时,可能需要 Docker 镜像存储库 API 的访问凭证。在这个例子中,使用了 Docker Hub 作为 Docker 镜像存储库。要使用 Docker Hub API 访问凭证,请执行以下命令:

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

将输出的 Docker Hub 用户名(DOCKERHUB_USERNAME)和密码(DOCKERHUB_PASSWORD)复制到剪贴板中。

注册 GitHub Actions 的秘密配置

将之前复制到剪贴板中的 Kubernetes API 访问凭证和 Docker Hub API 访问凭证保存在 GitHub Actions 的秘密配置中。打开 GitHub 仓库页面,进入 Settings -> Secrets,然后单击“New repository secret”创建两个新的秘密:

  • KUBE_CONFIG_DATA:将复制到剪贴板中的 Kubernetes API 访问凭证粘贴到 GitHub Actions 秘密配置的 KUBE_CONFIG_DATA 行
  • DOCKER_REGISTRY:将 Docker Hub 用户名(DOCKERHUB_USERNAME)和密码(DOCKERHUB_PASSWORD)以以下格式粘贴到 GitHub Actions 秘密配置的 DOCKER_REGISTRY 行中:{DOCKERHUB_USERNAME}:{DOCKERHUB_PASSWORD}

做完这些准备工作后,就可以将代码和配置提交到 GitHub 仓库并触发构建和部署。

运行 GitHub Actions 工作流程

现在,每当将代码提交到 GitHub 仓库后,GitHub Actions 将自动构建并部署应用程序。这个操作步骤包括:

  1. 构建 Docker 镜像;
  2. 将 Docker 镜像上传到 Docker 镜像存储库;
  3. 下载 Kubernetes 部署文件(myapp.yaml);
  4. 使用 envsubst 工具替换 Kubernetes 资源文件中的环境变量;
  5. 在 Kubernetes 集群上运行 kubectl 命令,将更新后的应用程序部署到架构中。

要查看 GitHub Actions 的工作流,可以在 GitHub 仓库页面上导航到“Actions”部分。在那里,可以查看所有在主分支上触发并运行的工作流。还可以使用该部分的筛选选项来筛选和查找某个特定的工作流。

结论

使用 GitHub Actions 在 Kubernetes 上部署应用程序可以简化流程并加快开发和部署。在本文中,介绍了如何使用 GitHub Actions 构建和部署应用程序。此外,还讨论了如何设置 Kubernetes 环境和注册 API 访问凭证,并使用 GitHub Actions 的秘密函数来安全地存储这些信息。GitHub Actions 在企业组织中也可以用来进一步规范和简化构建和部署流程。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66fa999244713626014e0260


猜你喜欢

  • 如何使用 CSS Reset 解决 z-index 层次问题?

    什么是 z-index? 在 CSS 中,z-index 属性用于控制元素在层叠上下文(stacking context)中的显示顺序,也就是所谓的“层次”或“叠层次序”。

    17 天前
  • Node.js 中的推送通知技术及其应用实例

    在 Web 应用程序中,推送通知是将实时信息传递到客户端的一种方法,它可以在后端服务器或第三方推送服务提供商的帮助下完成。Node.js 是一种强大的后端平台,提供了许多用于应用程序的推送通知技术。

    17 天前
  • ECMAScript 2017 的新特性:Async Iteration 的使用方法

    在 ECMAScript 2017 中,我们迎来了一项新特性,Async Iteration(即“异步迭代”),它是一种在异步操作中使用迭代器(Iterator)的方法。

    17 天前
  • 如何测试 GraphQL API

    GraphQL 是一种新型的 API 查询语言,它允许开发者请求和返回所需的数据,而不需要像传统的 RESTful API 那样收到不必要的数据。然而,由于 GraphQL 的灵活性和动态性,测试 G...

    17 天前
  • 使用 Docker 和 Nginx 搭建 Node.js 应用

    使用 Docker 和 Nginx 搭建 Node.js 应用 在现代 Web 应用开发中,Docker 已经成为了一个必要的工具。Docker 是一个容器化技术,可以将整个应用程序打包到一个可移植的...

    17 天前
  • CSS Grid 如何取舍 “使用场景” 或 “适用范围”

    在前端开发中,布局一直是最基础也是最核心的一部分。在 CSS 中,我们用过很多布局方法,比如使用浮动实现多列布局,使用弹性盒子实现对齐等等。而在 CSS3 中,CSS Grid 布局成为了一种新的布局...

    17 天前
  • Deno 应用中常见的 SQL 注入错误及解决方法

    前言 SQL 注入是一个经典的安全问题,它存在于几乎所有 Web 应用中,也特别容易出现在基于 Deno 的后台应用程序中。本文将讨论 Deno 应用程序中常见的 SQL 注入错误,以及如何防止它们出...

    17 天前
  • 如何在 Mocha 测试中测试 redux reducer 的方法?

    在前端应用开发中,Redux 已经成为了一个流行的状态管理工具。然而,Redux 的 reducer 函数需要经常保证其正确性,这就需要有一个好的测试框架来确保 reducer 编写正确。

    17 天前
  • ES9 中 Reflect.ownKeys() 的详细用法

    在 ES9 中加入了一个新的方法 Reflect.ownKeys(),该方法可以用于获取一个对象所有的属性,包括 Symbol 类型的属性。这个方法可以帮助我们更方便地操作对象属性,同时也增强了代码的...

    17 天前
  • 在 React Native 中使用 Redux 构建电商应用

    React Native 是一个跨平台的框架,可以同时为 iOS 和 Android 创建本机应用。Redux 是一个流行的状态管理库,它可以更好地处理数据流,并简化代码的管理。

    17 天前
  • 在 Web 应用程序中使用 Fastify 和 GraphQL

    在 Web 应用程序中使用 Fastify 和 GraphQL Fastify 是一个快速和低开销的 Node.js web 框架,非常适合构建高性能的 Web 应用程序。

    17 天前
  • 如何在 React 中使用异步函数以及 ES2020 异步函数的优化

    如何在 React 中使用异步函数以及 ES2020 异步函数的优化 前言 在现代前端开发中,异步编程是不可避免的一个主题。React 作为当今最流行的前端框架,对于异步编程的支持也非常友好,同时 E...

    17 天前
  • 如何使用 ESLint 在 Express 项目中检查代码规范

    ESLint 是一个 JavaScript 代码检查工具,它可以帮助开发者在编写代码时检查常见的代码错误、保持代码风格的一致性、避免常见的安全问题等。在一个大型的 Express 项目中使用 ESLi...

    17 天前
  • 如何在 Express.js 应用程序中使用 HTTPS 进行保护?

    在当今的互联网世界中,安全性成为了任何应用程序开发的核心要素。其中,HTTPS 协议可以提供一定的安全机制,以防止敏感数据泄露、防止数据被窃取、篡改等。 在本文中,我们将探讨如何在 Express.j...

    17 天前
  • 如何使用 ECMAScript 2019 的 nullish 合并运算符来避免undefined or null类型的错误

    引言 在编写 JavaScript 代码时可能会遇到undefined or null类型的错误,这些错误经常在代码执行期间导致程序停止运行。ECMAScript 2019 引入了nullish合并运...

    17 天前
  • Sequelize: 使用 Sequelize 模块连接数据库

    介绍 Sequelize 是一种 Node.js 的 ORM(Object-Relational Mapping) 框架,可以轻松地在未使用 SQL 语句的情况下与代码中的数据库进行交互。

    17 天前
  • Docker-compose 常见错误及解决方案

    Docker-compose 是一种将多个 Docker 容器组合成一组服务的工具,可以透明地连接多个 Docker 容器,让开发者轻松创建,并在任意环境中运行本地服务。

    17 天前
  • Vue.js SPA 应用 SEO 改善范例

    Vue.js SPA 应用 SEO 改善范例 随着互联网的快速发展,网站变得越来越复杂和功能化,单页应用程序(Single Page Application, SPA)逐渐成为了一种流行的前端框架。

    17 天前
  • Babel 编译 React Native 遇到的常见问题及解决方法

    React Native 是一种用于构建跨平台移动应用程序的框架。它使用 JavaScript 语言,配合其强大的组件化架构,使得开发者可以更快、更简单地创建高质量的移动应用程序。

    17 天前
  • PM2 和 Node.js 的错误处理和日志记录最佳实践

    介绍 PM2 是 Node.js 应用程序进程管理器,它可以帮助我们启动,停止,重启和监控 Node.js 应用程序。当我们的 Node.js 应用出现错误或者崩溃时,我们需要及时地捕捉和记录错误,以...

    17 天前

相关推荐

    暂无文章