使用 GitHub Action 自动更新 Sealos 集群的应用镜像

news2024/11/19 20:35:37

在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键。Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务。与此同时,随着技术不断发展,集成更多的功能和服务变得尤为重要。考虑到这一点,本文将介绍如何利用 GitHub Action 来进一步丰富 Sealos 在应用更新方面的自动化体验

原文链接:https://forum.laf.run/d/1059

GitHub Action 介绍

在现代软件开发中,持续集成 (CI) 和持续部署/交付 (CD) 是至关重要的环节。它们可以帮助开发团队高效地验证代码的质量并确保其准确无误地交付到生产环境中。GitHub Action 正是在这个背景下诞生的 CI/CD 工具,致力于为开发者提供一种简洁且高效的自动化工具。

简单来说,GitHub Action 是一个 CI/CD 工具,它允许开发者在 GitHub 仓库中自动执行多种任务,从而极大地提高了工作效率。它可以自动进行代码的构建、测试和部署等关键步骤,确保在每次代码更新或合并请求中都能够进行快速而准确的验证和交付。

但 GitHub Action 不仅仅是一个传统的 CI/CD 工具。其独特之处在于,它与 GitHub 仓库实现了无缝集成。这意味着开发者无需离开 GitHub 环境,就能够配置和管理整个自动化流程,极大地简化了操作过程。此外,由于 GitHub 是目前世界上最大的代码托管平台,这种深度整合使得大量开发者能够轻松上手并利用 GitHub Action 进行自动化操作。

Sealos:同时面向初学者与专家

Sealos 的可视化桌面环境极大简化了用户对分布式应用的管理和维护,用户不再需要进行复杂的操作或拥有深厚的技术背景就能轻松管理分布式应用。通过减少复杂性和提供直观的界面,Sealos 显著地降低了用户的心智负担,使其可以更加集中地完成工作。

Sealos 海外集群:https://cloud.sealos.io

Sealos 国内集群:https://cloud.sealos.top

但 Sealos 不仅仅适用于普通用户,对于云原生领域的专业人员,提供了终端,您可以在终端中执行各种命令行操作。

同时还提供了 kubeconfig 文件的下载功能。拥有这个文件,专业人员可以将其下载到本地电脑,并使用 kubectl 命令行工具来直接管理和操作 Sealos 中的应用资源。这为那些希望深入管理和配置的云原生专家们提供了极大的灵活性。

有了 kubeconfig 之后,我们可以用来实现各种神奇的功能,比如本文将要介绍的自动更新应用镜像

GitHub Action 自动构建镜像

对于自己开发的应用,要想自动更新应用的镜像,前提是得先自动构建镜像。

GitHub Action 完美集成在 GitHub 平台上,无需额外配置或切换到其他平台即可基于源码来构建镜像。对于公开的仓库,GitHub 提供了一定的免费计算额度,适合小型项目或个人开发者。

使用 GitHub Action 自动构建并推送镜像的流程如下:

  1. 创建工作流文件:在你的 GitHub 仓库中创建一个 .github/workflows 目录,并在该目录下创建一个工作流配置文件,例如 docker_build.yml

  2. 配置 Secret:为了安全地推送镜像到 Docker Hub 和 ghcr.io,你需要在 GitHub 仓库的 "Secrets" 部分配置相应的认证信息。通常,这包括你的 Docker Hub 用户名、密码,以及 ghcr.io 的 token。例如:

  3. 编写工作流脚本:在配置文件中,定义所需的触发条件(如 pushmaster 分支)、运行环境以及执行的命令。

    示例:

    # 定义工作流的名称
    name: Build and Push Docker Image
    
    # 定义触发工作流的条件
    on:
      workflow_dispatch: # 允许手动触发工作流
      push: # 当有代码推送事件发生时
        branches:
          - master # 只有推送到 master 分支时才触发
    
    # 定义工作流的任务
    jobs:
      build-image:
        # 定义运行此任务的环境:最新版本的 ubuntu
        runs-on: ubuntu-latest
    
        # 定义任务中的步骤
        steps:
          # 检出代码。只检出最新的1次提交
          - uses: actions/checkout@v3
            with:
              fetch-depth: 1
    
          # 设置 QEMU 模拟器,这通常用于多平台的 Docker 构建
          - name: Set up QEMU
            uses: docker/setup-qemu-action@v2
    
          # 设置 Docker Buildx,用于构建多平台的 Docker 镜像
          - name: Set up Docker Buildx
            uses: docker/setup-buildx-action@v2
    
          # 登录到 Docker Hub
          - name: Login to DockerHub
            uses: docker/login-action@v2
            with:
              username: ${{ secrets.DOCKER_USERNAME }} # 使用存储在 GitHub Secrets 中的 DockerHub 用户名
              password: ${{ secrets.DOCKER_PASSWORD }} # 使用存储在 GitHub Secrets 中的 DockerHub 密码
    
          # 登录到 ghcr.io (GitHub Container Registry)
          - name: Login to ghcr.io
            uses: docker/login-action@v2
            with:
              registry: ghcr.io
              username: ${{ github.repository_owner }} # 使用仓库的拥有者名作为用户名
              password: ${{ secrets.GHCR_TOKEN }} # 使用存储在 GitHub Secrets 中的 ghcr.io 的访问令牌
    
          # 构建并推送 Docker 镜像到 docker.io 和 ghcr.io
          - name: Build and push Docker images to docker.io and ghcr.io
            uses: docker/build-push-action@v2
            with:
              platforms: linux/amd64 # 设置构建平台为 linux/amd64
              context: . # Docker 构建上下文设置为当前目录
              push: true # 设置为真以确保构建后的镜像被推送
              tags: | # 定义推送的标签
                ${{ secrets.DOCKER_USERNAME }}/xxxx:latest
                ghcr.io/${{ github.repository_owner }}/xxxx:latest
  4. 触发工作流:每当符合触发条件的事件发生时,GitHub Action 就会自动执行定义的工作流,从而构建和推送 Docker 镜像。

  5. 监控与调试:你可以在 GitHub 仓库的 "Actions" 标签页中,查看工作流的执行情况,包括日志、状态和结果。

使用 GitHub Action 自动构建镜像不仅可以简化开发流程,还可以确保每次代码的更改都得到了有效且一致的处理,大大提高了开发效率和代码质量。同时通过使用 GitHub 的 secrets 功能,还确保了认证信息的安全。

自动更新 Sealos 应用镜像

现在我们来到了最后一步。要想自动更新镜像,首先我们来回顾一下整个流程:

首先,当你的应用代码更新并合并到主分支时,GitHub Action 会自动触发构建镜像的任务。构建完成后,新的应用镜像会被推送到镜像仓库。

接下来,你需要在 GitHub Action 中调用 kubectl,更新 Sealos 集群中对应的 Deployment 或 StatefulSet。这样,Sealos 集群的应用就会使用新的镜像版本进行滚动更新。

我们可以利用一个特定的 GitHub Action:actions-hub/kubectl。这个 Action 提供了在 GitHub Actions 工作流中执行 kubectl 命令的能力。

以下是如何在你的 GitHub Actions 工作流中使用 actions-hub/kubectl 来更新 Sealos 应用镜像:

设置 kubeconfig

为了让 kubectl 能够与你的 Sealos 或其他 Kubernetes 集群进行通信,你需要提供一个有效的 Kubeconfig,Sealos 的 kubeconfig 可以在桌面中下载。

下载完成后,你需要将其中的内容转换为 base64 格式:

$ cat kubeconfig.yaml | base64

然后将转换后的内容存储到 GitHub 仓库的 Secret 中,假设 Secret 名为 KUBE_CONFIG 。Secret 配置方式参考上文。

使用 actions-hub/kubectl

现在您只需要在前面自动构建镜像的工作流脚本中添加一个新的 job 来调用 kubectl 即可。例如:

# 定义工作流的名称
name: Build and Push Docker Image

# 定义触发工作流的条件
on:
  workflow_dispatch: # 允许手动触发工作流
  push: # 当有代码推送事件发生时
    branches:
      - master # 只有推送到 master 分支时才触发

# 定义工作流的任务
jobs:
  build-image:
  ...
  ...
  deploy:
    needs: build-image
    runs-on: ubuntu-latest
    if: github.repository == '<your_repository>'
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - uses: actions-hub/kubectl@master
        env:
          KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
        with:
          args: rollout restart deployment my-deployment

在这个例子中,我们更新一个名为 my-deployment 的 Deployment,更新的方法非常简单:直接滚动重启。因为 Deployment 的 imagePullPolicy 默认都是 Always,且镜像 tag 保持 latest 不变,所以直接重启就会拉取最新的镜像。

如果您的镜像每次构建的 tag 都不同,那可以使用这个命令来更新镜像:

...
        with:
          args: set image deployment/my-deployment my-container=my-repo/my-image:<tag>

在这个例子中,我们更新一个名为 my-deployment 的 Deployment,将 my-container 的镜像设置为 my-repo/my-image:<tag>。其中 tag 可以通过环境变量的形式从构建镜像的 job 中获取

如果您的应用不是自己开发的,且这个应用已提供了镜像,那么您可以设计一个定时触发的工作流,工作流的任务是检测镜像仓库(例如 Docker Hub)的镜像有没有更新,如果更新了,就调用 kubectl 来更新镜像。

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

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

相关文章

【学习笔记】项目进行过程中遇到有关composer的问题

composer.json内容详解 以项目中的composer.json为例&#xff0c;参考文档。 name&#xff1a;composer包名type&#xff1a;包的类型&#xff0c;project和library两种keywords&#xff1a;关键词&#xff0c;方便别人在安装时通过关键词检索&#xff08;没试过&#xff0c;好…

成为一个黑客要多久?

一个暑假能成为黑客吗&#xff1f;资深白帽黑客告诉你答案&#xff0c;如果你想的是能到阿里五角大楼内网四处溜达&#xff0c;但是不可能的&#xff0c;但是成为一个初级黑客还是绰绰有余&#xff0c;你只需要掌握好渗透测试、外攻防、数据库等基本内容&#xff0c;搞懂外部安…

探索云原生技术之容器编排引擎-Kubernetes/K8S详解(9)

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

volatile为什么无法保证原子性

假设定义 volatile int i 0; 现在2个线程同时 i&#xff0c;为什么数据还可能会出错&#xff1f;一起来看下图&#xff0c;虽然volatile的机制是&#xff1a;如果volatile修饰的变量有修改&#xff0c;那么会将变更内容写回主内存&#xff0c;同时让其他线程工作内存的该变量缓…

5、使用 pgAdmin4 图形化创建和连接 PostgreSQL 数据库

通过上几篇文章我们讲解了如何安装 PostgreSQL 数据库软件和 pgAdmin4 图形化管理工具。 接下来几篇文章我们将继续学习如何通过 pgAdmin4 管理工具图形化创建和连接 PostgreSQL 数据库。 今天这篇文章首先让我们来了解下什么数据库和数据库管理系统&#xff0c;对数据库和数…

nnunetv2训练报错 ValueError: mmap length is greater than file size

目录 报错解决办法 报错 笔者在使用 nnunetv2 进行 KiTS19肾脏肿瘤分割实验的训练步骤中 使用 2d 和3d_lowres 训练都没有问题 nnUNetv2_train 40 2d 0nnUNetv2_train 40 3d_lowres 0但是使用 3d_cascade_fullres 和 3d_fullres 训练 nnUNetv2_train 40 3d_cascade_fullres …

【C语言】atoi函数的模拟

atoi对于初学者来说大概率是一个陌生的函数 但不要害怕&#xff0c;我们可以通过各种网站去查询 例如&#xff1a; cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数 例如&#xff1a; int main()…

由论文写作到知识教育传承,智者善用,扶AIGC踏新程!

在学术领域中&#xff0c;诚信是不可动摇的基石。但是&#xff0c;令人震惊的事件发生了&#xff0c;竟有学术论文作者将ChatGPT上操作按钮的短语「Regenerate Response」毫无保留地援引到自己的论文中&#xff0c;更令人惊讶的是&#xff0c;审稿编辑竟然未能察觉这一事实&…

ESP32网络开发实例-从LittleFS加载Web页面文件

从LittleFS加载Web页面文件 文章目录 从LittleFS加载Web页面文件1、应用介绍2、软件准备3、硬件准备4、Web页面代码与LittleFS文件系统上传4.1 Web页面代码实现4.2 Web页面代码上传5、Web服务器代码实现在文中,将展示如何构建一个 Web 服务器,为存储在 ESP32 的LittleFS文件系…

大数据NoSQL数据库HBase集群部署

目录 1. 简介 2. 安装 1. HBase依赖Zookeeper、JDK、Hadoop&#xff08;HDFS&#xff09;&#xff0c;请确保已经完成前面 2. 【node1执行】下载HBase安装包 3. 【node1执行】&#xff0c;修改配置文件&#xff0c;修改conf/hbase-env.sh文件 4. 【node1执行】&#xf…

怎么修改linux的root@后面的名称

文章目录 场景.登录服务器,root后面的名称是随机的,想自定义名称建议,直接使用命令执行需要重启机子 场景.登录服务器,root后面的名称是随机的,想自定义名称 建议,直接使用命令执行 hostnamectl set-hostname rdd-test重新连接即可生效,实际也是修改了/etc/hostname名称 需要…

高校教务系统密码加密逻辑及JS逆向——山东女子学院,蚌埠医学院,郑州工商学院,新疆大学,河南机电职业学院

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…

2023年中国水电行业研究报告

第一章 行业概况 1.1 定义 水电行业是能源领域中的重要组成部分&#xff0c;它通过利用水资源来产生电能。这个行业的核心是通过构建水电站&#xff0c;利用水的势能和动能来驱动涡轮机&#xff0c;进而产生电力。水电技术是一种清洁、可再生的能源产生方式&#xff0c;对于降…

FREAK: Fast Retina Keypoint全文翻译

英文论文和翻译链接&#xff1a;https://pan.baidu.com/s/1HKHH5bFopQBX3EslVsICPg 提取码&#xff1a;yyds FREAK: Fast Retina Keypoint FREAK:快速视网膜关键点 摘要 大量的视觉应用程序依赖于匹配图像中的关键点。过去十年的特点是朝着更快、更鲁棒的关键点和关联算法的军…

C++:模板的相关内容

文章目录 泛型编程函数模板类模板非类型模板参数模板的特化 本篇介绍一部分关于C中模板使用的问题&#xff0c;模板是C的一大特色&#xff0c;需要在实际运用中体会它的妙处 泛型编程 为了知道什么是泛型编程&#xff0c;先来看&#xff0c;如何实现对于所有类型都使用的交换…

基于统计学库statsmodel实现时间序列预测

文章目录 1.数据探索与清洗2.假设检验&#xff1a;平稳性检验3.差分处理4.绘制ACF与PACF图像&#xff0c;完成模型选择4.建立ARIMA和SARIMA模型5.解读summary6.确定最终的模型 ARIMA模型在统计学上的三大基本假设&#xff1a; 时间序列具有平稳性&#xff08;stationary&#x…

【Bug处理】E0265 函数 “SizeClass::RoundUp“ (已声明 所在行数:62)不可访问

错误描述&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0265 函数 “SizeClass::RoundUp” (已声明 所在行数:62&#xff0c;所属文件:“D:\CSTUDY\项目\高并发内存池\CONCURRENT_MEMORY_POOL\Common.h”) 不可访问 Concurrent_Memory_Pool D:\CStudy\…

10分钟搞懂,Python接口自动化测试-接口依赖-实战教程

一、场景说明 在面试接口自动化时&#xff0c;经常会问&#xff0c;其他接口调用的前提条件是当前用户必须是登录状态&#xff0c;如何处理接口依赖&#xff1f; 在此之前我们介绍过session管理器保存会话状态。如果接口请求需要携带token&#xff0c;那么又如果处理呢&#…

线性回归模型进行特征重要性分析

目的 线性回归是很常用的模型&#xff1b;在局部可解释性上也经常用到。 数据归一化 归一化通常是为了确保不同特征之间的数值范围差异不会对线性模型的训练产生过大的影响。在某些情况下&#xff0c;特征归一化可以提高模型的性能&#xff0c;但并不是所有情况下都需要进行归一…

点燃市场热情,让产品风靡全球——实用推广策略大揭秘!

文章目录 一、实用推广策略的重要性1. 提高产品知名度和认可度2. 拓展产品市场和用户群体3. 增强企业品牌形象和市场竞争力 二、实用推广策略的种类1. 社交媒体推广2. 定向推广3. 口碑营销4. 内容推广 三、实用推广策略的实施步骤1. 研究目标用户和市场需求&#xff0c;明确产品…