在现代化的应用程序开发中,Kubernetes 已成为一种广泛使用的容器编排工具。使用 Kubernetes 部署应用程序的一个好处是能够自动化管理应用程序的生命周期。另一方面,GitHub Actions 可以提供一个自动化工具,可以使开发人员在构建和部署应用程序方面更加高效。本文将介绍如何使用 GitHub Actions 在 Kubernetes 上部署应用程序。
准备 Kubernetes 部署的环境
首先,需要准备好 Kubernetes 部署的环境。这个环境需要有一个可用的 Kubernetes 集群并开启了 Kubernetes API。要将应用程序部署到 Kubernetes 集群中,需要以 Kubernetes 配置文件的形式提供应用程序。
假设已经有一个使用 Minikube 的本地 Kubernetes 集群,并且将要部署一个名为“myapp”的应用程序。在部署之前,需要先在 Kubernetes 中创建相应的部署资源:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ----- ----- --------- - --------- ------------ ---- ----- --------- --------- ------- ---- ----- ----- ----------- - ----- ----- ------ -------- ------ - -------------- ---- --- ----------- -- ----- ------- --------- ----- ------------- ----- --------- ---- ----- ------ - ----- ---- --------- --- ----- -- ----------- ---- ----- --------
保存这个配置文件为myapp.yaml
,并运行以下命令来创建资源:
$ kubectl apply -f 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 集群
要构建和部署应用程序,需要执行以下步骤:
- 检出代码库和分支。
- 安装 Kubernetes CLI 工具并设置环境变量。
- 构建 Docker 镜像并上传到 Docker 镜像存储库。
- 使用 envsubst 工具替换 Kubernetes 资源文件(myapp.yaml)中的环境变量并使用 kubectl 应用。
注册 Kubernetes API 访问凭证
上述 YAML 文件中要使用 Kubernetes API 访问凭证来连接 Kubernetes 集群。但是,在 GitHub Actions 环境中执行构建和部署可能需要使用不同的 Kubernetes 访问凭证。因此,需要注册一个 ServiceAccount 并生成相关的 Kubernetes API 访问凭证。要注册 ServiceAccount 并生成访问凭证,可以使用以下命令:
$ kubectl create serviceaccount github-actions $ kubectl create clusterrolebinding github-actions --clusterrole cluster-admin --serviceaccount=default:github-actions $ kubectl get secrets -o json | jq -r '.items[] | select(.metadata.name | contains("token")) | .metadata.name' | xargs -I {} sh -c 'kubectl get secret {} -o jsonpath="{.data.token}" | base64 -d && echo'
第一行命令创建 ServiceAccount,第二行命令创建一个 ClusterRoleBinding 并将 ServiceAccount 绑定到命名空间default。最后一个命令将输出由第二个命令自动生成的 Kubernetes API 访问凭证。
将访问凭证复制到剪贴板中。
注册 Docker 镜像存储库 API 访问凭证
在 GitHub Actions 构建 Docker 镜像并上传到 Docker 镜像存储库时,可能需要 Docker 镜像存储库 API 的访问凭证。在这个例子中,使用了 Docker Hub 作为 Docker 镜像存储库。要使用 Docker Hub API 访问凭证,请执行以下命令:
$ echo $DOCKERHUB_USERNAME $ echo $DOCKERHUB_PASSWORD
将输出的 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 将自动构建并部署应用程序。这个操作步骤包括:
- 构建 Docker 镜像;
- 将 Docker 镜像上传到 Docker 镜像存储库;
- 下载 Kubernetes 部署文件(myapp.yaml);
- 使用 envsubst 工具替换 Kubernetes 资源文件中的环境变量;
- 在 Kubernetes 集群上运行 kubectl 命令,将更新后的应用程序部署到架构中。
要查看 GitHub Actions 的工作流,可以在 GitHub 仓库页面上导航到“Actions”部分。在那里,可以查看所有在主分支上触发并运行的工作流。还可以使用该部分的筛选选项来筛选和查找某个特定的工作流。
结论
使用 GitHub Actions 在 Kubernetes 上部署应用程序可以简化流程并加快开发和部署。在本文中,介绍了如何使用 GitHub Actions 构建和部署应用程序。此外,还讨论了如何设置 Kubernetes 环境和注册 API 访问凭证,并使用 GitHub Actions 的秘密函数来安全地存储这些信息。GitHub Actions 在企业组织中也可以用来进一步规范和简化构建和部署流程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fa999244713626014e0260