在自托管基础设施上使用 GitOps 部署 MinIO

news2024/11/24 23:10:44

基于MinIO Weaviate Python GitOps探索的见解,本文探讨了如何增强软件部署流程的自动化。

通过将 GitHub Actions 与 Docker Swarm 集成而产生的协同作用,以自托管基础架构的稳健性为基础,标志着 CI/CD 实践的关键进步。这种方法不仅利用了软件应用程序的容器化优势,还强调了 MinIO S3 在促进 GitOps 驱动的工作流程方面的重要作用。利用自托管环境为组织提供了无与伦比的控制力和更高的安全性,为定制的 CI/CD 管道铺平了道路。

自托管势在必行

目标侧重于使用内部管理的自定义 GitHub Actions 运行程序实现 MinIO。这种方法超越了仅仅采用自动化的前沿技术;这是关于在量身定制的环境中利用一流存储解决方案的综合功能。这种环境强调绝对的控制和适应性,突破了运营优势的界限。选择自托管运行器而不是 GitHub 的托管替代方案,可以提供完整的环境命令和在专用硬件上运行工作流的灵活性,从而最大限度地优化部署过程。

此外,自托管运行器可以通过限制内部网络暴露于外部威胁来最大程度地减少潜在的攻击媒介。通过运行器在内部运行,组织可以实施严格的安全措施,例如网络分段和访问控制,以有效解决漏洞。

此配置的主要目标是提高 CI/CD 管道的自动化、有效性和可伸缩性,尤其是对于以 Docker 为中心的应用程序和服务。通过集成使用 GitHub Actions、自托管运行器和 MinIO,团队可以简化开发工作流程,实现更可靠的部署,并优化资源分配,同时确保其部署环境保持安全和高度可控。

确保基础准备就绪

在深入研究部署和配置之前,确保基础元素在本地就位至关重要。这包括设置一个服务器作为 Docker Swarm 领导者,并为运行器准备一个带有特定存储库的 GitHub 帐户。

  • 服务器要求:启用了 Docker Swarm 的基于 Linux 的服务器是此设置的基石。服务器将充当 Docker Swarm 配置的领导者,跨多个节点编排容器部署。

  • GitHub 帐户准备:需要一个 GitHub 帐户,其中包含一个存储库,其中将配置 GitHub Actions 自托管运行器。此存储库将保存运行器将执行的代码库和工作流。

安装命令

若要准备服务器环境,必须安装以下软件包:

sudo apt update -y && sudo apt install docker.io docker-compose python3

命令行先决条件命令

这些命令可确保 Docker、Docker Compose 和 Python 已安装并可供使用,从而为顺利部署过程奠定了基础。

使用 Docker Swarm 奠定基础

Docker Swarm 将一组 Docker 主机转换为单个虚拟 Docker 主机,从而促进已部署应用程序的高可用性和负载平衡。配置 Swarm 涉及在领导者上初始化它,然后连接其他节点。

在领导节点上初始化 Docker Swarm

在将任何工作线程添加到群之前,需要初始化领导节点。这是通过以下命令完成的:

docker swarm init

此命令将输出带有令牌的 docker swarm join 命令。复制此命令以在下一步中使用。

将工作节点添加到 Swarm

在每个工作节点(在本例中为 Raspberry Pis)上,执行从领导节点初始化输出复制的命令。它看起来像这样:

docker swarm join --token <SWARM_JOIN_TOKEN> <LEADER_IP_ADDRESS>:2377

<LEADER_IP_ADDRESS>替换 <SWARM_JOIN_TOKEN> 为初始化期间提供的实际令牌和 IP 地址。

这些步骤将创建一个有凝聚力且协调的节点集群,能够托管和管理容器化应用程序。

配置 GitHub 自托管运行器

GitHub Self-Hosted Runner 是您管理和维护的计算机或容器,允许您完全控制环境和自定义选项。与 GitHub 托管的运行器(由 GitHub 提供的临时虚拟机)不同,自托管运行器在操作系统、软件和配置方面提供了灵活性。

在这种情况下,运行器将托管在本地运行的 Docker Swarm 领导节点上,以确保与现有基础结构无缝集成并保持对部署过程的控制。

将 GitHub Actions 与 Docker Swarm 集成

将 GitHub Actions 自托管运行器集成到 Docker Swarm 中涉及几个关键步骤,从设置运行器环境到下载和配置运行器软件。

设置 Runner 环境:

通过 GitHub UI,导航到存储库设置以添加新的自托管运行器。选择合适的操作系统和架构,与 Swarm 领导者的环境相匹配。

下载和配置运行器:

GitHub 提供了一组命令来下载、配置和启动 Swarm leader 上的自托管运行器。这些步骤将运行器注册到 GitHub,使其可用于执行工作流。

首先,您需要导航到 GitHub 存储库的设置,访问“操作”选项卡,然后添加新的运行器。按照 GitHub 提供的说明进行操作,其中包括下载运行器并对其进行配置。

每个运行器必须按存储库实现,并且独立运行;拥有可以跨多个存储库的 GitHub 运行器的能力是 GitHub Enterprise 的一项功能。这些说明看起来与以下命令类似,但使用 GitHub 提供的确切命令,因为它们包含唯一的令牌:

# Create a directory for the runner
mkdir action-runner && cd action-runner

# Download the runner package
curl -o actions-runner-linux-arm64-<RUNNER_VERSION>.tar.gz -L <https://github.com/actions/runner/releases/download/v><RUNNER_VERSION>/actions-runner-linux-arm64-<RUNNER_VERSION>.tar.gz

# Extract the runner package
tar xzf ./actions-runner-linux-arm64-<RUNNER_VERSION>.tar.gz

# Configure the runner
./config.sh --url <https://github.com/><GITHUB_USERNAME>/<GITHUB_REPO> --token <GITHUB_TOKEN>

请确保 <RUNNER_VERSION> <YOUR_USERNAME> <YOUR_REPO> <YOUR_TOKEN> 实际版本号、GitHub 用户名、仓库名称和 GitHub UI 提供的令牌。

交互式测试运行

最初,使用提供的脚本启动运行器,以确认其设置成功并准备好处理作业。

# Start the runner interactively

./run.sh

这些命令在自托管运行器和 GitHub 存储库之间建立连接,为直接从 Docker Swarm 领导者执行 CI/CD 工作流奠定了基础。

为运行器创建 systemd 服务

配置运行器后,下一步是对其进行操作,确保它可以无缝处理工作流执行。以交互方式启动运行器会测试其功能,而创建 Systemd 服务可确保其持久性和复原能力。

1. 创建 systemd 服务文件

此步骤涉及创建一个 systemd 服务文件,以将 GitHub Actions 运行程序作为服务进行管理,确保它自动启动并保持运行状态。

使用您喜欢的文本编辑器(如 nano 或 vim)创建新的服务文件:

sudo nano /etc/systemd/system/github-runner.service

插入以下内容,并根据需要调整路径:

[Unit]
Description=GitHub Actions Runner
After=network.target

[Service]
ExecStart=/home/<USER>/action-runner/run.sh
User=<USER>
WorkingDirectory=/home/<USER>/action-runner
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

替换 <USER> 为安装运行器的帐户的用户名。

2. 启用并启动服务

保存并关闭服务文件后,重新加载 systemd 以识别新服务,使其在启动时启动,然后立即启动服务:

sudo systemctl daemon-reload
sudo systemctl enable github-runner.service
sudo systemctl start github-runner.service

3. 验证服务状态

要确保 GitHub Actions 运行程序服务处于活动状态并正在运行,请执行以下命令:

sudo systemctl status github-runner.service

您应该会看到指示服务处于活动状态的输出。如果存在任何问题,输出还将包含有助于进行故障排除的错误消息。

从 GitHub Actions 选项卡中,选择 Runners 选项卡,这将显示两个“选项卡”。选择“自承载运行器”以查看已配置的存储库运行器。

使用自托管运行器在 Docker Swarm 上部署 MinIO

在调整 GitHub Actions 工作流以在自托管运行器上执行时,尤其是为 Docker Swarm 基础结构(如“rpi-swarm”)量身定制的工作流时,必须设计工作流以充分利用独特的环境。这意味着不仅要运行测试,还要部署真正的应用程序,例如高性能分布式对象存储服务器 MinIO。下面是如何配置 GitHub Actions 工作流以在“rpi-swarm”运行器上部署 MinIO 的示例,演示了运行器处理更复杂的 CI/CD 任务的能力,例如使用 Docker 和 Docker Compose 部署服务。

例如,在存储库的目录下.github/workflows创建一个文件,.github/workflows/deploy-minio-on-rpi-swarm.yml并插入以下工作流配置:

name: Deploy MinIO on RPI Swarm

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  deploy-minio:
    name: Deploy MinIO to RPI Swarm
    runs-on: [self-hosted, rpi-swarm]

    steps:
    - name: Check out repository code
      uses: actions/checkout@v2

    - name: Load Docker Compose File
      run: |
        echo "Loading Docker Compose for MinIO Deployment..."
        docker-compose -f docker-compose.yml config

    - name: Deploy MinIO Stack
      run: |
        echo "Deploying MinIO on RPI Swarm..."
        docker stack deploy -c docker-compose.yml minio_stack

    - name: Verify Deployment
      run: |
        echo "Verifying MinIO Deployment..."
        docker service ls | grep minio_stack

此工作流举例说明了如何利用 GitHub Actions 自托管运行器将 MinIO 等应用程序部署到 Docker Swarm 设置,展示了运行器在简单测试之外促进复杂 CI/CD 任务的能力。

  • name:标识工作流,此处名为“在 RPI Swarm 上部署 MinIO”。

  • on:定义工作流的触发器事件,设置为在推送到主分支和拉取请求时激活。

  • jobs:包含工作流要执行的作业,在此示例中,单个作业名为“deploy-minio”。

  • runs-on:指示作业在标记为“rpi-swarm”的自托管运行器上执行,确保工作流利用 Docker Swarm 的特定环境。

  • steps:列出作业将执行的操作顺序:

1 . 检出存储库代码:使用 actions/checkout@v2 将代码库提取到运行器上。

2 . 加载 Docker Compose 文件:准备要部署的 Docker Compose 文件,可用于验证文件的语法和输出有效配置。

3 . 部署 MinIO 堆栈:利用 Docker Compose 将 MinIO 作为堆栈部署到 Docker Swarm,展示自托管运行器处理 Docker Swarm 部署的能力。

4 . 验证部署:通过列出 Docker 服务并筛选 MinIO 堆栈来确认 MinIO 堆栈部署,确保部署成功。

利用 MinIO 和 GitOps 提升部署实践

这突显了 MinIO 致力于为当代应用程序完善存储解决方案的奉献精神,并与 GitHub 自托管运行器在 CI/CD 领域带来的演变无缝融合。采用 GitOps 原则使 MinIO 成为战略支点的先锋,朝着更加自力更生、更安全和更高效的部署工作流程迈进,从而显著增强了开发人员体验。

GitOps 在应用程序开发中引入的灵活性是 MinIO 功能大放异彩的另一个领域。开发人员发现自己有能力完善应用层并有把握地部署微服务,利用 MinIO 简化数据存储和管理。这种结构化的自动化方法可加速开发,增强应用程序的弹性和可扩展性。GitHub Actions 和自托管运行器的结合使各种设置的部署更加顺畅,充分利用了 MinIO 的对象存储优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1847064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

索尼MXF文件断电变2G恢复方法(PXW-Z280V)

PXM-Z280V算是索尼比较经典的机型&#xff0c;也是使用MXF文件格式的机型之一。近期接到很多例索尼MXF量突然不正常的案例&#xff08;如变成512字节或者2G&#xff09;&#xff0c;下面来看下这个案例。 故障存储: 128G存储卡 /文件系统&#xff1a;exFAT 故障现象: 客户反…

《数据结构与算法基础》——1.2基本概念和术语

一、本章结构 二、四个数据相关专业名词的解释 两者的区别 三、数据结构相关内容 四、逻辑结构的分类 五、存储结构的分类及四种基本存储结构 六、数据类型和抽象数据类型

跑通并使用Yolo v5的源代码并进行训练—目标检测

跑通并使用Yolo v5的源代码并进行训练 摘要&#xff1a;yolo作为目标检测计算机视觉领域的核心网络模型&#xff0c;虽然到24年已经出到了v10的版本&#xff0c;但也很有必要对之前的核心版本v5版本进行进一步的学习。在学习yolo v5的时候因为缺少论文所以要从源代码入手来体验…

JavaScript的学习之旅之基本数据类型

目录 一、字面量&#xff08;常量&#xff09;和变量 二、标识符 三、数据类型 1.String类型 2.Number类型 四、布尔值类型 五、Null和Undefined类型 一、字面量&#xff08;常量&#xff09;和变量 字面量&#xff1a;不可变的数据&#xff0c;一般位于等式的右边 变量&…

注册安全分析报告:PingPong

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

深度剖析现阶段的多模态大模型做不了医疗

导读 在人工智能的这波浪潮中&#xff0c;以ChatGPT为首的大语言模型&#xff08;LLM&#xff09;不仅在自然语言处理&#xff08;NLP&#xff09;领域掀起了一场技术革命&#xff0c;更是在计算机视觉&#xff08;CV&#xff09;乃至多模态领域展现出了令人瞩目的潜力。 这些…

芯片制作流程

1、系统需求-》设计-》光罩-》芯片制造-》检测-》封装-》测试。 光罩-》光阻涂布-》曝光-》显影和烘烤-》刻蚀-》等离子体去胶-》湿法刻蚀 化学机械研磨-》薄膜沉积-》制作金属薄膜-》化学气相沉积-》离子注入

探索序列到序列模型:了解编码器和解码器架构的强大功能

目录 一、说明 二、什么是顺序数据&#xff1f; 三、编码器解码器架构的高级概述&#xff1a; 3.1 编码器和解码器架构的简要概述&#xff1a; 3.2 训练机制&#xff1a;编码器和解码器架构中的前向和后向传播&#xff1a; 四、编码器解码器架构的改进&#xff1a; 4.1.…

王老吉“杀疯啦”?传统品牌如何创新营销“破圈”而出

好像现在年轻人都不热衷喝凉茶更偏爱咖啡了&#xff0c;没关系&#xff0c;王老吉带着“冰中式”向你走来了。 四月底&#xff0c;王老吉和肯德基K咖啡联名&#xff0c;推出了王老吉风味的气泡美式。可能乍一听觉得奇奇怪怪&#xff0c;而后细想&#xff0c;凉茶味儿的咖啡&am…

QListWidget、QMenu、Action、customContextMenuRequested

QListWidget的初始化、清空、Append添加、Insert添加、删除item QListWidget的事件的使用 QToolBox的使用&#xff0c;每个Page可以添加其他控件 QToolBar使用代码添加QMenu,QMenu添加3个Action QToolButton绑定Action 布局 其中 QSplitter比较特殊&#xff0c; 允许在水平或垂…

S32K3 工具篇1:新手如何安装S32DS RTD4_0_0

S32K3 工具篇1&#xff1a;新手如何安装S32DS RTD4_0_0 一&#xff0c; 软件下载1.1 RTD 下载1.2 S32DS IDE 和 更新包 下载1.3 S32K3XX development 包下载 二&#xff0c; 软件安装2.1 安装S32DS IDE2.2 安装 IDE update&#xff0c;development&#xff0c;RTD 三&#xff0…

Python 修炼|人人编程手册|001 计算思维

在微信中阅读,关注公众号:CodeFit。 > 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 1. 计算思维 在我们正式开启 Python 修炼之旅前,先来了解一个关键的概念 —— 计算思维。 计算思维,其核心本质在于 抽象 …

python eval 函数和 json 对象的使用

注意&#xff1a; 1、python 不支持 switch 语句&#xff0c;所以多个条件判断分支的写法只能用 if 2、elif 对应 Java 中的 else if 3、python 编写的程序代码都是自上而下执行&#xff0c;除非代码控制&#xff0c;不然不会改变 4、需要注意代码层级&#xff0c;如果层级不对…

Mentor Xpedition怎么切换中英文界面

1、Mentor Xpedition的Layout界面&#xff0c;切换中英文的方法如下图&#xff1b; 切换英文设置&#xff0c;设置系统环境变量&#xff1a;MGC_PCB_LANGUAGEEnglish&#xff0c;重新打开软件即可切换成中文界面&#xff1b; 如果想要在切换成中文&#xff0c;把标量值改为Chi…

七连发吴谨言专访揭秘

七连发&#xff01;吴谨言专访揭秘&#xff0c;薛芳菲魅力再升级在娱乐圈的繁星中&#xff0c;总有那么一些独特的光芒&#xff0c;她们用才华和魅力照亮前行的道路。近日&#xff0c;备受瞩目的“六公主”平台连续发布了七条关于吴谨言的专访&#xff0c;引发了广大网友的热烈…

Java——访问修饰符

一、访问修饰符是什么 Java中的访问修饰符用于控制类、接口、构造函数、方法和数据成员&#xff08;字段&#xff09;的可见性和访问级别。 Java提供了四种访问修饰符&#xff1a; 访问修饰符同一类内同一包内不同包的子类不同包的非子类适用对象public可见可见可见可见类、…

猫头虎分享:IPython的使用技巧整理

&#x1f42f; 猫头虎分享&#xff1a;IPython的使用技巧整理 关于猫头虎 大家好&#xff0c;我是猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品…

Pytorch Geometric(PyG)入门

PyG (PyTorch Geometric) 是建立在 PyTorch 基础上的一个库&#xff0c;用于轻松编写和训练图形神经网络 (GNN)&#xff0c;适用于与结构化数据相关的各种应用。官方文档 Install PyG PyG适用于python3.8-3.12 一般使用场景&#xff1a;pip install torch_geometric 或conda …

ERP系统品牌大比拼:哪款产品更适合您的企业?

ERP集成了企业的销售、采购、生产、财务等各个环节&#xff0c;实现了资源的优化配置和信息的实时共享。然而&#xff0c;面对市场上琳琅满目的ERP系统产品&#xff0c;许多企业却陷入了选择的困境。 “哪款ERP系统更适合我的企业呢&#xff1f;”这或许是每一位企业决策者心中…

对象reids

对象 redis并没有直接使用之前学的数据结构来实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对象系统 这个对象系统包含了字符串对象、列表对象、哈希对象、集合对象、有序集合对象这五种&#xff0c;每个对象都用到了至少一种之前的数据结构 redis可以在执行命…